Last active
March 10, 2016 17:00
-
-
Save devpruthvi/d4e36a981cef78710b0b to your computer and use it in GitHub Desktop.
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
| import re,copy,random | |
| class TicTacToe: | |
| def __init__(self): | |
| self.magic_square = [8,1,6,3,5,7,4,9,2] | |
| self.player_marker = 'X' | |
| self.computer_marker = 'O' | |
| self.board = [' ']* 9 | |
| self.board_design = "| %s | | %s | | %s |\n| %s | | %s | | %s |\n| %s | | %s | | %s |" | |
| self.player_playing = "n" | |
| def print_board(self): | |
| self.boardValues = [x for x in tuple(self.board) if x != '0'] | |
| print(self.board_design) % tuple(self.board) | |
| def start_game(self): | |
| self.player_playing = raw_input("Are you making the first move (y/n) :") | |
| while self.player_playing not in ['y', 'n']: | |
| print('Please enter either "y" or "n"') | |
| self.player_playing = raw_input("Are you making the first move (y/n) :") | |
| print('Your moves are %ss' % self.player_marker) | |
| self.print_board() | |
| print("Welcome to the Tic Tac Toe Game") | |
| self.game_end = False | |
| while not self.game_end: | |
| if self.player_playing == "y": | |
| self.get_player_move() | |
| else: | |
| self.get_computer_move() | |
| self.print_board() | |
| ### Temp Code | |
| player_magic_matrix = [self.magic_square[x] if self.board[x] == 'X' else 0 for x in range(0,len(self.board))] | |
| computer_magic_matrix = [self.magic_square[x] if self.board[x] == 'O' else 0 for x in range(0,len(self.board))] | |
| print("Computer win: ", self.check_win_magic_matrix(computer_magic_matrix), " Player win: ", self.check_win_magic_matrix(player_magic_matrix), "win: ",self.check_if_won()) | |
| ###Temp Code | |
| if self.player_playing == "y" and self.check_if_won(): | |
| print("You won!") | |
| self.game_end = True | |
| elif self.player_playing == "n" and self.check_if_won(): | |
| print("Computer won!") | |
| self.game_end = True | |
| elif self.is_board_full(): | |
| print("Game Drawn!") | |
| self.game_end = True | |
| def is_board_full(self): | |
| if self.board.count(' ') == 0: | |
| return True | |
| else: | |
| return False | |
| def check_if_won(self): | |
| player_magic_matrix = [self.magic_square[x] if self.board[x] == 'X' else 0 for x in range(0,len(self.board))] | |
| computer_magic_matrix = [self.magic_square[x] if self.board[x] == 'O' else 0 for x in range(0,len(self.board))] | |
| if self.player_playing == "y": | |
| return self.check_win_magic_matrix(player_magic_matrix) | |
| else: | |
| return self.check_win_magic_matrix(computer_magic_matrix) | |
| def check_win_magic_matrix(self,matrix): | |
| vals = [sum(matrix[0:3]),sum(matrix[3:6]),sum(matrix[6:9]), | |
| sum([matrix[0],matrix[4],matrix[8]]) | |
| ,sum([matrix[2],matrix[4],matrix[6]]) | |
| ,sum([matrix[0],matrix[3],matrix[6]]) | |
| ,sum([matrix[1],matrix[4],matrix[7]]) | |
| ,sum([matrix[2],matrix[5],matrix[8]])] | |
| if 15 in vals: | |
| return True | |
| else: | |
| return False | |
| def get_computer_move(self): | |
| print("Computer made a move:") | |
| move_made = [False] | |
| for i in range(0,len(self.board)): | |
| board_copy = copy.deepcopy(self.board) | |
| if self.is_not_used(i): | |
| board_copy_magic_matrix = [self.magic_square[x] if board_copy[x] == 'O' else 0 for x in range(0,len(board_copy))] | |
| board_copy[i] = self.computer_marker | |
| if self.check_win_magic_matrix(board_copy_magic_matrix): | |
| print("Good Move") | |
| self.board[i] == self.computer_marker | |
| move_made[0] = True | |
| if not move_made[0]: | |
| print("Random Move") | |
| self.make_random_move() | |
| self.player_playing = "y" | |
| def make_random_move(self): | |
| free_spaces = [x for x in range(0,len(self.board)) if self.board[x] == ' '] | |
| random_free_space = random.choice(free_spaces) | |
| self.board[random_free_space] = self.computer_marker | |
| def is_not_used(self,index): | |
| return self.board[index] == ' ' | |
| def get_player_move(self): | |
| valid_player_move = False | |
| while not valid_player_move: | |
| player_move = raw_input("Enter your move [1-9]: ") | |
| if re.match('\d+', player_move): | |
| player_move_integer = int(player_move) | |
| if player_move_integer < 1 or player_move_integer > 9: | |
| print("Please enter a valid move") | |
| elif self.board[player_move_integer-1] != ' ': | |
| print("Please enter a valid move") | |
| else: | |
| self.board[player_move_integer-1] = self.player_marker | |
| valid_player_move = True | |
| else: | |
| print("Only integers [1-9] are allowed\nPlease enter a valid move") | |
| self.player_playing = "n" | |
| if __name__ == "__main__": | |
| Game = TicTacToe() | |
| Game.start_game() | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment