Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Create tic tac toe game in python #7

Merged
merged 1 commit into from
Oct 7, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
124 changes: 124 additions & 0 deletions tic-tac-toe.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
import random


class TicTacToe:

def __init__(self):
self.board = []

def create_board(self):
for i in range(3):
row = []
for j in range(3):
row.append('-')
self.board.append(row)

def get_random_first_player(self):
return random.randint(0, 1)

def fix_spot(self, row, col, player):
self.board[row][col] = player

def is_player_win(self, player):
win = None

n = len(self.board)

# checking rows
for i in range(n):
win = True
for j in range(n):
if self.board[i][j] != player:
win = False
break
if win:
return win

# checking columns
for i in range(n):
win = True
for j in range(n):
if self.board[j][i] != player:
win = False
break
if win:
return win

# checking diagonals
win = True
for i in range(n):
if self.board[i][i] != player:
win = False
break
if win:
return win

win = True
for i in range(n):
if self.board[i][n - 1 - i] != player:
win = False
break
if win:
return win
return False

for row in self.board:
for item in row:
if item == '-':
return False
return True

def is_board_filled(self):
for row in self.board:
for item in row:
if item == '-':
return False
return True

def swap_player_turn(self, player):
return 'X' if player == 'O' else 'O'

def show_board(self):
for row in self.board:
for item in row:
print(item, end=" ")
print()

def start(self):
self.create_board()

player = 'X' if self.get_random_first_player() == 1 else 'O'
while True:
print(f"Player {player} turn")

self.show_board()

# taking user input
row, col = list(
map(int, input("Enter row and column numbers to fix spot: ").split()))
print()

# fixing the spot
self.fix_spot(row - 1, col - 1, player)

# checking whether current player is won or not
if self.is_player_win(player):
print(f"Player {player} wins the game!")
break

# checking whether the game is draw or not
if self.is_board_filled():
print("Match Draw!")
break

# swapping the turn
player = self.swap_player_turn(player)

# showing the final view of board
print()
self.show_board()


# starting the game
tic_tac_toe = TicTacToe()
tic_tac_toe.start()