Last active
August 1, 2019 11:48
-
-
Save Himan10/9907d28792e88b50ecf0c33977f31eff to your computer and use it in GitHub Desktop.
TIC TAC TOE - Making a game TIE
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| """ Playing Tic Tac Toe with Computer """ | |
| import random | |
| BOARD_VALUE = {} | |
| for number in range(1, 10): | |
| BOARD_VALUE[number] = " " | |
| COMP_MOVES = BOARD_VALUE.keys() | |
| COMP_MOVES = list(COMP_MOVES) | |
| def corner_center_side(): | |
| """ Making a Move """ | |
| turn = " x " | |
| corner = [1, 3, 7, 9] | |
| #side = [2, 4, 6, 8] | |
| # Strategies for make a winning move | |
| if all(BOARD_VALUE[i] == " " for i in corner): | |
| return random.choice(corner) | |
| if BOARD_VALUE[5] == " ": | |
| return 5 | |
| if BOARD_VALUE[9] == " ": # for 9th move | |
| if ( | |
| BOARD_VALUE[1] == turn and BOARD_VALUE[5] == turn or | |
| BOARD_VALUE[3] == turn and BOARD_VALUE[6] == turn or | |
| BOARD_VALUE[7] == turn and BOARD_VALUE[8] == turn | |
| ): | |
| return 9 | |
| if BOARD_VALUE[8] == " ": # for 8th move | |
| if ( | |
| BOARD_VALUE[7] == turn and BOARD_VALUE[9] == turn or | |
| BOARD_VALUE[2] == turn and BOARD_VALUE[5] == turn | |
| ): | |
| return 8 | |
| if BOARD_VALUE[7] == " ": # for 7th move | |
| if ( | |
| BOARD_VALUE[1] == turn and BOARD_VALUE[4] == turn or | |
| BOARD_VALUE[3] == turn and BOARD_VALUE[5] == turn or | |
| BOARD_VALUE[8] == turn and BOARD_VALUE[9] == turn | |
| ): | |
| return 7 | |
| if BOARD_VALUE[6] == " ": # for 6th move | |
| if ( | |
| BOARD_VALUE[3] == turn and BOARD_VALUE[9] == turn or | |
| BOARD_VALUE[4] == turn and BOARD_VALUE[5] == turn | |
| ): | |
| return 6 | |
| if BOARD_VALUE[5] == " ": # for 5th move | |
| if ( | |
| BOARD_VALUE[1] == turn and BOARD_VALUE[9] == turn or | |
| BOARD_VALUE[2] == turn and BOARD_VALUE[8] == turn or | |
| BOARD_VALUE[3] == turn and BOARD_VALUE[7] == turn or | |
| BOARD_VALUE[4] == turn and BOARD_VALUE[6] == turn | |
| ): | |
| return 5 | |
| if BOARD_VALUE[4] == " ": # for 4th move | |
| if ( | |
| BOARD_VALUE[1] == turn and BOARD_VALUE[7] == turn or | |
| BOARD_VALUE[5] == turn and BOARD_VALUE[6] == turn | |
| ): | |
| return 4 | |
| if BOARD_VALUE[3] == " ": # for 3rd move | |
| if ( | |
| BOARD_VALUE[1] == turn and BOARD_VALUE[2] == turn or | |
| BOARD_VALUE[6] == turn and BOARD_VALUE[9] == turn or | |
| BOARD_VALUE[5] == turn and BOARD_VALUE[7] == turn | |
| ): | |
| return 3 | |
| if BOARD_VALUE[2] == " ": # for 2nd move | |
| if ( | |
| BOARD_VALUE[5] == turn and BOARD_VALUE[8] == turn or | |
| BOARD_VALUE[1] == turn and BOARD_VALUE[3] == turn | |
| ): | |
| return 2 | |
| if BOARD_VALUE[1] == " ": # for 1st move | |
| if ( | |
| BOARD_VALUE[2] == turn and BOARD_VALUE[3] == turn or | |
| BOARD_VALUE[4] == turn and BOARD_VALUE[7] == turn or | |
| BOARD_VALUE[5] == turn and BOARD_VALUE[9] == turn | |
| ): | |
| return 1 | |
| return random.choice(COMP_MOVES) | |
| def computer_play(turn): | |
| """ Computer move on the board """ | |
| comp_val = corner_center_side() | |
| print(" Computer value : ", comp_val) | |
| BOARD_VALUE[comp_val] = turn | |
| del COMP_MOVES[COMP_MOVES.index(comp_val)] | |
| def user_play(turn): | |
| """ User move on the board """ | |
| user_val = int(input(" Make your Move : ")) | |
| BOARD_VALUE[user_val] = turn | |
| del COMP_MOVES[COMP_MOVES.index(user_val)] | |
| def print_board(): | |
| """ Printing the Board """ | |
| print(" _____ _____ _____") | |
| print("| | | |") | |
| print(f"|{BOARD_VALUE[1]}|{BOARD_VALUE[2]}|{BOARD_VALUE[3]}|") | |
| print("| | | |") | |
| print(" -----+-----+-----") | |
| print("| | | |") | |
| print(f"|{BOARD_VALUE[4]}|{BOARD_VALUE[5]}|{BOARD_VALUE[6]}|") | |
| print("| | | |") | |
| print(" -----+-----+-----") | |
| print("| | | |") | |
| print(f"|{BOARD_VALUE[7]}|{BOARD_VALUE[8]}|{BOARD_VALUE[9]}|") | |
| print("|_____|_____|_____|") | |
| def winner(turn): | |
| """ Win the Game """ | |
| return ((BOARD_VALUE[1] == turn and BOARD_VALUE[2] == turn and BOARD_VALUE[3] == turn) or | |
| (BOARD_VALUE[4] == turn and BOARD_VALUE[5] == turn and BOARD_VALUE[6] == turn) or | |
| (BOARD_VALUE[7] == turn and BOARD_VALUE[8] == turn and BOARD_VALUE[9] == turn) or | |
| (BOARD_VALUE[1] == turn and BOARD_VALUE[4] == turn and BOARD_VALUE[7] == turn) or | |
| (BOARD_VALUE[2] == turn and BOARD_VALUE[5] == turn and BOARD_VALUE[8] == turn) or | |
| (BOARD_VALUE[3] == turn and BOARD_VALUE[6] == turn and BOARD_VALUE[9] == turn) or | |
| (BOARD_VALUE[1] == turn and BOARD_VALUE[5] == turn and BOARD_VALUE[9] == turn) or | |
| (BOARD_VALUE[3] == turn and BOARD_VALUE[5] == turn and BOARD_VALUE[7] == turn)) | |
| def main(): | |
| """ Main function """ | |
| comp_turn = " o " | |
| chance = random.randint(0, 1) # 0 for user and 1 for computer | |
| try: | |
| user_turn = " " + str(input(" 'x' or 'o' : ")) + " " | |
| if user_turn == " o ": | |
| comp_turn = " x " | |
| for i in range(chance, chance + 9): # chance == 0 then we've 0-9 | |
| # and chance == 1 then we've 1-10 | |
| if i % 2 != 0: | |
| user_play(user_turn) | |
| win = winner(user_turn) | |
| else: | |
| computer_play(comp_turn) | |
| win = winner(comp_turn) | |
| print_board() | |
| if win: | |
| print(" WINNNEEEERRRRR ") | |
| break | |
| except (IndexError, ValueError) as err: | |
| print(err) | |
| main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment