Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 08b09aa

Browse filesBrowse files
Merge pull request seeditsolution#308 from Fazalahmad44/patch-2
Tic-Tac-Toe
2 parents 75cdb34 + a5f809c commit 08b09aa
Copy full SHA for 08b09aa

File tree

Expand file treeCollapse file tree

1 file changed

+249
-0
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

1 file changed

+249
-0
lines changed
Open diff view settings
Collapse file

‎Tic-Tac-Toe‎

Copy file name to clipboard
+249Lines changed: 249 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,249 @@
1+
def Welcome():
2+
print(' *Welcome to tic-tac-toe game*')
3+
#dont take sleep more than 2 seconds then user will get bored
4+
sleep(1)
5+
print()
6+
print('Computer will decide who will play first')
7+
print()
8+
#for Hint Feature In Computer AI i have passed Player letter instead of computer letter
9+
print('If you need Hint in the middle of game \npress any of this [Hint,hint,H,h]')
10+
sleep(1)
11+
print()
12+
print(''' *** Format of Game **
13+
| | 1 | 2 | 3
14+
- - - - - - - - - - - -
15+
| | 4 | 5 | 6
16+
- - - - - - - - - - - -
17+
| | 7 | 8 | 9
18+
''')
19+
20+
21+
#Fuction to draw Board
22+
#you can modify this sleep method if you dont need it
23+
def DrawBoard(board,NeedSleep=True):
24+
#I thought for hint u dont need sleep method so i given default value for Needsleep
25+
if NeedSleep:
26+
sleep(1)
27+
print()
28+
print(' '+board[1]+' | '+board[2]+' | '+board[3])
29+
print(' - - - - - - - ')
30+
print(' '+board[4]+' | '+board[5]+' | '+board[6])
31+
print(' - - - - - - - ')
32+
print(' '+board[7]+' | '+board[8]+' | '+board[9])
33+
print()
34+
35+
#asking the player to choose thier Letter (X or O)
36+
def InputPlayerLetter():
37+
letter=''
38+
#Ask untill user enters x or o
39+
while not(letter == 'X' or letter == 'O'):
40+
print('Do you want to be X or O')
41+
letter = input().upper()
42+
43+
#returning list bcz of later use
44+
if letter == 'X':
45+
return ['X','O']
46+
if letter == 'O':
47+
return ['O','X']
48+
49+
#Deciding who should play first randomly
50+
#in usual tic-tac-toe games player first,but it selects randomly between computer and player
51+
def WhoFirst():
52+
opponents = ['computer','player']
53+
if choice(opponents) == 'computer':
54+
return 'computer'
55+
else :
56+
return 'player'
57+
58+
#this function asks player to play again
59+
def PlayAgain():
60+
print()
61+
print('Do you want to Play Again (y or n)')
62+
playagain = input().lower().startswith('y')
63+
return playagain
64+
65+
#function for making move
66+
def MakeMove(board,letter,move):
67+
board[move] = letter
68+
69+
#check if any one win,returns True if wins
70+
#In tic-tac-toe there are 8 possibilities of winning
71+
#horizontal => 3 | vertical => 3 | diagonal => 2
72+
def IsWinner(board,letter):
73+
return ( (board[7] == letter and board[8] == letter and board[9] == letter ) or
74+
(board[4] == letter and board[5] == letter and board[6] == letter ) or
75+
(board[1] == letter and board[2] == letter and board[3] == letter ) or
76+
(board[1] == letter and board[4] == letter and board[7] == letter ) or
77+
(board[2] == letter and board[5] == letter and board[8] == letter ) or
78+
(board[3] == letter and board[6] == letter and board[9] == letter ) or
79+
(board[1] == letter and board[5] == letter and board[9] == letter ) or
80+
(board[3] == letter and board[5] == letter and board[7] == letter ) )
81+
82+
#duplicate board is useful when we wanted to make temporary changes to the temporary copy of the board without changing the original board
83+
def GetBoardCopy(board):
84+
DupeBoard = []
85+
for i in board:
86+
DupeBoard.append(i)
87+
return DupeBoard
88+
89+
#fuction to check is space is free
90+
def IsSpaceFree(board,move):
91+
return board[move] == ' '
92+
93+
#Getting the player move
94+
def GetPlayerMove(board):
95+
move = ''
96+
97+
while move not in '1 2 3 4 5 6 7 8 9'.split() or not IsSpaceFree(board,int(move)):
98+
print()
99+
print('Enter your move (1 - 9)')
100+
move = input()
101+
#if player wants Hint
102+
if move in HintInput:
103+
return move
104+
break
105+
return int(move)
106+
107+
#choose random move from given list
108+
#it is used when AI wants to choose out of many possibilities
109+
def ChooseRandomFromList(board,MoveList):
110+
PossibleMoves = []
111+
for i in MoveList:
112+
if IsSpaceFree(board,i):
113+
PossibleMoves.append(i)
114+
if len(PossibleMoves) != 0:
115+
return choice(PossibleMoves)
116+
else:
117+
return None
118+
119+
#creating computers AI
120+
#this ai works on this algorithm
121+
#1.it checks if computer can win in next move,else
122+
#2.it checks if player can win in next move,then it blocks it,else
123+
#3.it chooses any available spaces from the corner[1,3,7,9],else
124+
#4.it fills middle square if space free,else
125+
#5.it chooses any available spaces from sides,ie,[2,4,6,8]
126+
#if you interchange the 3 and 4 steps the AI becomes little Hard,ie,it fills middle then corner
127+
#--------------------------------------
128+
#Get computer move
129+
def GetComputerMove(board,ComputerLetter):
130+
if ComputerLetter == 'X':
131+
PlayerLetter = 'O'
132+
else:
133+
PlayerLetter = 'X'
134+
135+
#1.check computer can win in next move
136+
for i in range(1,10):
137+
copy = GetBoardCopy(board)
138+
if IsSpaceFree(copy,i):
139+
MakeMove(copy,ComputerLetter,i)
140+
if IsWinner(copy,ComputerLetter):
141+
return i
142+
143+
144+
#2.check player can win in next move
145+
for i in range(1,10):
146+
copy = GetBoardCopy(board)
147+
if IsSpaceFree(copy,i):
148+
MakeMove(copy,PlayerLetter,i)
149+
if IsWinner(copy,PlayerLetter):
150+
return i
151+
152+
#3.checking for corner
153+
move = ChooseRandomFromList(board,[1,3,7,9])
154+
if move != None:
155+
return move
156+
157+
#4.checking for the center
158+
if IsSpaceFree(board,5):
159+
return 5
160+
161+
#5.checking for sides
162+
return ChooseRandomFromList(board,[2,4,6,8])
163+
164+
#---------------------------------------
165+
166+
#checking board is full or not
167+
def IsBoardFull(board):
168+
for i in range(1,10):
169+
if IsSpaceFree(board,i):
170+
return False
171+
return True
172+
173+
#fuction to print the final win or tie board
174+
#made this to separate usual board and winning or tie board
175+
def FinalBoard(board,NeedSleep=True):
176+
print(' |-------------|')
177+
DrawBoard(board,NeedSleep)
178+
print(' |-------------|')
179+
180+
181+
#LETS START THE GAME
182+
Welcome()
183+
while True:
184+
#intialising board
185+
TheBoard = [' '] * 10
186+
PlayerLetter,ComputerLetter = InputPlayerLetter()
187+
turn = WhoFirst()
188+
print(f'The {turn} will go first')
189+
190+
#gameloop
191+
Playing = True
192+
while Playing:
193+
194+
if turn == 'player':
195+
print(f" Turn => {turn}")
196+
HintInput = ['Hint','hint','H','h']
197+
#taking players input
198+
move = GetPlayerMove(TheBoard)
199+
#if player needs Hint
200+
while move in HintInput:
201+
#following code gives hint to the user
202+
#it runs player letter to computer AI
203+
HintBox = []
204+
for i in TheBoard:
205+
HintBox.append(i)
206+
hint = GetComputerMove(HintBox,PlayerLetter)
207+
MakeMove(HintBox,PlayerLetter,hint)
208+
print(f'HINT : placing at {hint} is better')
209+
FinalBoard(HintBox,False)
210+
move = GetPlayerMove(TheBoard)
211+
212+
MakeMove(TheBoard,PlayerLetter,move)
213+
214+
215+
if IsWinner(TheBoard,PlayerLetter):
216+
FinalBoard(TheBoard)
217+
print('❤You have WON the game❤')
218+
Playing = not Playing
219+
elif IsBoardFull(TheBoard):
220+
FinalBoard(TheBoard)
221+
print('The game is TIE\nIts good to PLAY untill you WIN❤')
222+
Playing = not Playing
223+
else :
224+
DrawBoard(TheBoard)
225+
turn = 'computer'
226+
227+
else :
228+
#computer move
229+
print(f" Turn => {turn}")
230+
move = GetComputerMove(TheBoard,ComputerLetter)
231+
MakeMove(TheBoard,ComputerLetter,move)
232+
233+
234+
if IsWinner(TheBoard,ComputerLetter):
235+
FinalBoard(TheBoard)
236+
print('❤Try again bro you will win❤')
237+
Playing = not Playing
238+
elif IsBoardFull(TheBoard):
239+
FinalBoard(TheBoard)
240+
print('The game is TIE\nIts good to PLAY untill you WIN❤')
241+
Playing = not Playing
242+
else :
243+
DrawBoard(TheBoard)
244+
turn = 'player'
245+
246+
if not PlayAgain():
247+
print("***❤GIVE STAR ONLY IF YOU LIKE❤***")
248+
break
249+

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.