Code of AI

[ChatGPT] 지뢰찾기 게임 만들기 I

별별AI 2023. 9. 20. 17:09
728x90

요청 : 윈도우OS용 지뢰찾기 게임을 파이썬으로 코딩해서 만들어줘. 지뢰를 랜덤으로 배치하는데 지뢰를 클릭하면 새로 시작하도록 하고, 지뢰 주변을 클릭하면 주변에 지뢰가 몇개 맞닿아 있는지 숫자로 표시되도록 해줘.

 


 

지뢰찾기 게임을 파이썬으로 만들기 위해서는 Pygame 라이브러리를 사용할 수 있습니다. 먼저 Pygame을 설치해야 합니다. 다음 명령으로 설치할 수 있습니다:

 

pip install pygame

 

다음은 간단한 지뢰찾기 게임의 예제 코드입니다. 이 코드에서는 10x10 크기의 게임 보드를 생성하고, 랜덤하게 20개의 지뢰를 배치합니다. 게임 보드의 각 칸은 클릭 가능하며, 클릭하면 주변에 있는 지뢰의 수가 표시됩니다. 지뢰를 클릭하면 게임이 다시 시작됩니다.

 

 

import pygame
import random

# 게임 설정
WIDTH, HEIGHT = 400, 400
ROWS, COLS = 10, 10
MINES = 20
TILE_SIZE = WIDTH // COLS

# 색깔
WHITE = (255, 255, 255)
GRAY = (192, 192, 192)
BLACK = (0, 0, 0)

# 초기화
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("지뢰찾기")

# 보드 초기화
board = [[0 for _ in range(COLS)] for _ in range(ROWS)]
revealed = [[False for _ in range(COLS)] for _ in range(ROWS)]
mines = []

# 지뢰 배치
for _ in range(MINES):
    while True:
        x, y = random.randint(0, COLS - 1), random.randint(0, ROWS - 1)
        if board[y][x] == 0:
            board[y][x] = -1
            mines.append((x, y))
            break

# 주변 지뢰 개수 계산
for x, y in mines:
    for dx in range(-1, 2):
        for dy in range(-1, 2):
            if 0 <= x + dx < COLS and 0 <= y + dy < ROWS and board[y + dy][x + dx] != -1:
                board[y + dy][x + dx] += 1

# 게임 루프
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            x, y = event.pos[0] // TILE_SIZE, event.pos[1] // TILE_SIZE
            if not revealed[y][x]:
                revealed[y][x] = True
                if board[y][x] == -1:
                    # 게임 오버
                    print("게임 오버!")
                    revealed = [[True for _ in range(COLS)] for _ in range(ROWS)]
                elif board[y][x] == 0:
                    # 주변 지뢰가 없으면 주변 타일도 자동으로 열기
                    stack = [(x, y)]
                    while stack:
                        cx, cy = stack.pop()
                        for dx in range(-1, 2):
                            for dy in range(-1, 2):
                                nx, ny = cx + dx, cy + dy
                                if 0 <= nx < COLS and 0 <= ny < ROWS and not revealed[ny][nx]:
                                    revealed[ny][nx] = True
                                    if board[ny][nx] == 0:
                                        stack.append((nx, ny))

    # 그리기
    screen.fill(WHITE)
    for y in range(ROWS):
        for x in range(COLS):
            rect = pygame.Rect(x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE)
            if revealed[y][x]:
                pygame.draw.rect(screen, GRAY, rect)
                if board[y][x] > 0:
                    font = pygame.font.Font(None, 36)
                    text = font.render(str(board[y][x]), True, BLACK)
                    text_rect = text.get_rect(center=rect.center)
                    screen.blit(text, text_rect)
            else:
                pygame.draw.rect(screen, BLACK, rect)

    pygame.display.flip()

pygame.quit()

 

 

이 코드는 기본적인 지뢰찾기 게임을 구현한 것입니다. 더 많은 기능을 추가하거나 사용자 인터페이스를 개선하려면 코드를 확장하실 수 있습니다.

 

 


코드 실행 결과 확인

 

 

위 화면에서 어느 한 곳만을 클릭해도 아래처럼 출력이 되고 끝나버림

 

 

미완성 성태이니 수정을 요청해야 함

728x90