52 — 게임: 틱택토
51 가이드가 판을 만들었고, 26 가이드가 물어봐, while True, break로 선택지를 게임 반복으로 바꾸는 법을 보여 주었습니다. 틱택토는 둘을 합칩니다: 두 플레이어가 돌아가며 행과 열을 고르고, 매 차례마다 함수가 세 개가 한 줄에 있는지 확인합니다.
단계
- 게임 전체가 파일 하나에 있습니다.
tictactoe.ko.nme으로 저장합니다. 판과판보여줘는 51에서 나오고,승자확인은 행·열·대각선을 살펴 승리 표시를 돌려주며 한 줄도 없으면None을 돌려줍니다.숫자로 물어봐가 행과 열을 정수로 읽고,continue가 찬 칸을 거르며,움직임 == 9가 무승부를 선언합니다:
실행해 보기 →# tictactoe.ko.nme — 두 명이 하는 틱택토 게임. # 실행: nme 실행 tictactoe.ko # 판은 행들의 목록입니다(51 가이드). 차례마다 표시를 놓고, # 승자확인 함수가 가로·세로·대각선에서 세 개가 같은지 봅니다. 판 = [["-", "-", "-"], ["-", "-", "-"], ["-", "-", "-"]] def 판보여줘(판): for 행 in 판: 말해 행 def 승자확인(판): # 가로: 나란히 같은 표시 세 개. for 행 in 판: if 행[0] == 행[1] and 행[1] == 행[2] and 행[0] != "-": return 행[0] # 세로: 아래로 곧게 같은 표시 세 개. for 열 in range(3): if 판[0][열] == 판[1][열] and 판[1][열] == 판[2][열] and 판[0][열] != "-": return 판[0][열] # 대각선: 구석에서 구석으로. if 판[0][0] == 판[1][1] and 판[1][1] == 판[2][2] and 판[0][0] != "-": return 판[0][0] if 판[0][2] == 판[1][1] and 판[1][1] == 판[2][0] and 판[0][2] != "-": return 판[0][2] return None 표시 = "X" 움직임 = 0 말해 "틱택토! 행과 열은 0, 1, 2입니다." 말해 "표시 세 개를 한 줄에 놓으면 이깁니다. X가 먼저입니다." while True: 판보여줘(판) 행을 숫자로 물어봐 f"{표시} 차례, 행 (0-2): " 열을 숫자로 물어봐 f"{표시} 차례, 열 (0-2): " if 판[행][열] != "-": 말해 "그 칸은 이미 차 있습니다. 다른 칸을 고르세요." continue 판[행][열] = 표시 움직임 = 움직임 + 1 승자 = 승자확인(판) if 승자 is not None: 말해 f"{움직임} 번 움직인 뒤:" 판보여줘(판) 말해 f"{승자} 표시가 이겼습니다!" break if 움직임 == 9: 말해 f"{움직임} 번 움직인 뒤:" 판보여줘(판) 말해 "비겼습니다." break if 표시 == "X": 표시 = "O" else: 표시 = "X" - 파이프로 게임 전체를 돌립니다 — 행·열을 다섯 차례 입력합니다. X가 한 행을 채우고 마지막 차례에 이깁니다:
printf '0\n0\n1\n0\n0\n1\n2\n0\n0\n2\n' | nme 실행 tictactoe.ko틱택토! 행과 열은 0, 1, 2입니다. 표시 세 개를 한 줄에 놓으면 이깁니다. X가 먼저입니다. ['-', '-', '-'] ['-', '-', '-'] ['-', '-', '-'] X 차례, 행 (0-2): X 차례, 열 (0-2): ['X', '-', '-'] ['-', '-', '-'] ['-', '-', '-'] O 차례, 행 (0-2): O 차례, 열 (0-2): ['X', '-', '-'] ['O', '-', '-'] ['-', '-', '-'] X 차례, 행 (0-2): X 차례, 열 (0-2): ['X', 'X', '-'] ['O', '-', '-'] ['-', '-', '-'] O 차례, 행 (0-2): O 차례, 열 (0-2): ['X', 'X', '-'] ['O', '-', '-'] ['O', '-', '-'] X 차례, 행 (0-2): X 차례, 열 (0-2): 5 번 움직인 뒤: ['X', 'X', 'X'] ['O', '-', '-'] ['O', '-', '-'] X 표시가 이겼습니다!마지막 판에 승리 행이 보입니다: 맨 위에
X가 가로로 있습니다.break가 게임을 끝냈으므로 승리 차례가 마지막 차례입니다.
직접 해보기
O가 이기는 게임과 무승부로 끝나는 게임을 해 보고, 승자확인이 어느 줄이 완성됐는지도 말하게 해 보세요 — 예를 들어 "0행".
배운 것
숫자로 물어봐가 행과 열을 정수로 읽고,판[행][열]이 표시를 씁니다.- 함수가 행·열·대각선에서 같은 표시 세 개를 확인합니다.
continue는 찬 칸을 거르고,break는 게임을 끝냅니다.움직임 == 9에 승자가 없으면 무승부입니다.