Python으로 간단한 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를 반환합니다.
- 플레이어가 이겼는지 여부를 확인하는 함수를 작성하십시오.
- 이전 섹션에서 논의한 모든 가능성을 확인해야 합니다.
- 모든 행, 열 및 두 개의 대각선을 확인합니다.
- 사용자가 플레이하는 동안 여러 번 보드를 보여주므로 보드를 표시하는 함수를 작성하십시오.
- 게임을 시작하는 함수를 작성하십시오.
- 무작위로 플레이어의 첫 번째 턴을 선택합니다.
- 게임이 끝나면(승리 또는 무승부) 중단되는 무한 루프를 작성합니다.
- 다음 이동을 위한 지점을 선택하기 위해 사용자에게 보드를 보여줍니다.
- 사용자에게 행과 열 번호를 입력하도록 요청합니다.
- 해당 선수 사인으로 자리를 업데이트하십시오.
- 현재 플레이어가 게임에서 이겼는지 여부를 확인합니다.
- 현재 플레이어가 게임에서 이기면 승리 메시지를 인쇄하고 무한 루프를 끊습니다.
- 다음으로 보드가 채워졌는지 확인합니다.
- 보드가 가득 차면 그리기 메시지를 인쇄하고 무한 루프를 끊습니다.
- 마지막으로 사용자에게 보드의 최종 보기를 보여줍니다.
무슨 일이 일어나고 있는지 시각화할 수 있습니다. 완전히 이해하지 못하더라도 걱정하지 마십시오. 코드를 보면 더 명확해질 것입니다.
이제 코드 섹션으로 이동해 보겠습니다. 코드를 시도하기 위해 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 X X - O - - - - - Enter row and column numbers to fix spot: 1 3 Player X turn X X O O - - - - - Enter row and column numbers to fix spot: 2 2 Player O turn X X O O X - - - - Enter row and column numbers to fix spot: 3 3 Player X turn X X O O X - - - O Enter row and column numbers to fix spot: 3 2 Player X wins the game! X X O O X - - X O
코드의 구조를 이해하는 데 도움이 되는 몇 가지 주요 사항.
- 우리는 클래스를 사용하여 모든 메서드를 한 곳에서 사용했습니다. 다른 코드에서도 쉽게 재사용 가능한 번들이 될 수 있습니다.
- 다음으로, 작은 작업일지라도 각 책임에 대해 서로 다른 기능을 정의했습니다. 코드를 쉽게 유지하는 데 도움이 됩니다.
- 위의 두 가지 접근 방식은 게임을 업데이트하려는 경우 앱을 쉽게 업데이트하는 데 도움이 됩니다.
자유롭게 구조를 조정하고 프로젝트에 따라 개선하십시오. 코드를 구조화하는 것은 제한되지 않습니다.
마지막 단어
만세! 😎 당신은 완전히 처음부터 게임을 만들었습니다. 우리가 매일 하는 비주얼 게임 중 하나가 아닙니다. 그러나 논리를 작성하고 코드에서 깔끔한 구조를 유지하는 데 도움이 됩니다. 이와 같은 흥미로운 게임을 만들려면 유사한 지침을 따르십시오. 몇 년 어린 시절로 돌아가 보면 비슷한 게임을 찾을 수 있습니다.
행복한 코딩! 👩💻
다음으로 Python unittest 모듈을 사용하여 숫자 추측 게임 및 단위 테스트를 만드는 방법을 살펴봅니다.
기사를 재미있게 읽었습니까? 세상과 함께 나누는 건 어떨까요?