지뢰찾기 코딩
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 = [
(0, 0), (0, 1), (0, 2), (0, 3), (0, 4),
(1, 0), (1, 1), (1, 2), (1, 3), (1, 4),
(2, 0), (2, 1), (2, 2), (2, 3), (2, 4),
(3, 0), (3, 1), (3, 2), (3, 3), (3, 4),
(4, 0), (4, 1), (4, 2), (4, 3), (4, 4)
]
# 게임 보드 크기
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("탐색 행번호"))-1, int(input("탐색 열번호"))-1)
if a == 0:
break
print("게임 결과")
print("시간: %d초" % (TIMER))
print("지뢰 위치: %s" % (MINE_POS))
print("게임 보드: ")
print_board(board)
|
cs |
실행시의 화면은 아래와 같다.
저렇게 로직이 정상적으로 동작하는걸 확인한 후에 실제 마우스 클릭으로 동작할 수 있게 코드만 추가하여 아래와 같이 마무리해서 즐겼다는 후문이다. 해당 파일 같이 남긴다.(위에서 제대로 구현안한 게임시간 기록도 추가함)
반응형
'공학,과학 > 매트랩,파이썬,오픈시스(tcl) 코딩' 카테고리의 다른 글
풀스택 개발... svelte를 쓸까? (0) | 2024.03.06 |
---|---|
visual studio code에서 OpenSees 외부 실행파일을 통한 build system (0) | 2021.08.16 |
Opensees version 3.3.0 released! (오픈시스 신규버젼 배포 및 설치) (0) | 2021.05.24 |
비쥬얼베이직 편집 (VBS, VB.net)__ ...결국 visual studio code 정착 (0) | 2021.05.14 |
opensees 작업을 위한 문서편집기 세팅 방법 및 navigator 정보 (9) | 2021.04.25 |