_won_
wonprogrammer
_won_
전체 방문자
오늘
어제
  • 분류 전체보기
    • woncoding
      • TIL
      • WIL
    • source Code
      • Python
      • Programmers
      • BAEKJOON

블로그 메뉴

  • 방명록

티스토리

Github · Wonprogrammer
hELLO · Designed By 정상우.
_won_

wonprogrammer

source Code/Python

Python | memory_game.py

2022. 8. 26. 01:12

[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
    'source Code/Python' 카테고리의 다른 글
    • Python | py_basic_week1
    • Python | poo_game.py
    • Python | weapon_game.py
    • Python | calculator.py
    _won_
    _won_
    Coding Practice blog

    티스토리툴바