지뢰찾기 코딩

2023. 8. 24. 18:55공학,과학/매트랩,파이썬,오픈시스(tcl) 코딩

반응형

 연차내고 구조공부를 하던 중 갑자기 심심풀이로 지뢰찾기 게임이나 만들어서 잠시 머리식혔는데 해당 코드를 남겨둔다.

 

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import random
 
# 지뢰 위치를 나타내는 배열
MINE_POS = [
    (00), (01), (02), (03), (04),
    (10), (11), (12), (13), (14),
    (20), (21), (22), (23), (24),
    (30), (31), (32), (33), (34),
    (40), (41), (42), (43), (44)
]
 
# 게임 보드 크기
BOARD_SIZE = 5
 
# 게임 진행 시간을 측정하는 타이머... 귀찮아서 뒤에 구현하지는 않음.
TIMER = 0
 
# 게임 시작 함수
def start_game():
    global TIMER
    TIMER = 0
    # 게임 보드 생성
    board = create_board()
    # 지뢰 위치 랜덤 설정
    set_mine_pos(board)
    # 게임 시작
    print_board(board)
    while True:
        # 사용자 입력 받기
        x, y = input("지뢰를 찾을 위치를 입력하세요(x, y): ").split()
        x = int(x)
        y = int(y)
        # 지뢰 찾기
        if find_mine(board, x, y):
            # 지뢰 발견
            print("지뢰 발견! 게임 종료")
            break
        else:
            # 지뢰 발견하지 않음
            print("지뢰 발견하지 않음")
            # 다음 턴으로 이동
           
            
 
# 게임 보드 생성 함수
def create_board():
    board = [[0* BOARD_SIZE for _ in range(BOARD_SIZE)]
    return board

 
# 지뢰 위치 랜덤 설정 함수
def set_mine_pos(board):
    for i in range(len(MINE_POS)):
        x, y = MINE_POS[i]
        if x == random.randrange(1,BOARD_SIZE) and y == random.randrange(1,BOARD_SIZE):
            board[x][y] = 1
    for i in range(len(MINE_POS)):
        x, y = MINE_POS[i]
        if x == random.randrange(1,BOARD_SIZE) and y == random.randrange(1,BOARD_SIZE):
            board[x][y] = 1
    for i in range(len(MINE_POS)):
        x, y = MINE_POS[i]
        if x == random.randrange(1,BOARD_SIZE) and y == random.randrange(1,BOARD_SIZE):
            board[x][y] = 1


 
# 게임 보드 출력 함수
def print_board(board):
    
    for i in range(BOARD_SIZE):
        for j in range(BOARD_SIZE):
            if board[i][j] == 2:
                print("💥", end="")
            elif board[i][j] == 3:
                count = 0
                for r in [i-1,i, i+1]:
                    for c in [j-1,j, j+1]:
                        if 0 <= r < BOARD_SIZE and 0 <= c < BOARD_SIZE and (board[r][c] == 1 or board[r][c] == 2):
                            count += 1
                print(str(count)+" ", end="")
            else:
                print("🌿", end="")
        print()
    check0 = 0
    for i in range(BOARD_SIZE):
        for j in range(BOARD_SIZE):
            if board[i][j] ==0:
                check0=check0+1
    if check0 == 0:
        print("게임 클리어")
        exit()
 
# 지뢰 찾기 함수
def find_mine(board, x, y):
    if x >= 0 and x < BOARD_SIZE and y >= 0 and y < BOARD_SIZE:
        if board[x][y] == 0:
            board[x][y] = 3
            print_board(board)
            print("")
            return True
        elif board[x][y] == 1:
            board[x][y] = 2
            print_board(board)
            print("지뢰 밟음")
            return 0  
        else:
            return True     
 
# 게임 결과 출력
board = create_board()
set_mine_pos(board)
print_board(board)
for i in range(100):
    a= find_mine(board, int(input("탐색 행번호"))-1int(input("탐색 열번호"))-1)
    if a == 0:
        break
    
print("게임 결과")
print("시간: %d초" % (TIMER))
print("지뢰 위치: %s" % (MINE_POS))
print("게임 보드: ")
print_board(board)

cs

실행시의 화면은 아래와 같다.

클리어 시 화면
클리어 실패 시 화면

 

 

저렇게 로직이 정상적으로 동작하는걸 확인한 후에 실제 마우스 클릭으로 동작할 수 있게 코드만 추가하여 아래와 같이 마무리해서 즐겼다는 후문이다. 해당 파일 같이 남긴다.(위에서 제대로 구현안한 게임시간 기록도 추가함)

 

지뢰찾기.exe
9.80MB

 
 
 
 
반응형