Files
basic-computer-games/89_Tic-Tac-Toe/python/TicTacToe_exe/process.py
Chander Jindal 40557ce86b Classic TicTacToe just in Executable format
First, pick either 'X' or 'O' from the screen then, play the normal one Player TicTacToe.
Playing on Terminal is kinda boring so, I made it into an executable file.
2022-03-12 22:26:23 +05:30

167 lines
6.0 KiB
Python

class TicTacToe:
def __init__(self,pick,sz=3):
self.pick = pick
self.dim_sz = sz
self.board = self.ClearBoard()
def ClearBoard(self):
board = [['blur' for i in range(self.dim_sz)] for j in range(self.dim_sz)]
# made a 3x3 by-default board
return board
def MoveRecord(self,r,c):
if r > self.dim_sz or c > self.dim_sz:
return "Out of Bounds"
if self.board[r][c] != 'blur':
return "Spot Pre-Occupied"
self.board[r][c] = self.pick
return True
def CheckWin(self):# 1 you won, 0 computer won, -1 tie
#Flag syntax -> first player no. , User is Player#1 ; Check set 1 -> row and '\' diagonal & Check set 2 -> col and '/' diagonal
for i in range(0,self.dim_sz):#Rows
flag11 = True
flag21 = True
flag12 = True
flag22 = True
for j in range(0,self.dim_sz):
ch2 = self.board[i][j]
ch1 = self.board[j][i]
#Row
if ch1 == self.pick:# if it's mine, computer didn't make it
flag21 = False
elif ch1 == 'blur':#if it's blank no one made it
flag11 = False
flag21 = False
else: flag11 = False# else i didn't make it
if ch2 == self.pick:#Same but for Col
flag22 = False
elif ch2 == 'blur':
flag12 = False
flag22 = False
else: flag12 = False
if flag11 is True or flag12 is True:# I won
return 1
if flag21 is True or flag22 is True:#Computer Won
return 0
#Diagonals#
flag11 = True
flag21 = True
flag12 = True
flag22 = True
for i in range(0,self.dim_sz):
ch2 = self.board[i][i]
ch1 = self.board[i][self.dim_sz-1-i]
if ch1 == self.pick:
flag21 = False
elif ch1 == 'blur':
flag11 = False
flag21 = False
else:flag11 = False
if ch2 == self.pick:
flag22 = False
elif ch2 == 'blur':
flag12 = False
flag22 = False
else:flag12 = False
if flag11 or flag12:
return 1
if flag21 or flag22:
return 0
return -1
def NextMove(self):
AvailableMoves = []# will carry all available moves
PlayerWinSpot = []#if player (user Wins)
CompPick = 'O'
if self.pick == 'O':
CompPick = 'X'
for i in range(0,self.dim_sz):
for j in range(0,self.dim_sz):
if self.board[i][j] == 'blur':#BLANK
t = (i,j)
AvailableMoves.append(t)#add it to available moves
self.board[i][j] = CompPick#Check if I (Computer can win)
if self.CheckWin() ==0:#Best Case I(Computer) win!
return i,j;
self.board[i][j] = self.pick
if self.CheckWin() == 1: #Second Best Case, he (player) didn't won
PlayerWinSpot.append(t)
self.board[i][j] = 'blur'
if len(PlayerWinSpot) != 0:
self.board[PlayerWinSpot[0][0]] [PlayerWinSpot[0][1]] = CompPick
return PlayerWinSpot[0][0],PlayerWinSpot[0][1]
print(AvailableMoves)
if len(AvailableMoves) == 1:
self.board[ AvailableMoves[0][0] ][ AvailableMoves[0][1] ] = CompPick
return [ AvailableMoves[0][0] ],[ AvailableMoves[0][1] ]
if len(AvailableMoves) == 0:
return -1,-1
c1 , c2 = self.dim_sz//2,self.dim_sz//2
print(c1,c2,self.dim_sz)
if (c1,c2) in AvailableMoves:#CENTER
self.board[c1][c2] = CompPick
return c1,c2
for i in range(c1-1,-1,-1):#IN TO OUT
gap = c1 - i
#checking - 4 possibilities at max
#EDGES
if (c1-gap,c2-gap) in AvailableMoves:
self.board[c1-gap][c2-gap] = CompPick
return c1-gap,c2-gap
if (c1-gap,c2+gap) in AvailableMoves:
self.board[c1-gap][c2+gap] = CompPick
return c1-gap,c2+gap
if (c1+gap,c2-gap) in AvailableMoves:
self.board[c1+gap][c2-gap] = CompPick
return c1+gap,c2-gap
if (c1+gap,c2+gap) in AvailableMoves:
self.board[c1+gap][c2+gap] = CompPick
return c1+gap,c2+gap
#Four Lines
for i in range(0,gap):
if (c1-gap,c2-gap+i) in AvailableMoves:#TOP LEFT TO TOP RIGHT
self.board[c1-gap][c2-gap+i] = CompPick
return c1-gap,c2-gap+i
if (c1+gap,c2-gap+i) in AvailableMoves:#BOTTOM LEFT TO BOTTOM RIGHT
self.board[c1+gap][c2-gap+i] = CompPick
return c1+gap,c2-gap+i
if (c1-gap,c2-gap) in AvailableMoves:#LEFT TOP TO LEFT BOTTOM
self.board[c1-gap+i][c2-gap] = CompPick
return c1-gap+i,c2-gap
if (c1-gap+i,c2+gap) in AvailableMoves:#RIGHT TOP TO RIGHT BOTTOM
self.board[c1-gap+i][c2+gap] = CompPick
return c1-gap+i,c2+gap
if __name__ == "__main__":
Game = TicTacToe("X")
for i in range(0,10):
print(Game.board)
move = list(map(int,input().split()) )
print(Game.MoveRecord(move[0],move[1]))
print(Game.CheckWin())
t = Game.NextMove()
print("(",t[0],", ",t[1],")")
print(Game.CheckWin())