Python에서 Tic-Tac-Toe 게임을 만드는 방법은 무엇입니까?
게시 됨: 2021-08-19Python으로 간단한 Tic Tac Toe 게임을 만들어 봅시다. 게임 로직을 구축하고 코드를 구성하는 방법을 이해하는 데 도움이 됩니다.
게임은 인간이 가지고 있는 오락 중 하나입니다. 우리는 웹, 모바일, 데스크탑 등에서 다양한 유형의 게임을 찾을 수 있습니다. 우리는 지금 그 무거운 게임 중 하나를 만들기 위해 여기에 있는 것이 아닙니다. Python을 사용하여 CLI tic-tac-toe 게임을 만들 것입니다.
Tic Tac Toe가 익숙하지 않다면 여기에서 시각적으로 재생하여 이해하십시오. 이해하지 못하더라도 걱정하지 마십시오.
박하 사탕 발가락
튜토리얼은 세 개의 다른 섹션으로 나뉩니다. 첫 번째 섹션에서는 틱택토 게임을 하는 방법을 알게 됩니다. 그런 다음 게임 논리를 만드는 데 도움이 되는 알고리즘을 볼 수 있습니다. 마지막으로 구조화된 코드와 그에 대한 설명을 살펴보겠습니다.
Tic Tac Toe 게임 방법을 이미 알고 있다면 첫 번째 섹션을 건너뛸 수 있습니다.
이제 더 이상 고민하지 않고 첫 번째 섹션으로 들어가 보겠습니다.
박하 사탕 발가락 재생
한 게임에는 두 명의 플레이어가 있습니다. 두 개의 기호는 각 플레이어를 나타냅니다. 게임에서 사용되는 일반적인 기호는 X 와 O 입니다. 마지막으로 9개의 상자가 있는 보드가 있습니다.
틱택토 보드를 시각적으로 보십시오.

게임 플레이는 다음과 같습니다.
- 먼저 한 명의 사용자가 사용 가능한 빈 상자 중 하나에 서명을 넣습니다.
- 다음으로 두 번째 사용자는 사용 가능한 빈 상자 중 하나에 서명을 넣습니다.
- 플레이어의 목표는 각각의 기호를 완전히 행 방향이나 열 방향 또는 대각선으로 배치하는 것입니다.
- 게임은 플레이어가 게임에서 이기거나 이기는 경기 없이 모든 상자를 채워 무승부로 끝날 때까지 계속됩니다.
시각적으로 몇 가지 게임 플레이를 보자.

위의 게임 플레이에서 플레이어 X 가 게임에서 승리합니다. 모든 상자는 대각선으로 X 기호로 채워집니다. 따라서 해당 플레이어가 게임에서 승리합니다.
같은 기호를 배열하고 게임에서 승리하는 방법은 총 8 가지가 있습니다. 게임에서 이길 수있는 8 가지 배열을 모두 살펴 보겠습니다.

그리고 마지막으로 무승부는 승패 결정 없이 보드를 채웁니다. 이제 Tic Tac Toe 사용법을 이해하시기 바랍니다.
자, 이제 당신을 위한 놀이 시간입니다. 여기로 이동하여 게임을 플레이하여 게임 플레이를 완전히 이해할 수 있습니다. 이미 받은 경우 그대로 두십시오.
이제 알고리즘 섹션을 이동할 차례입니다.
연산
이제 우리는 코드를 작성하는 알고리즘에 대해 논의할 것입니다. 이 알고리즘은 선택한 프로그래밍 언어로 코드를 작성하는 데 도움이 됩니다. 어떻게 되었는지 봅시다.
- 2차원 배열을 사용하여 보드를 만들고 각 요소를 공백으로 초기화합니다.
- 원하는 기호를 사용하여 비어 있음을 나타낼 수 있습니다. 여기서는 하이픈을 사용하겠습니다.
'-'.
- 원하는 기호를 사용하여 비어 있음을 나타낼 수 있습니다. 여기서는 하이픈을 사용하겠습니다.
- 보드가 채워졌는지 확인하는 함수를 작성하십시오.
- 보드에 대해 반복하고 보드에 빈 기호가 있으면
false반환하고true않으면true반환true.
- 보드에 대해 반복하고 보드에 빈 기호가 있으면
- 플레이어가 이겼는지 여부를 확인하는 함수를 작성하십시오.
- 이전 섹션에서 논의한 모든 가능성을 확인해야 합니다.
- 모든 행, 열 및 두 개의 대각선을 확인합니다.
- 사용자가 플레이하는 동안 여러 번 보드를 보여주므로 보드를 표시하는 함수를 작성하십시오.
- 게임을 시작하는 함수를 작성하십시오.
- 무작위로 플레이어의 첫 번째 턴을 선택합니다.
- 게임이 끝나면(승리 또는 무승부) 중단되는 무한 루프를 작성합니다.
- 다음 이동을 위한 지점을 선택하기 위해 사용자에게 보드를 보여줍니다.
- 사용자에게 행과 열 번호를 입력하도록 요청합니다.
- 해당 선수 사인으로 자리를 업데이트하십시오.
- 현재 플레이어가 게임에서 이겼는지 확인합니다.
- 현재 플레이어가 게임에서 이기면 승리 메시지를 인쇄하고 무한 루프를 끊습니다.
- 다음으로 보드가 채워졌는지 확인합니다.
- 보드가 채워지면 그리기 메시지를 인쇄하고 무한 루프를 끊습니다.
- 마지막으로 사용자에게 보드의 최종 보기를 보여줍니다.
무슨 일이 일어나고 있는지 시각화할 수 있습니다. 완전히 이해하지 못하더라도 걱정하지 마십시오. 코드를 보면 더 명확해질 것입니다.
그럼 코드 섹션으로 넘어가 보겠습니다. 코드를 시도하기 위해 PC에 Python이 설치되어 있다고 가정합니다.
암호
아래 코드를 통해 이동합니다.
import random class TicTacToe: def __init__(self): self.board = [] def create_board(self): for i in range(3): row = [] for j in range(3): row.append('-') self.board.append(row) def get_random_first_player(self): return random.randint(0, 1) def fix_spot(self, row, col, player): self.board[row][col] = player def is_player_win(self, player): win = None n = len(self.board) # checking rows for i in range(n): win = True for j in range(n): if self.board[i][j] != player: win = False break if win: return win # checking columns for i in range(n): win = True for j in range(n): if self.board[j][i] != player: win = False break if win: return win # checking diagonals win = True for i in range(n): if self.board[i][i] != player: win = False break if win: return win win = True for i in range(n): if self.board[i][n - 1 - i] != player: win = False break if win: return win return False for row in self.board: for item in row: if item == '-': return False return True def is_board_filled(self): for row in self.board: for item in row: if item == '-': return False return True def swap_player_turn(self, player): return 'X' if player == 'O' else 'O' def show_board(self): for row in self.board: for item in row: print(item, end=" ") print() def start(self): self.create_board() player = 'X' if self.get_random_first_player() == 1 else 'O' while True: print(f"Player {player} turn") self.show_board() # taking user input row, col = list( map(int, input("Enter row and column numbers to fix spot: ").split())) print() # fixing the spot self.fix_spot(row - 1, col - 1, player) # checking whether current player is won or not if self.is_player_win(player): print(f"Player {player} wins the game!") break # checking whether the game is draw or not if self.is_board_filled(): print("Match Draw!") break # swapping the turn player = self.swap_player_turn(player) # showing the final view of board print() self.show_board() # starting the game tic_tac_toe = TicTacToe() tic_tac_toe.start()코드의 샘플 출력을 확인하십시오.

$ python tic_tac_toe.py Player X turn - - - - - - - - - Enter row and column numbers to fix spot: 1 1 Player O turn X - - - - - - - - Enter row and column numbers to fix spot: 2 1 Player X turn X - - O - - - - - Enter row and column numbers to fix spot: 1 2 Player O turn XX - O - - - - - Enter row and column numbers to fix spot: 1 3 Player X turn XXO O - - - - - Enter row and column numbers to fix spot: 2 2 Player O turn XXO OX - - - - Enter row and column numbers to fix spot: 3 3 Player X turn XXOOX - - - O Enter row and column numbers to fix spot: 3 2 Player X wins the game! XXO OX - - XO코드의 구조를 이해하는 데 도움이 되는 몇 가지 주요 사항.
- 우리는 클래스를 사용하여 모든 메소드를 한 곳에서 사용했습니다. 다른 코드에서도 쉽게 재사용 가능한 번들이 될 수 있습니다.
- 다음으로, 작은 작업일지라도 각 책임에 대해 서로 다른 기능을 정의했습니다. 코드를 쉽게 유지하는 데 도움이 됩니다.
- 위의 두 가지 접근 방식은 게임을 업데이트하려는 경우 앱을 쉽게 업데이트하는 데 도움이 됩니다.
자유롭게 구조를 조정하고 프로젝트에 따라 개선하십시오. 코드를 구조화하는 것은 제한되지 않습니다.
마지막 단어
만세! 게임을 처음부터 완전히 만들었습니다. 우리가 매일 하는 비주얼 게임 중 하나가 아닙니다. 그러나 논리를 작성하고 코드에서 깔끔한 구조를 유지하는 데 도움이 됩니다. 이와 같은 흥미로운 게임을 만들려면 유사한 지침을 따르십시오. 몇 년을 어린 시절로 거슬러 올라가면 비슷한 게임을 찾을 수 있습니다.
행복한 코딩!
다음으로 Python unittest 모듈을 사용하여 숫자 추측 게임 및 단위 테스트를 만드는 방법을 살펴봅니다.
