1. 게임 이름 : 순발력 테스트 1 to 50
http://zzzscore.com/1to50/?from=kt
2. 게임 설명
- 1부터 50까지의 숫자가 랜덤으로 등장한다.
- 숫자 순서대로 마우스로 1부터 50까지 빠르게 클릭하면 성공
3. 개발 일정 계획
- 1일차 : 게임 주제 선정, 전체 틀 작성, 기능 개발
- 2일차 : 기능 Develop, UI 구현, 스토리 화면 등 구현
- 3일차 : Refactoring 코드 개선 객체화, 함수 지향형
4. 목표 개발 사항
- 이미지 리소스 삽입
(중요) 게임의 이기고 지는 규칙 설계/구현=> 기획간 고려 완료- Stage별로 난이도 설정(1,2,3 / Easy, Normal, Hard)
(선택) 시간 기능=> 구현 완료- 마우스, 키보드 이벤트 처리(사용자 입력, 멈춤 기능 등) => Develop 이벤트 필요
- 메뉴 연동(Start/Pause/Resume)
- (선택) 게임 결과 저장/로드 기능(파일 또는 데이터베이스 활용)
- (선택) 몰입감을 높이기 위한 화면 모드 전환 기능(풀스크린/일반스크린)
- (선택) 멀티 플레이, 컴퓨터와 대전하는 기능
5. 1일차 코드
from random import random
import pygame
import random
# 초기 Setting
pygame.init()
pygame.font.init()
window_width, window_height = 720, 720 # 가로, 세로 크기
pandel_width, panel_height = 500, 500 # 숫자 Grid
grid_size, pading_size = 100, 50
window = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption("1 to 50 Game")
clock = pygame.time.Clock()
# COLOR , FONT
game_font = pygame.font.SysFont("arialrounded", 20) # 폰트 정의 (Pyinstaller 패키징을 위해 폰트 명시)
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GRAY = (255, 0, 0)
# random 난수 생성
def get_random(min_num, max_num):
num_list = list(range(min_num, max_num+1))
random.shuffle(num_list)
return num_list
# TIME 형식 바꾸기
def convert_time(ticks):
minutes, sec, ms = 0, 0, 0
ms = ticks % 1000
sec = ticks // 1000
minutes = sec // 60
return str(minutes) + ":" + str(sec) + ":" + str(ms)
# 초기 Draw
def init_setting():
for i in range(5):
for j in range(5):
# Get Rect Object
x, y = i*grid_size, j*grid_size
rect = pygame.Rect(x, y, grid_size, grid_size)
# Get Rect Num
rect_num = random_list[i*5+j]
# Rect Info Save
rects.append({'rect':rect, 'rect_num':rect_num})
addon_rects.append({'rect':rect, 'rect_num':rect_num+25})
random_list = get_random(1, 25) # 초기 random number
num_list = list(range(0,51)) # 1 ~ 50
# game내 rects 관리
rects, addon_rects = [], []
cur_num = 1
# Rect / Text 그리기 (RECTS에 맞춰서 순서대로 그림)
def grid_draw(rects): # rects = [{'rect':rect, 'rect_num':rect_num}, {'rect':rect, 'rect_num':rect_num}, {'rect':rect, 'rect_num':rect_num}]
for r in rects:
rect = r['rect']
pygame.draw.rect(surface = window, color = WHITE, rect = rect, width = 1)
# Get Rect Num
rect_num = r['rect_num']
if rect_num == None:
cell_text = game_font.render(' ', True, WHITE) # text render
else:
cell_text = game_font.render(str(rect_num), True, WHITE) # text render
text_rect = cell_text.get_rect(center=rect.center) # rect의 중심점을 가진 text rect 좌표
window.blit(cell_text, text_rect)
#### 1. Init Rect 배열 생성
init_setting()
# 게임 루프
running = True # 게임 실행 Flag
while running:
clock.tick(20) # 초당 프레임 수
# if play == True :
# image = pygame.image.load('space.jpg')
window.fill(BLACK)
# image = pygame.transform.scale(image, (window_width, window_height))
# window.blit(image, (0, 0))
## Timer ==============================
now_ticks = pygame.time.get_ticks() # 현재 tick 을 받아옴
now_time = convert_time(now_ticks)
cell_text = game_font.render(now_time, True, WHITE) # text render
window.blit(cell_text, (window_width/2, window_height-60))
# =====================================
## Grid ===============================
grid_draw(rects)
# =====================================
## 이벤트 루프 =========================
click_pos = None
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONUP: # 사용자가 마우스를 클릭했을때
click_pos = pygame.mouse.get_pos()
# 클릭시
if click_pos:
for i, r in enumerate(rects):
# 마우스 클릭시 클릭한 사각형 찾기
if r['rect'].collidepoint(click_pos):
# 눌러야 되는 숫자가 맞다면 ==> Rects 배열 수정
rect_num = r['rect_num']
if rect_num == num_list[cur_num]:
# 숫자가 50을 넘었으면 None으로 넣어놓기.
draw_num = int(rect_num)+25
if draw_num > 50:
rects[i]['rect_num'] = None
else: # Rect 배열 Rect_num 수정
rects[i]['rect_num'] = draw_num
# 현재 숫자 관리
cur_num+=1
# 잘못 누른거라면
else:
pass
# =====================================
# 화면 업데이트
pygame.display.update()
# 게임 종료
pygame.quit()
'내배캠 (22.04~22.08)' 카테고리의 다른 글
인스타그램 클론 프로젝트 (개인) (1) | 2022.05.02 |
---|---|
Pygame - 순발력 테스트 1 to 50 (2) (1) | 2022.04.26 |
Team Introduction 프로젝트 KPT 회고 (0) | 2022.04.22 |
기억력 테스트 게임 with Pygame (0) | 2022.04.14 |
오락실 고전 게임 with Pygame (0) | 2022.04.14 |