[memory_game.py]
from multiprocessing import current_process
import re
from tabnanny import check
import pygame
from random import *
#################################################################################################################################
# F.전역함수 선언
def setup(level) :
global display_time
display_time = 5 -(level // 3)
display_time = max(display_time, 2)
number_count = (level // 3) + 5
number_count = min(number_count, 20)
shuffle_grid(number_count)
# 프로젝트의 가장 중요한 파트 : 숫자 섞기
def shuffle_grid(number_count) :
rows = 5
columns = 9
cell_size = 130
button_size = 110
screen_left_margin = 55
screen_top_margin = 20
grid = [[0 for col in range(columns)] for row in range(rows)] # 5*9
number = 1
while number <= number_count :
row_idx = randrange(0, rows)
col_idx = randrange(0, columns)
if grid[row_idx][col_idx] == 0 :
grid[row_idx][col_idx] = number
number += 1
center_x = screen_left_margin + (col_idx * cell_size) + (cell_size / 2)
center_y = screen_top_margin + (row_idx * cell_size) + (cell_size / 2)
button = pygame.Rect(0, 0, button_size, button_size)
button.center = (center_x, center_y)
number_buttons.append(button)
print(grid)
def display_start_screen() :
pygame.draw.circle(screen, WHITE, start_button.center, 60, 5)
msg = game_font.render(f"{current_level}", True, WHITE)
msg_rect = msg.get_rect(center = start_button.center)
screen.blit(msg, msg_rect)
def check_buttons(pos) :
global start, start_ticks
if start :
check_number_buttons(pos)
elif start_button.collidepoint(pos) :
start = True
start_ticks = pygame.time.get_ticks()
def check_number_buttons(pos) :
global start, hidden, current_level
for button in number_buttons :
if button.collidepoint(pos) :
if button == number_buttons[0] :
print("Correct")
del number_buttons[0]
if not hidden :
hidden = True
else :
print("Wrong")
game_over()
break
if len(number_buttons) == 0 :
start = False
hidden = False
current_level += 1
setup(current_level)
def game_over() :
global running
running = False
msg = game_font.render(f"Level {current_level} : Game Over", True, WHITE)
msg_rect = msg.get_rect(center = (screen_width / 2, screen_height / 2))
screen.fill(BLACK)
screen.blit(msg, msg_rect)
def display_game_screen() :
global hidden
if not hidden :
elapsed_time = (pygame.time.get_ticks() - start_ticks) / 1000
if elapsed_time > display_time :
hidden = True
for idx, rect in enumerate(number_buttons, start=1) :
if hidden :
pygame.draw.rect(screen, WHITE, rect)
else :
cell_text = game_font.render(str(idx), True, WHITE)
text_rect = cell_text.get_rect(center = rect.center)
screen.blit(cell_text, text_rect)
#################################################################################################################################
# 0.기본 화면 초기화 부분
pygame.init() #초기화
#화면 크기 조정하기
screen_width = 1280
screen_height = 720
screen = pygame.display.set_mode((screen_width,screen_height))
#화면 타이틀 설정
pygame.display.set_caption("Memory Game")
#FPS
clock = pygame.time.Clock()
game_font = pygame.font.Font(None,120)
#################################################################################################################################
# 1.기본 변수 선언
start_button = pygame.Rect(0, 0, 120, 120)
start_button.center = (120, screen_height - 120)
BLACK = (0,0,0)
WHITE = (255,255,255)
GRAY = (50,50,50)
start = False
number_buttons = []
current_level = 1
hidden = False
display_time = None
start_ticks = None
#################################################################################################################################
# 2.이벤트 처리 (키보드, 마우스 등)
setup(current_level)
running = True # 게임이 실행 중이라면 이후 모든 이벤트를 실행
while running : # 게임이 실행중인동안 이벤트 실행
dt = clock.tick(60) # 게임화면의 초당 프레임 설정
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()
print(click_pos)
screen.fill(BLACK)
if start :
display_game_screen()
else :
display_start_screen()
if click_pos :
check_buttons(click_pos)
# 6.화면 업데이트 : 무조건 실행 (while 문 안에서)
pygame.display.update()
#################################################################################################################################
pygame.time.delay(2000)
# 7.종료
pygame.quit()
'source Code > Python' 카테고리의 다른 글
| Python | py_basic_week1 (0) | 2022.09.02 |
|---|---|
| Python | py_basic_week1 (0) | 2022.09.01 |
| Python | poo_game.py (0) | 2022.09.01 |
| Python | weapon_game.py (0) | 2022.08.25 |
| Python | calculator.py (0) | 2022.08.18 |