비버놀로지

[PYTHON] 틱택토 (Tic Tac Toe) 본문

LANGUAGE STUDY/PYTHON

[PYTHON] 틱택토 (Tic Tac Toe)

KUNDUZ 2022. 10. 10. 22:32
728x90

아래와 같이 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()

 

 

 

728x90

'LANGUAGE STUDY > PYTHON' 카테고리의 다른 글

[PYTHON] 로또 번호 자동 생성기  (0) 2022.10.06
Comments