Tic Tac Toe ( Python Project )

Tic-Tac-Toe is among the games played between two players played on a 3 x 3 square grid. Each player inhabits a cell in their respective turns, keeping the objective of placing three similar marks in a vertical, horizontal, or diagonal pattern. The first player utilizes the Cross (X) as the marker, whereas the other utilizes the Naught or Zero (O).
Tic-tac-toe python project is a noughts and crosses or Xs and Os paper-and-pencil game for two players. Two players representing X and O respectively will take turns marking the spaces in a 3×3 grid. The player who succeeds in placing three of their marks in a diagonal, horizontal, or vertical row is the winner. It is a solved game with a forced draw assuming best play from both players. The aim of this project is to implement the Tic-tac-toe game application using Python. The game logic can be built using core python, and Tkinter will be used to develop the application’s Graphical User Interface (GUI).
Project File Structure
Steps to follow to built Tic Tac Toe Game:
1. Install Pygame
2. Importing Modules
3. Defining Variables and colors
4. Initializing Pygame window
5. Defining functions to create tic tac toe board
6. Function for marking the square and checking the available square
7. Functions for checking for win
8. Rest Code
1. Install Pygame:
Pygame is a set of python modules that are designed for writing video games. You need to install pygame to start developing the project. Write the command given below to install pygame.
Pip install pygame
2. Importing Modules for TIC TAC TOE Python Project:
import numpy as np
import pygame
import math
import sys
Code Explanation:
a. Numpy: It is the fundamental package used for scientific computing in python.
b. math:This module helps in performing mathematical operations on numbers.
c. sys: It provides information about functions, methods and constants of the python interpreter.
3. Defining Variables and colors:
Rows = 3
Columns = 3
sizeofsquare = 200
radiusofcircle = 60
offset = 55
circlelinewidth= 15
xlinewidth = 25
widthofscreen = Columns * sizeofsquare
heightofscreen = Rows * sizeofsquare
colorofline = (0,0,0)
backgroundcolour = (255,255,0)
colorofcircle= (255,105,180)
xcolor = (255,0,0)
player = 0
gameover = False
inmenu = True
Code Explanation:
a. Rows: It is a variable that defines the number of rows.
b. Columns:It is a variable that defines the number of columns.
c. sizeofsquare: This variable contains the size of the tic tac toe game window.
d. radiusofcircle: This variable contains the size of O.
e. circlelinewidth: This variable contains the width of the circle.
f. xlinewidth: This variable contains the width of X.
g. backgroundcolor: This variable stores the background colour.
h. colorofcircle: This variable stores the colour of O.
i. xcolor:This variable stores the colour of X
4. Initializing Pygame window:
Board = np.zeros((Rows,Columns))
pygame.init()
pygame.display.set_caption("TIC TAC TOE GAME by PythonGeeks")
Screen = pygame.display.set_mode((widthofscreen, heightofscreen))
Screen.fill(backgroundcolour)
drawlines()
pygame.display.update()
Code Explanation:
a. set_caption: This method sets the title of the pygame window.
b. fill(): This method fills the pygame window with the colour that is passed in fill().
c. set_mode(): It closes the previous display.
d. drawlines(): It is a function that draws lines.
5. Defining functions to create tic tac toe board:
def printingboard():
flippedboard = np.flip(Board, 0)
print(flippedboard)
print("")
def drawboard():
drawlines()
drawfigures()
def drawlines():
pygame.draw.line(Screen, colorofline, (0, 200), (600, 200), 10)
pygame.draw.line(Screen, colorofline, (0, 400), (600, 400), 10)
pygame.draw.line(Screen, colorofline, (200, 0), (200, 600), 10)
pygame.draw.line(Screen, colorofline, (400, 0), (400, 600), 10)
def drawfigures():
for col in range(Columns):
for row in range(Rows):
if Board[row][col] == 1:
pygame.draw.circle(Screen, colorofcircle, (int(col * sizeofsquare + sizeofsquare / 2), int(row * sizeofsquare + sizeofsquare / 2)), radiusofcircle, circlelinewidth)
elif Board[row][col] == 2:
pygame.draw.line(Screen, xcolor, (col * sizeofsquare + offset, row * sizeofsquare + offset), (col * sizeofsquare + sizeofsquare - offset, row *sizeofsquare + sizeofsquare - offset), xlinewidth)
pygame.draw.line(Screen, xcolor, (col * sizeofsquare + offset, row * sizeofsquare + sizeofsquare - offset), (col * sizeofsquare + sizeofsquare - offset, row * sizeofsquare + offset), xlinewidth)
def fullboard():
for col in range(Columns):
for row in range(Rows):
if Board[row][col] == 0:
return False
return True
Code Explanation:
a. printingboard(): This function prints the board on the screen.
b. flip(): It reverses the order of the array.
c. drawboard(): It helps in drawing the board.
d. drawline(): This function draws the line that divides the board into a 3×3 matrix.
e. drawfigures():This function helps in drawing various figures like O,X and line .
6. Function for marking the square and checking the available square:
def availablesquare(row, col):
is_available = Board[row][col] == 0
return is_available
def marksquare(row, col, player):
Board[row][col] = player
Code Explanation:
a. availablesquare():This function checks the available square in the tic tac toe board.
b. marksquare():This function marks the square on the tic tac toe board.
7. Functions for checking for win:
def win(player):
verwin = verticalwin(player)
horwin = horizontalwin(player)
diagwin = diagonalwin(player)
if verwin or horwin or diagwin:
return True
else:
return False
def verticalwin(player):
for col in range(Columns):
if Board[0][col] == player and Board[1][col] == player and Board[2][col] == player:
drawverticalline(col, player)
return True
return False
def horizontalwin(player):
for row in range(Rows):
if Board[row][0] == player and Board[row][1] == player and Board[row][2] == player:
drawhorizontalline(row, player)
return True
return False
def diagonalwin(player):
if Board[0][0] == player and Board[1][1] == player and Board[2][2] == player:
drawdiagonalline(player)
return True
elif Board[2][0] == player and Board[1][1] == player and Board[0][2] == player:
drawdiagonalline(player, False)
return True
else:
return False
def drawverticalline(col, player):
posX = col * sizeofsquare + sizeofsquare / 2
if player == 1:
pygame.draw.line(Screen, colorofcircle, (posX, 10), (posX, heightofscreen - 10), circlelinewidth)
else:
pygame.draw.line(Screen,xcolor, (posX, 10), (posX, heightofscreen - 10), circlelinewidth)
def drawhorizontalline(row, player):
posY = row * sizeofsquare + sizeofsquare/ 2
if player == 1:
pygame.draw.line(Screen, colorofcircle, (10, posY), (widthofscreen - 10, posY), circlelinewidth)
else:
pygame.draw.line(Screen, xcolor, (10, posY), (widthofscreen - 10, posY), circlelinewidth)
def drawdiagonalline(player, down_diag=True):
if down_diag:
if player == 1:
pygame.draw.line(Screen, colorofcircle, (25, 25), (widthofscreen - 25, heightofscreen - 25), xlinewidth)
else:
pygame.draw.line(Screen, colorofcircle, (25, 25), (widthofscreen - 25, heightofscreen - 25), xlinewidth)
else:
if player == 1:
pygame.draw.line(Screen, colorofcircle, (25, heightofscreen - 25), (widthofscreen - 25, 25), xlinewidth)
else:
pygame.draw.line(Screen, xcolor, (25, heightofscreen - 25), (widthofscreen - 25, 25), xlinewidth)
Code Explanation:
a. win(): This function checks the win of the player.
b. verticalwin(): This function checks the vertical win of the player.
c. horizontalwin():This function checks the horizontal win of the player.
d. diagonalwin():This function checks the diagonal win of the player.
e. drawhorizontalline(): It draws a horizontal line if all the three symbols are the same horizontally.
f. drawverticalline():It draws a vertical line if all the three symbols are the same vertically.
g. drawdiagonalline():It draws a line diagonally if all the three symbols are the same diagonally.
8. Rest Code:
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN and not gameover:
positiony = event.pos[1]
row = int(math.floor(positiony / sizeofsquare))
positionx = event.pos[0]
col = int(math.floor(positionx / sizeofsquare))
if player % 2 == 0:
if availablesquare(row, col):
marksquare(row, col, 1)
if win(1):
gameover = True
player += 1
else:
if availablesquare(row, col):
marksquare(row, col, 2)
if win(2):
gameover = True
player += 1
if fullboard():
gameover = True
drawfigures()
pygame.display.update()
Code Explanation:
a. exit(): It helps to exit the game.
b. update(): It displays surface objects on the monitor.
c. MOUSEBUTTONDOWN: It gets the current state of the mouse device.
d. floor: It returns the floor value of a number.
CODE :
Pip install pygame
import numpy as np
import pygame
import math
import sys
Rows = 3
Columns = 3
sizeofsquare = 200
radiusofcircle = 60
offset = 55
circlelinewidth= 15
xlinewidth = 25
widthofscreen = Columns * sizeofsquare
heightofscreen = Rows * sizeofsquare
colorofline = (0,0,0)
backgroundcolour = (255,255,0)
colorofcircle= (255,105,180)
xcolor = (255,0,0)
player = 0
gameover = False
inmenu = True
Board = np.zeros((Rows,Columns))
pygame.init()
pygame.display.set_caption("TIC TAC TOE GAME by PythonGeeks")
Screen = pygame.display.set_mode((widthofscreen, heightofscreen))
Screen.fill(backgroundcolour)
drawlines()
pygame.display.update()
def printingboard():
flippedboard = np.flip(Board, 0)
print(flippedboard)
print("")
def drawboard():
drawlines()
drawfigures()
def drawlines():
pygame.draw.line(Screen, colorofline, (0, 200), (600, 200), 10)
pygame.draw.line(Screen, colorofline, (0, 400), (600, 400), 10)
pygame.draw.line(Screen, colorofline, (200, 0), (200, 600), 10)
pygame.draw.line(Screen, colorofline, (400, 0), (400, 600), 10)
def drawfigures():
for col in range(Columns):
for row in range(Rows):
if Board[row][col] == 1:
pygame.draw.circle(Screen, colorofcircle, (int(col * sizeofsquare + sizeofsquare / 2), int(row * sizeofsquare + sizeofsquare / 2)), radiusofcircle, circlelinewidth)
elif Board[row][col] == 2:
pygame.draw.line(Screen, xcolor, (col * sizeofsquare + offset, row * sizeofsquare + offset), (col * sizeofsquare + sizeofsquare - offset, row *sizeofsquare + sizeofsquare - offset), xlinewidth)
pygame.draw.line(Screen, xcolor, (col * sizeofsquare + offset, row * sizeofsquare + sizeofsquare - offset), (col * sizeofsquare + sizeofsquare - offset, row * sizeofsquare + offset), xlinewidth)
def fullboard():
for col in range(Columns):
for row in range(Rows):
if Board[row][col] == 0:
return False
return True
def availablesquare(row, col):
is_available = Board[row][col] == 0
return is_available
def marksquare(row, col, player):
Board[row][col] = player
def win(player):
verwin = verticalwin(player)
horwin = horizontalwin(player)
diagwin = diagonalwin(player)
if verwin or horwin or diagwin:
return True
else:
return False
def verticalwin(player):
for col in range(Columns):
if Board[0][col] == player and Board[1][col] == player and Board[2][col] == player:
drawverticalline(col, player)
return True
return False
def horizontalwin(player):
for row in range(Rows):
if Board[row][0] == player and Board[row][1] == player and Board[row][2] == player:
drawhorizontalline(row, player)
return True
return False
def diagonalwin(player):
if Board[0][0] == player and Board[1][1] == player and Board[2][2] == player:
drawdiagonalline(player)
return True
elif Board[2][0] == player and Board[1][1] == player and Board[0][2] == player:
drawdiagonalline(player, False)
return True
else:
return False
def drawverticalline(col, player):
posX = col * sizeofsquare + sizeofsquare / 2
if player == 1:
pygame.draw.line(Screen, colorofcircle, (posX, 10), (posX, heightofscreen - 10), circlelinewidth)
else:
pygame.draw.line(Screen,xcolor, (posX, 10), (posX, heightofscreen - 10), circlelinewidth)
def drawhorizontalline(row, player):
posY = row * sizeofsquare + sizeofsquare/ 2
if player == 1:
pygame.draw.line(Screen, colorofcircle, (10, posY), (widthofscreen - 10, posY), circlelinewidth)
else:
pygame.draw.line(Screen, xcolor, (10, posY), (widthofscreen - 10, posY), circlelinewidth)
def drawdiagonalline(player, down_diag=True):
if down_diag:
if player == 1:
pygame.draw.line(Screen, colorofcircle, (25, 25), (widthofscreen - 25, heightofscreen - 25), xlinewidth)
else:
pygame.draw.line(Screen, colorofcircle, (25, 25), (widthofscreen - 25, heightofscreen - 25), xlinewidth)
else:
if player == 1:
pygame.draw.line(Screen, colorofcircle, (25, heightofscreen - 25), (widthofscreen - 25, 25), xlinewidth)
else:
pygame.draw.line(Screen, xcolor, (25, heightofscreen - 25), (widthofscreen - 25, 25), xlinewidth)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN and not gameover:
positiony = event.pos[1]
row = int(math.floor(positiony / sizeofsquare))
positionx = event.pos[0]
col = int(math.floor(positionx / sizeofsquare))
if player % 2 == 0:
if availablesquare(row, col):
marksquare(row, col, 1)
if win(1):
gameover = True
player += 1
else:
if availablesquare(row, col):
marksquare(row, col, 2)
if win(2):
gameover = True
player += 1
if fullboard():
gameover = True
drawfigures()
pygame.display.update()
0 Comments