๐ฆ ๋ด์ผ๋ฐฐ์์บ ํ/์ฌ์ ๊ณผ์
[๋ด์ผ๋ฐฐ์์บ ํ] ์ฌ์ ๊ณผ์ - ์ถ์ต์ ์ค๋ฝ์ค ๊ฒ์ ๋ง๋ค๊ธฐ
- -
github : https://github.com/DHL68/github-DHL68/tree/main/22_04_15_memory%20test%20game
๊ธฐ์ต๋ ฅ ํ ์คํธ, ์นจํฌ์ง๋ฅผ ์ด๊ฒจ๋ผ
import pygame
from random import *
# ๋ ๋ฒจ์ ๋ง๊ฒ ์ค์
def setup(level):
global display_time
# ์ผ๋ง๋์ ์ซ์๋ฅผ ๋ณด์ฌ์ค์ง
display_time = 5 - (level // 3)
display_time = max(display_time, 1) # 1์ด ๋ฏธ๋ง์ด๋ฉด 1์ด๋ก ์ฒ๋ฆฌ
# ์ผ๋ง๋ ๋ง์ ์ซ์๋ฅผ ๋ณด์ฌ์ค ๊ฒ์ธ๊ฐ?
number_count = (level // 3) + 5
number_count = min(number_count, 20) # ๋ง์ฝ 20 ์ ์ด๊ณผํ๋ฉด 20 ์ผ๋ก ์ฒ๋ฆฌ
# ์ค์ ํ๋ฉด์ grid ํํ๋ก ์ซ์๋ฅผ ๋๋ค์ผ๋ก ๋ฐฐ์น
shuffle_grid(number_count)
# ์ซ์ ์๊ธฐ (์ด ํ๋ก์ ํธ์์ ๊ฐ์ฅ ์ค์)
def shuffle_grid(number_count):
rows = 5
columns = 9
cell_size = 130 # ๊ฐ Grid cell ๋ณ ๊ฐ๋ก, ์ธ๋ก ํฌ๊ธฐ
button_size = 110 # Grid cell ๋ด์ ์ค์ ๋ก ๊ทธ๋ ค์ง ๋ฒํผ ํฌ๊ธฐ
screen_left_margin = 55 # ์ ์ฒด ์คํฌ๋ฆฐ ์ผ์ชฝ ์ฌ๋ฐฑ
screen_top_margin = 20 # ์ ์ฒด ์คํฌ๋ฆฐ ์์ชฝ ์ฌ๋ฐฑ
# [[0, 0, 0, 0, 0, 0, 0, 0, 0],
# [0, 0, 0, 0, 0, 0, 0, 0, 0],
# [0, 0, 0, 0, 0, 0, 0, 0, 0],
# [0, 0, 0, 0, 0, 0, 0, 0, 0],
# [0, 0, 0, 0, 0, 0, 0, 0, 0]]
grid = [[0 for col in range(columns)] for row in range(rows)] # 5 x 9
number = 1 # ์์ ์ซ์ 1๋ถํฐ number_count ๊น์ง, ๋ง์ฝ 5๋ผ๋ฉด 5๊น์ง ์ซ์๋ฅผ ๋๋ค์ผ๋ก ๋ฐฐ์น
while number <= number_count:
row_idx = randrange(0, rows) # 0, 1, 2, 3, 4 ์ค์์ ๋๋ค์ผ๋ก ๋ฝ๊ธฐ
col_idx = randrange(0, columns) # 0 ~ 8 ์ค์์ ๋๋ค์ผ๋ก ๋ฝ๊ธฐ
if grid[row_idx][col_idx] == 0:
grid[row_idx][col_idx] = number # ์ซ์ ์ง์
number += 1
# ํ์ฌ grid cell ์์น ๊ธฐ์ค์ผ๋ก x, y ์์น๋ฅผ ๊ตฌํจ
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)
# ํฐ์์ผ๋ก ๋๊ทธ๋ผ๋ฏธ๋ฅผ ๊ทธ๋ฆฌ๋๋ฐ ์ค์ฌ์ขํ๋ start_button ์ ์ค์ฌ์ขํ๋ฅผ ๋ฐ๋ผ๊ฐ๊ณ ,
# ๋ฐ์ง๋ฆ์ 60, ์ ๋๊ป๋ 5
msg = game_font.render(f"Your level is {curr_level}", True, WHITE)
msg_rect = msg.get_rect(center = start_button.center)
screen.blit(msg, msg_rect)
# ๊ฒ์ ํ๋ฉด ๋ณด์ฌ์ฃผ๊ธฐ
def display_game_screen():
global hidden
if not hidden:
elapsed_time = (pygame.time.get_ticks() - start_ticks) / 1000 # ms -> sec
if elapsed_time > display_time:
hidden = True
for idx, rect in enumerate(number_buttons, start = 1):
if hidden: # ์จ๊น ์ฒ๋ฆฌ
# ๋ฒํผ ์ฌ์ํ ๊ทธ๋ฆฌ๊ธฐ
pygame.draw.rect(screen, GRAY, 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)
# pos ์ ํด๋นํ๋ ๋ฒํผ ํ์ธ
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, curr_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: # ์๋ชป๋ ์ซ์ ํด๋ฆญ
game_over()
break
# ๋ชจ๋ ์ซ์๋ฅผ ๋ค ๋งํ๋ค๋ฉด? ๋ ๋ฒจ์ ๋์ฌ์ ๋ค์ ์์ ํ๋ฉด์ผ๋ก ๊ฐ
if len(number_buttons) == 0:
start = False
hidden = False
curr_level += 1
setup(curr_level)
# ๊ฒ์ ์ข
๋ฃ ์ฒ๋ฆฌ. ๋ฉ์ธ์ง๋ ๋ณด์ฌ์ค
def game_over():
global running
running = False
msg = game_font.render(f"Your level is {curr_level}", True, WHITE)
msg_rect = msg.get_rect(center=(screen_width/2, screen_height/2))
screen.fill(BLACK)
screen.blit(msg, msg_rect)
# ์ด๊ธฐํ
pygame.init()
screen_width = 1280 # ๊ฐ๋ก ํฌ๊ธฐ
screen_height = 720 # ์ธ๋ก ํฌ๊ธฐ
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Memory Game")
game_font = pygame.font.Font(None, 120) # ํฐํธ ์ ์
# ์์ ๋ฒํผ
start_button = pygame.Rect(0, 0, 120, 120)
start_button.center = (120, screen_height - 120)
# ์๊น
BLACK = (0, 0, 0) # RGB
WHITE = (255, 255, 255)
GRAY = (50, 50, 50)
number_buttons = [] # ํ๋ ์ด์ด๊ฐ ๋๋ฌ์ผ ํ๋ ๋ฒํผ๋ค
curr_level = 1 # ํ์ฌ ๋ ๋ฒจ
display_time = None # ์ซ์๋ฅผ ๋ณด์ฌ์ฃผ๋ ์๊ฐ
start_ticks = None # ์๊ฐ ๊ณ์ฐ (ํ์ฌ ์๊ฐ ์ ๋ณด๋ฅผ ์ ์ฅ)
# ๊ฒ์ ์์ ์ฌ๋ถ
start = False
# ์ซ์ ์จ๊น ์ฌ๋ถ (์ฌ์ฉ์๊ฐ 1์ ํด๋ฆญ ํ๊ฑฐ๋, ๋ณด์ฌ์ฃผ๋ ์๊ฐ ์ด๊ณผํ์ ๋)
hidden = False
# ๊ฒ์ ์์ ์ ์ ๊ฒ์ ์ค์ ํจ์ ์ํ
setup(curr_level)
# ๊ฒ์ ๋ฃจํ
running = True # ๊ฒ์์ด ์คํ์ค์ธ๊ฐ?
while running:
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)
# ํ๋ฉด ์
๋ฐ์ดํธ
pygame.display.update()
# 5์ด ์ ๋ ๋ณด์ฌ์ค
pygame.time.delay(5000)
# ๊ฒ์ ์ข
๋ฃ
pygame.quit()
์ถ์ฒ : https://youtu.be/Qsk-xsi73YA
'๐ฆ ๋ด์ผ๋ฐฐ์์บ ํ > ์ฌ์ ๊ณผ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ด์ผ๋ฐฐ์์บ ํ] ์ฌ์ ๊ณผ์ - ๊ณ์ฐ๊ธฐ ๋ง๋ค๊ธฐ (0) | 2023.01.02 |
---|---|
[๋ด์ผ๋ฐฐ์์บ ํ] ์ฌ์ ๊ณผ์ - ์ถ์ต์ ์ค๋ฝ์ค ๊ฒ์ ๋ง๋ค๊ธฐ (0) | 2023.01.02 |
Contents
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค