Skip to content

Commit 6cb43b9

Browse files
committed
Added 'Tic Tac Toe' Python-GUI-Project and added 'Tic Tac Toe' into README.md file
1 parent bfe530f commit 6cb43b9

File tree

3 files changed

+269
-0
lines changed

3 files changed

+269
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
<li> Url Shortener Gui Application </li>
2222
<li> Weather Gui Application </li>
2323
<li> Basic Gui Youtube Downloader </li>
24+
<li> Tic Tac Toe </li>
2425
</ol>
2526
-->
2627

Tic Tac Toe Game/README.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
2+
# Tic Tac Toe
3+
<p align="center">
4+
5+
## Description
6+
7+
A Tic Tac Toe game built in Python.
8+
9+
## Library Used
10+
`import tkinter`
11+
12+
## How to run
13+
Running the script is really simple! Just open a terminal in the folder where your script is located and run the following command:
14+
15+
```sh
16+
python tic_tac_toe.py
17+
```
18+
19+
## Author
20+
[Anokh1](https://github.com/Anokh1)
21+

Tic Tac Toe Game/tic_tac_toe.py

Lines changed: 247 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,247 @@
1+
from tkinter import *
2+
from tkinter import messagebox
3+
4+
root = Tk()
5+
root.title('Tic Tac Toe Game')
6+
7+
# Player 1 [X] starts first, Player 2 [O] continues
8+
clicked = True
9+
count = 0
10+
11+
# To disable all the buttons when someone has won the game
12+
def disableButtons():
13+
button1.config(state=DISABLED)
14+
button2.config(state=DISABLED)
15+
button3.config(state=DISABLED)
16+
17+
button4.config(state=DISABLED)
18+
button5.config(state=DISABLED)
19+
button6.config(state=DISABLED)
20+
21+
button7.config(state=DISABLED)
22+
button8.config(state=DISABLED)
23+
button9.config(state=DISABLED)
24+
25+
# To check whether did anyone won the game and restart the game when someone won the game
26+
def checkWinner():
27+
global winner
28+
winner = False
29+
30+
# Player 1 [X] winning patterns
31+
if button1["text"] == "X" and button2["text"] == "X" and button3["text"] == "X":
32+
button1.config(bg="#80ffaa") #[X][X][X]
33+
button2.config(bg="#80ffaa") #[O][O][ ]
34+
button3.config(bg="#80ffaa") #[ ][ ][ ]
35+
winner = True
36+
messagebox.showinfo("Tic Tac Toe", "Player 1 is the Winner!")
37+
disableButtons
38+
start()
39+
40+
elif button4["text"] == "X" and button5["text"] == "X" and button6["text"] == "X":
41+
button4.config(bg="#80ffaa") #[O][O][ ]
42+
button5.config(bg="#80ffaa") #[X][X][X]
43+
button6.config(bg="#80ffaa") #[ ][ ][ ]
44+
winner = True
45+
messagebox.showinfo("Tic Tac Toe", "Player 1 is the Winner!")
46+
disableButtons
47+
start()
48+
49+
elif button7["text"] == "X" and button8["text"] == "X" and button9["text"] == "X":
50+
button7.config(bg="#80ffaa") #[ ][ ][ ]
51+
button8.config(bg="#80ffaa") #[O][O][ ]
52+
button9.config(bg="#80ffaa") #[X][X][X]
53+
winner = True
54+
messagebox.showinfo("Tic Tac Toe", "Player 1 is the Winner!")
55+
disableButtons
56+
start()
57+
58+
elif button1["text"] == "X" and button4["text"] == "X" and button7["text"] == "X":
59+
button1.config(bg="#80ffaa") #[X][O][ ]
60+
button4.config(bg="#80ffaa") #[X][O][ ]
61+
button7.config(bg="#80ffaa") #[X][ ][ ]
62+
winner = True
63+
messagebox.showinfo("Tic Tac Toe", "Player 1 is the Winner!")
64+
disableButtons
65+
start()
66+
67+
elif button2["text"] == "X" and button5["text"] == "X" and button8["text"] == "X":
68+
button2.config(bg="#80ffaa") #[O][X][ ]
69+
button5.config(bg="#80ffaa") #[O][X][ ]
70+
button8.config(bg="#80ffaa") #[ ][X][ ]
71+
winner = True
72+
messagebox.showinfo("Tic Tac Toe", "Player 1 is the Winner!")
73+
disableButtons
74+
start()
75+
76+
elif button3["text"] == "X" and button6["text"] == "X" and button9["text"] == "X":
77+
button3.config(bg="#80ffaa") #[ ][O][X]
78+
button6.config(bg="#80ffaa") #[ ][O][X]
79+
button9.config(bg="#80ffaa") #[ ][ ][X]
80+
winner = True
81+
messagebox.showinfo("Tic Tac Toe", "Player 1 is the Winner!")
82+
disableButtons
83+
start()
84+
85+
elif button1["text"] == "X" and button5["text"] == "X" and button9["text"] == "X":
86+
button1.config(bg="#80ffaa") #[X][O][ ]
87+
button5.config(bg="#80ffaa") #[ ][X][ ]
88+
button9.config(bg="#80ffaa") #[ ][O][X]
89+
winner = True
90+
messagebox.showinfo("Tic Tac Toe", "Player 1 is the Winner!")
91+
disableButtons
92+
start()
93+
94+
elif button3["text"] == "X" and button5["text"] == "X" and button7["text"] == "X":
95+
button3.config(bg="#80ffaa") #[ ][O][X]
96+
button5.config(bg="#80ffaa") #[ ][X][ ]
97+
button7.config(bg="#80ffaa") #[X][O][ ]
98+
winner = True
99+
messagebox.showinfo("Tic Tac Toe", "Player 1 is the Winner!")
100+
disableButtons
101+
start()
102+
103+
# Player 2 [O] winning patterns
104+
elif button1["text"] == "O" and button2["text"] == "O" and button3["text"] == "O":
105+
button1.config(bg="#80ffaa") #[O][O][O]
106+
button2.config(bg="#80ffaa") #[X][X][ ]
107+
button3.config(bg="#80ffaa") #[X][ ][ ]
108+
winner = True
109+
messagebox.showinfo("Tic Tac Toe", "Player 2 is the Winner!")
110+
disableButtons
111+
start()
112+
113+
elif button4["text"] == "O" and button5["text"] == "O" and button6["text"] == "O":
114+
button4.config(bg="#80ffaa") #[X][X][ ]
115+
button5.config(bg="#80ffaa") #[O][O][O]
116+
button6.config(bg="#80ffaa") #[X][ ][ ]
117+
winner = True
118+
messagebox.showinfo("Tic Tac Toe", "Player 2 is the Winner!")
119+
disableButtons
120+
start()
121+
122+
elif button7["text"] == "O" and button8["text"] == "O" and button9["text"] == "O":
123+
button7.config(bg="#80ffaa") #[X][ ][ ]
124+
button8.config(bg="#80ffaa") #[X][X][ ]
125+
button9.config(bg="#80ffaa") #[O][O][O]
126+
winner = True
127+
messagebox.showinfo("Tic Tac Toe", "Player 2 is the Winner!")
128+
disableButtons
129+
start()
130+
131+
elif button1["text"] == "O" and button4["text"] == "O" and button7["text"] == "O":
132+
button1.config(bg="#80ffaa") #[O][X][X]
133+
button4.config(bg="#80ffaa") #[O][X][ ]
134+
button7.config(bg="#80ffaa") #[O][ ][ ]
135+
winner = True
136+
messagebox.showinfo("Tic Tac Toe", "Player 2 is the Winner!")
137+
disableButtons
138+
start()
139+
140+
elif button2["text"] == "O" and button5["text"] == "O" and button8["text"] == "O":
141+
button2.config(bg="#80ffaa") #[X][O][X]
142+
button5.config(bg="#80ffaa") #[X][O][ ]
143+
button8.config(bg="#80ffaa") #[ ][O][ ]
144+
winner = True
145+
messagebox.showinfo("Tic Tac Toe", "Player 2 is the Winner!")
146+
disableButtons
147+
start()
148+
149+
elif button3["text"] == "O" and button6["text"] == "O" and button9["text"] == "O":
150+
button3.config(bg="#80ffaa") #[X][X][O]
151+
button6.config(bg="#80ffaa") #[ ][X][O]
152+
button9.config(bg="#80ffaa") #[ ][ ][O]
153+
winner = True
154+
messagebox.showinfo("Tic Tac Toe", "Player 2 is the Winner!")
155+
disableButtons
156+
start()
157+
158+
elif button1["text"] == "O" and button5["text"] == "O" and button9["text"] == "O":
159+
button1.config(bg="#80ffaa") #[O][X][X]
160+
button5.config(bg="#80ffaa") #[ ][O][ ]
161+
button9.config(bg="#80ffaa") #[ ][X][O]
162+
winner = True
163+
messagebox.showinfo("Tic Tac Toe", "Player 2 is the Winner!")
164+
disableButtons
165+
start()
166+
167+
elif button3["text"] == "O" and button5["text"] == "O" and button7["text"] == "O":
168+
button3.config(bg="#80ffaa") #[X][X][O]
169+
button5.config(bg="#80ffaa") #[ ][O][ ]
170+
button7.config(bg="#80ffaa") #[O][X][ ]
171+
winner = True
172+
messagebox.showinfo("Tic Tac Toe", "Player 2 is the Winner!")
173+
disableButtons
174+
start()
175+
176+
# To check whether the game is a draw
177+
def checkDraw():
178+
global count, winner
179+
180+
if count == 9 and winner == False:
181+
messagebox.showerror("Tic Tac Toe", "Draw, play again!")
182+
start()
183+
184+
# To determine the buttons that Player 1 or Player 2 has clicked on
185+
def buttonClicked(button):
186+
global clicked, count
187+
188+
if button["text"] == " " and clicked == True:
189+
button["text"] = "X"
190+
clicked = False
191+
count += 1
192+
checkWinner()
193+
checkDraw()
194+
elif button["text"] == " " and clicked == False:
195+
button["text"] = "O"
196+
clicked = True
197+
count += 1
198+
checkWinner()
199+
checkDraw()
200+
else:
201+
messagebox.showerror("Tic Tac Toe", "Please select another box.")
202+
203+
# To start or restart the game
204+
def start():
205+
global button1, button2, button3, button4, button5, button6, button7, button8, button9
206+
global clicked, count
207+
clicked = True
208+
count = 0
209+
210+
# Building the buttons for the game
211+
button1 = Button(root, text=" ", font=("Helvetica, 20"), height=3, width=7, bg="SystemButtonFace", command=lambda: buttonClicked(button1))
212+
button2 = Button(root, text=" ", font=("Helvetica, 20"), height=3, width=7, bg="SystemButtonFace", command=lambda: buttonClicked(button2))
213+
button3 = Button(root, text=" ", font=("Helvetica, 20"), height=3, width=7, bg="SystemButtonFace", command=lambda: buttonClicked(button3))
214+
215+
button4 = Button(root, text=" ", font=("Helvetica, 20"), height=3, width=7, bg="SystemButtonFace", command=lambda: buttonClicked(button4))
216+
button5 = Button(root, text=" ", font=("Helvetica, 20"), height=3, width=7, bg="SystemButtonFace", command=lambda: buttonClicked(button5))
217+
button6 = Button(root, text=" ", font=("Helvetica, 20"), height=3, width=7, bg="SystemButtonFace", command=lambda: buttonClicked(button6))
218+
219+
button7 = Button(root, text=" ", font=("Helvetica, 20"), height=3, width=7, bg="SystemButtonFace", command=lambda: buttonClicked(button7))
220+
button8 = Button(root, text=" ", font=("Helvetica, 20"), height=3, width=7, bg="SystemButtonFace", command=lambda: buttonClicked(button8))
221+
button9 = Button(root, text=" ", font=("Helvetica, 20"), height=3, width=7, bg="SystemButtonFace", command=lambda: buttonClicked(button9))
222+
223+
# Arranging the buttons on the screen for the game
224+
button1.grid(row=0, column=0)
225+
button2.grid(row=0, column=1)
226+
button3.grid(row=0, column=2)
227+
228+
button4.grid(row=1, column=0)
229+
button5.grid(row=1, column=1)
230+
button6.grid(row=1, column=2)
231+
232+
button7.grid(row=2, column=0)
233+
button8.grid(row=2, column=1)
234+
button9.grid(row=2, column=2)
235+
236+
# Create game menu
237+
gameMenu = Menu(root)
238+
root.config(menu = gameMenu)
239+
240+
# Create game options menu
241+
optionMenu = Menu(gameMenu, tearoff=False)
242+
gameMenu.add_cascade(label="Options", menu=optionMenu)
243+
optionMenu.add_command(label="Restart Game", command=start)
244+
245+
246+
start()
247+
root.mainloop()

0 commit comments

Comments
 (0)