Skip to content

Instantly share code, notes, and snippets.

@devpruthvi
Last active March 10, 2016 17:00
Show Gist options
  • Select an option

  • Save devpruthvi/d4e36a981cef78710b0b to your computer and use it in GitHub Desktop.

Select an option

Save devpruthvi/d4e36a981cef78710b0b to your computer and use it in GitHub Desktop.
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