From 2a026e37d434a33762238df41bcc8854e17047e5 Mon Sep 17 00:00:00 2001 From: VARUN KUKRETI <78615537+implosion07@users.noreply.github.com> Date: Fri, 4 Feb 2022 12:25:12 +0530 Subject: [PATCH] A simple tic tac toe game using python --- TicTacToe.py | 186 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 TicTacToe.py diff --git a/TicTacToe.py b/TicTacToe.py new file mode 100644 index 00000000000..f1b61b80df9 --- /dev/null +++ b/TicTacToe.py @@ -0,0 +1,186 @@ +def print_tic_tac_toe(values): + print("\n") + print("\t | |") + print("\t {} | {} | {}".format(values[0], values[1], values[2])) + print('\t_____|_____|_____') + + print("\t | |") + print("\t {} | {} | {}".format(values[3], values[4], values[5])) + print('\t_____|_____|_____') + + print("\t | |") + + print("\t {} | {} | {}".format(values[6], values[7], values[8])) + print("\t | |") + print("\n") + + +# Function to print the score-board +def print_scoreboard(score_board): + print("\t--------------------------------") + print("\t SCOREBOARD ") + print("\t--------------------------------") + + players = list(score_board.keys()) + print("\t ", players[0], "\t ", score_board[players[0]]) + print("\t ", players[1], "\t ", score_board[players[1]]) + + print("\t--------------------------------\n") + +# Function to check if any player has won +def check_win(player_pos, cur_player): + + # All possible winning combinations + soln = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [1, 4, 7], [2, 5, 8], [3, 6, 9], [1, 5, 9], [3, 5, 7]] + + # Loop to check if any winning combination is satisfied + for x in soln: + if all(y in player_pos[cur_player] for y in x): + + # Return True if any winning combination satisfies + return True + # Return False if no combination is satisfied + return False + +# Function to check if the game is drawn +def check_draw(player_pos): + if len(player_pos['X']) + len(player_pos['O']) == 9: + return True + return False + +# Function for a single game of Tic Tac Toe +def single_game(cur_player): + + # Represents the Tic Tac Toe + values = [' ' for x in range(9)] + + # Stores the positions occupied by X and O + player_pos = {'X':[], 'O':[]} + + # Game Loop for a single game of Tic Tac Toe + while True: + print_tic_tac_toe(values) + + # Try exception block for MOVE input + try: + print("Player ", cur_player, " turn. Which box? : ", end="") + move = int(input()) + except ValueError: + print("Wrong Input!!! Try Again") + continue + + # Sanity check for MOVE inout + if move < 1 or move > 9: + print("Wrong Input!!! Try Again") + continue + + # Check if the box is not occupied already + if values[move-1] != ' ': + print("Place already filled. Try again!!") + continue + + # Update game information + + # Updating grid status + values[move-1] = cur_player + + # Updating player positions + player_pos[cur_player].append(move) + + # Function call for checking win + if check_win(player_pos, cur_player): + print_tic_tac_toe(values) + print("Player ", cur_player, " has won the game!!") + print("\n") + return cur_player + + # Function call for checking draw game + if check_draw(player_pos): + print_tic_tac_toe(values) + print("Game Drawn") + print("\n") + return 'D' + + # Switch player moves + if cur_player == 'X': + cur_player = 'O' + else: + cur_player = 'X' + +if __name__ == "__main__": + + print("Player 1") + player1 = input("Enter the name : ") + print("\n") + + print("Player 2") + player2 = input("Enter the name : ") + print("\n") + + # Stores the player who chooses X and O + cur_player = player1 + + # Stores the choice of players + player_choice = {'X' : "", 'O' : ""} + + # Stores the options + options = ['X', 'O'] + + # Stores the scoreboard + score_board = {player1: 0, player2: 0} + print_scoreboard(score_board) + + # Game Loop for a series of Tic Tac Toe + # The loop runs until the players quit + while True: + + # Player choice Menu + print("Turn to choose for", cur_player) + print("Enter 1 for X") + print("Enter 2 for O") + print("Enter 3 to Quit") + + # Try exception for CHOICE input + try: + choice = int(input()) + except ValueError: + print("Wrong Input!!! Try Again\n") + continue + + # Conditions for player choice + if choice == 1: + player_choice['X'] = cur_player + if cur_player == player1: + player_choice['O'] = player2 + else: + player_choice['O'] = player1 + + elif choice == 2: + player_choice['O'] = cur_player + if cur_player == player1: + player_choice['X'] = player2 + else: + player_choice['X'] = player1 + + elif choice == 3: + print("Final Scores") + print_scoreboard(score_board) + break + + else: + print("Wrong Choice!!!! Try Again\n") + + # Stores the winner in a single game of Tic Tac Toe + winner = single_game(options[choice-1]) + + # Edits the scoreboard according to the winner + if winner != 'D' : + player_won = player_choice[winner] + score_board[player_won] = score_board[player_won] + 1 + + print_scoreboard(score_board) + # Switch player who chooses X or O + if cur_player == player1: + cur_player = player2 + else: + cur_player = player1