LANGUAGE STUDY/PYTHON
[PYTHON] 틱택토 (Tic Tac Toe)
KUNDUZ
2022. 10. 10. 22:32
반응형
아래와 같이 3X3 한줄을 만들면 이기는 게임이다.
일단 기본적으로 아래와 같이 A, B 두명의 플레이어를 두고 게임을 시작한다.
board는 기본적으로 3X3으로 되어있는 배열을 사용하고, " " 을 각 각에 넣어준다.
def __init__(self):
self.board = {(i + 1): " " for i in range(9)}
self.counter = 0
self.winner = False
self.playing = True
self.tie = False
self.player_name = ["A", "B"]
self.player_details = []
아래와 같이 입력을 받아주어 플레이어가 선택한 곳에 O, X를 넣어 주도록 한다.
def insert_input(self, player, marker):
print(f"Print {player} > marker를 둘 위치를 1~9 사이에서 선택: ")
slot_num = int(input())
while self.board[slot_num] != " ":
print("다른 번호 입력: ")
slot_num = int(input())
self.board[slot_num] = marker
마지막으로 아래의 method를 통해서 게임의 승자가 나왔는지 확인을 하고, 만약에 승자가 없을 경우에는 무승부를 출력해 준다.
def win_game(self, player, marker):
win_cond = ((self.board[1] == self.board[2] == self.board[3] == marker)
or (self.board[4] == self.board[5] == self.board[6] == marker)
or (self.board[7] == self.board[8] == self.board[9] == marker)
or (self.board[1] == self.board[4] == self.board[7] == marker)
or (self.board[2] == self.board[5] == self.board[8] == marker)
or (self.board[3] == self.board[6] == self.board[9] == marker)
or (self.board[1] == self.board[5] == self.board[9] == marker)
or (self.board[3] == self.board[5] == self.board[7] == marker))
if win_cond:
self.print_board()
time.sleep(0.5)
print(f"Player {player} 승리!")
return True
else:
return False
아래는 전체 코드로 실행을 하게 되면 틱택토를 플레이 할 수 있게 된다.
import time
class TicTacToe:
def __init__(self):
self.board = {(i + 1): " " for i in range(9)}
self.counter = 0
self.winner = False
self.playing = True
self.tie = False
self.player_name = ["A", "B"]
self.player_details = []
def print_board(self):
for i in range(1, 10):
print(f"{i}: {self.board[i]} ", end=" ")
if i % 3 == 0:
print()
def play_again(self):
print("게임을 다시 시작하시겠습니까? Y/N")
reply = input()
if reply == "Y":
print("게임 시작")
self.board = {(i + 1): " " for i in range(9)}
return True
else:
print("게임 종료")
return False
def get_player_details(self):
if self.counter % 2 == 0:
return ["A", "X"]
else:
return ["B", "O"]
def insert_input(self, player, marker):
print(f"Print {player} > marker를 둘 위치를 1~9 사이에서 선택: ")
slot_num = int(input())
while self.board[slot_num] != " ":
print("다른 번호 입력: ")
slot_num = int(input())
self.board[slot_num] = marker
def win_game(self, player, marker):
win_cond = ((self.board[1] == self.board[2] == self.board[3] == marker)
or (self.board[4] == self.board[5] == self.board[6] == marker)
or (self.board[7] == self.board[8] == self.board[9] == marker)
or (self.board[1] == self.board[4] == self.board[7] == marker)
or (self.board[2] == self.board[5] == self.board[8] == marker)
or (self.board[3] == self.board[6] == self.board[9] == marker)
or (self.board[1] == self.board[5] == self.board[9] == marker)
or (self.board[3] == self.board[5] == self.board[7] == marker))
if win_cond:
self.print_board()
time.sleep(0.5)
print(f"Player {player} 승리!")
return True
else:
return False
def play(self):
while self.playing:
self.print_board()
player_details = self.get_player_details()
self.insert_input(*player_details)
self.counter += 1
winner = self.win_game(*player_details)
if self.counter == 9 and not winner:
print("무승부")
self.tie = True
self.print_board()
if winner or self.tie:
self.playing = self.play_again()
if self.playing:
self.counter = 0
ttt = TicTacToe()
ttt.play()
반응형