From 7ae1a306dfeba527a585d9c4e70bbea23bd56bb7 Mon Sep 17 00:00:00 2001 From: InderMangal <80519267+InderMangal@users.noreply.github.com> Date: Fri, 22 Oct 2021 19:17:11 +0530 Subject: [PATCH] Tic-Tac-Toe --- Tic-Tac-Toe_game.py | 203 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 Tic-Tac-Toe_game.py diff --git a/Tic-Tac-Toe_game.py b/Tic-Tac-Toe_game.py new file mode 100644 index 0000000..977b543 --- /dev/null +++ b/Tic-Tac-Toe_game.py @@ -0,0 +1,203 @@ +# --------- Global Variables ----------- + +# Will hold our game board data +board = ["-", "-", "-", + "-", "-", "-", + "-", "-", "-"] + +# Lets us know if the game is over yet +game_still_going = True + +# Tells us who the winner is +winner = None + +# Tells us who the current player is (X goes first) +current_player = "X" + + +# ------------- Functions --------------- + +# Play a game of tic tac toe +def play_game(): + + # Show the initial game board + display_board() + + # Loop until the game stops (winner or tie) + while game_still_going: + + # Handle a turn + handle_turn(current_player) + + # Check if the game is over + check_if_game_over() + + # Flip to the other player + flip_player() + + # Since the game is over, print the winner or tie + if winner == "X" or winner == "O": + print(winner + " won.") + elif winner == None: + print("Tie.") + + +# Display the game board to the screen +def display_board(): + print("\n") + print(board[0] + " | " + board[1] + " | " + board[2] + " 1 | 2 | 3") + print(board[3] + " | " + board[4] + " | " + board[5] + " 4 | 5 | 6") + print(board[6] + " | " + board[7] + " | " + board[8] + " 7 | 8 | 9") + print("\n") + + +# Handle a turn for an arbitrary player +def handle_turn(player): + + # Get position from player + print(player + "'s turn.") + position = input("Choose a position from 1-9: ") + + # Whatever the user inputs, make sure it is a valid input, and the spot is open + valid = False + while not valid: + + # Make sure the input is valid + while position not in ["1", "2", "3", "4", "5", "6", "7", "8", "9"]: + position = input("Choose a position from 1-9: ") + + # Get correct index in our board list + position = int(position) - 1 + + # Then also make sure the spot is available on the board + if board[position] == "-": + valid = True + else: + print("You can't go there. Go again.") + + # Put the game piece on the board + board[position] = player + + # Show the game board + display_board() + + +# Check if the game is over +def check_if_game_over(): + check_for_winner() + check_for_tie() + + +# Check to see if somebody has won +def check_for_winner(): + # Set global variables + global winner + # Check if there was a winner anywhere + row_winner = check_rows() + column_winner = check_columns() + diagonal_winner = check_diagonals() + # Get the winner + if row_winner: + winner = row_winner + elif column_winner: + winner = column_winner + elif diagonal_winner: + winner = diagonal_winner + else: + winner = None + + +# Check the rows for a win +def check_rows(): + # Set global variables + global game_still_going + # Check if any of the rows have all the same value (and is not empty) + row_1 = board[0] == board[1] == board[2] != "-" + row_2 = board[3] == board[4] == board[5] != "-" + row_3 = board[6] == board[7] == board[8] != "-" + # If any row does have a match, flag that there is a win + if row_1 or row_2 or row_3: + game_still_going = False + # Return the winner + if row_1: + return board[0] + elif row_2: + return board[3] + elif row_3: + return board[6] + # Or return None if there was no winner + else: + return None + + +# Check the columns for a win +def check_columns(): + # Set global variables + global game_still_going + # Check if any of the columns have all the same value (and is not empty) + column_1 = board[0] == board[3] == board[6] != "-" + column_2 = board[1] == board[4] == board[7] != "-" + column_3 = board[2] == board[5] == board[8] != "-" + # If any row does have a match, flag that there is a win + if column_1 or column_2 or column_3: + game_still_going = False + # Return the winner + if column_1: + return board[0] + elif column_2: + return board[1] + elif column_3: + return board[2] + # Or return None if there was no winner + else: + return None + + +# Check the diagonals for a win +def check_diagonals(): + # Set global variables + global game_still_going + # Check if any of the columns have all the same value (and is not empty) + diagonal_1 = board[0] == board[4] == board[8] != "-" + diagonal_2 = board[2] == board[4] == board[6] != "-" + # If any row does have a match, flag that there is a win + if diagonal_1 or diagonal_2: + game_still_going = False + # Return the winner + if diagonal_1: + return board[0] + elif diagonal_2: + return board[2] + # Or return None if there was no winner + else: + return None + + +# Check if there is a tie +def check_for_tie(): + # Set global variables + global game_still_going + # If board is full + if "-" not in board: + game_still_going = False + return True + # Else there is no tie + else: + return False + + +# Flip the current player from X to O, or O to X +def flip_player(): + # Global variables we need + global current_player + # If the current player was X, make it O + if current_player == "X": + current_player = "O" + # Or if the current player was O, make it X + elif current_player == "O": + current_player = "X" + + +# ------------ Start Execution ------------- +# Play a game of tic tac toe +play_game()