Created
February 28, 2019 19:39
-
-
Save linjujose/2dd311faa5b71a0877c4627c3451a24e to your computer and use it in GitHub Desktop.
This file contains 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
class tic_tac_toe: | |
def __init__(self): | |
self.arr = [[0,0,0], | |
[0,0,0], | |
[0,0,0]] | |
self.player = True | |
def print_board(self): | |
for i in range(3): | |
print(self.arr[i]) | |
print("-------------") | |
return | |
def move(self,row,col,player): | |
if (self.arr[row][col] != 0): | |
print("Invalid move") | |
return | |
#update board, change turn and print board after every turn | |
self.arr[row][col] = player | |
self.player = not self.player | |
self.print_board() | |
def check_stalemate(self): | |
count = 0 | |
for i in range(3): | |
for j in range(3): | |
if (self.arr[i][j] == 0): | |
return False | |
return True | |
def check_winner(self, player): | |
if(self.diagonal_check(player) or self.vertical_check(player) or self.horizontal_check(player)): | |
print(f"Player {player} wins!") | |
return True | |
return False | |
# horizontal | |
def horizontal_check(self, player): | |
for i in range(3): | |
win = True | |
for j in range(3): | |
if (self.arr[i][j] != player): | |
win = False | |
# if winner is true in any row, return | |
if(win): | |
return win | |
return win | |
# vertical | |
def vertical_check(self, player): | |
for i in range(3): | |
win = True | |
for j in range(3): | |
if( self.arr[j][i] != player): | |
win = False | |
if(win): | |
return win | |
return win | |
# diagonal | |
def diagonal_check(self, player): | |
right_win = True | |
left_win = True | |
for i in range(3): | |
if (self.arr[i][i] != player): | |
right_win = False | |
if (self.arr[i][2-i] != player): | |
left_win = False | |
if (left_win or right_win): | |
return True | |
else: | |
return False | |
def play_game(self): | |
self.print_board() | |
player1 = 1 # True | |
player2 = 2 # False | |
winner = False | |
while(not winner): | |
if(self.check_stalemate()): | |
print("Stalemate, Game Over") | |
exit(0) | |
x,comma,y = input("Enter position as x,y: ") | |
# After move, turn has been taken but if condition is already checked | |
if(self.player): | |
self.move(int(x),int(y), player1) | |
winner = self.check_winner(player1) | |
else: | |
self.move(int(x),int(y), player2) | |
winner = self.check_winner(player2) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment