In this video we’ll add the logic to our tic tac toe game with Kivy and Python.
In the last video we built out the gui and basic functionality of our tic tac toe game.
In this video we’ll determine if a person won, or if there was a tie.
We’ll change the button colors for wins, and tinker with the reset function a bit.
#kivy #codemy
Python Code: toe.py
GitHub Code: toe.py
from kivy.lang import Builder from kivymd.app import MDApp class MainApp(MDApp): def build(self): self.theme_cls.theme_style = "Dark" self.theme_cls.primary_palette = "BlueGray" return Builder.load_file('toe.kv') # Define Who's turn it is turn = "X" # Keep Track of win or lose winner = False # No Winner def no_winner(self): if self.winner == False and \ self.root.ids.btn1.disabled == True and \ self.root.ids.btn2.disabled == True and \ self.root.ids.btn3.disabled == True and \ self.root.ids.btn4.disabled == True and \ self.root.ids.btn5.disabled == True and \ self.root.ids.btn6.disabled == True and \ self.root.ids.btn7.disabled == True and \ self.root.ids.btn8.disabled == True and \ self.root.ids.btn9.disabled == True: self.root.ids.score.text = "IT'S A TIE!!" # End The Game def end_game(self, a,b,c): self.winner = True a.color = "red" b.color = "red" c.color = "red" # Disable the buttons self.disable_all_buttons() # Set Label for winner self.root.ids.score.text = f"{a.text} Wins!" def disable_all_buttons(self): # Disable The Buttons self.root.ids.btn1.disabled = True self.root.ids.btn2.disabled = True self.root.ids.btn3.disabled = True self.root.ids.btn4.disabled = True self.root.ids.btn5.disabled = True self.root.ids.btn6.disabled = True self.root.ids.btn7.disabled = True self.root.ids.btn8.disabled = True self.root.ids.btn9.disabled = True def win(self): # Across if self.root.ids.btn1.text != "" and self.root.ids.btn1.text == self.root.ids.btn2.text and self.root.ids.btn2.text == self.root.ids.btn3.text: self.end_game(self.root.ids.btn1, self.root.ids.btn2, self.root.ids.btn3) if self.root.ids.btn4.text != "" and self.root.ids.btn4.text == self.root.ids.btn5.text and self.root.ids.btn5.text == self.root.ids.btn6.text: self.end_game(self.root.ids.btn4, self.root.ids.btn5, self.root.ids.btn6) if self.root.ids.btn7.text != "" and self.root.ids.btn7.text == self.root.ids.btn8.text and self.root.ids.btn8.text == self.root.ids.btn9.text: self.end_game(self.root.ids.btn7, self.root.ids.btn8, self.root.ids.btn9) # Down if self.root.ids.btn1.text != "" and self.root.ids.btn1.text == self.root.ids.btn4.text and self.root.ids.btn4.text == self.root.ids.btn7.text: self.end_game(self.root.ids.btn1, self.root.ids.btn4, self.root.ids.btn7) if self.root.ids.btn2.text != "" and self.root.ids.btn2.text == self.root.ids.btn5.text and self.root.ids.btn5.text == self.root.ids.btn8.text: self.end_game(self.root.ids.btn2, self.root.ids.btn5, self.root.ids.btn8) if self.root.ids.btn3.text != "" and self.root.ids.btn3.text == self.root.ids.btn6.text and self.root.ids.btn6.text == self.root.ids.btn9.text: self.end_game(self.root.ids.btn3, self.root.ids.btn6, self.root.ids.btn9) # Diagonal if self.root.ids.btn1.text != "" and self.root.ids.btn1.text == self.root.ids.btn5.text and self.root.ids.btn5.text == self.root.ids.btn9.text: self.end_game(self.root.ids.btn1, self.root.ids.btn5, self.root.ids.btn9) if self.root.ids.btn3.text != "" and self.root.ids.btn3.text == self.root.ids.btn5.text and self.root.ids.btn5.text == self.root.ids.btn7.text: self.end_game(self.root.ids.btn3, self.root.ids.btn5, self.root.ids.btn7) self.no_winner() def presser(self, btn): if self.turn == 'X': btn.text = "X" btn.disabled = True self.root.ids.score.text = "O's Turn!" self.turn = "O" else: btn.text = "O" btn.disabled = True self.root.ids.score.text = "X's Turn!" self.turn = "X" # Check To See if won self.win() def restart(self): # Reset Who's Turn It Is self.turn = "X" # Enable The Buttons self.root.ids.btn1.disabled = False self.root.ids.btn2.disabled = False self.root.ids.btn3.disabled = False self.root.ids.btn4.disabled = False self.root.ids.btn5.disabled = False self.root.ids.btn6.disabled = False self.root.ids.btn7.disabled = False self.root.ids.btn8.disabled = False self.root.ids.btn9.disabled = False # Clear The Buttons self.root.ids.btn1.text = "" self.root.ids.btn2.text = "" self.root.ids.btn3.text = "" self.root.ids.btn4.text = "" self.root.ids.btn5.text = "" self.root.ids.btn6.text = "" self.root.ids.btn7.text = "" self.root.ids.btn8.text = "" self.root.ids.btn9.text = "" # Reset The Button Colors self.root.ids.btn1.color = "green" self.root.ids.btn2.color = "green" self.root.ids.btn3.color = "green" self.root.ids.btn4.color = "green" self.root.ids.btn5.color = "green" self.root.ids.btn6.color = "green" self.root.ids.btn7.color = "green" self.root.ids.btn8.color = "green" self.root.ids.btn9.color = "green" # Reset The Score Label self.root.ids.score.text = "X GOES FIRST!" # Reset The Winner Variable self.winner = False MainApp().run()
Kivy Design Code: toe.kv
GitHub Code: toe.kv
MDFloatLayout: MDGridLayout: size_hint: .5, .5 pos_hint: {'center_x': .5, 'center_y': .7} cols: 3 rows: 3 Button: id: btn1 text: "" font_size: "45sp" on_release: app.presser(btn1) Button: id: btn2 text: "" font_size: "45sp" on_release: app.presser(btn2) Button: id: btn3 text: "" font_size: "45sp" on_release: app.presser(btn3) Button: id: btn4 text: "" font_size: "45sp" on_release: app.presser(btn4) Button: id: btn5 text: "" font_size: "45sp" on_release: app.presser(btn5) Button: id: btn6 text: "" font_size: "45sp" on_release: app.presser(btn6) Button: id: btn7 text: "" font_size: "45sp" on_release: app.presser(btn7) Button: id: btn8 text: "" font_size: "45sp" on_release: app.presser(btn8) Button: id: btn9 text: "" font_size: "45sp" on_release: app.presser(btn9) MDLabel: id: score font_size: "32sp" text: "X GOES FIRST!" halign: "center" pos_hint: {"center_y": .3} MDRaisedButton: id: restart text: "Restart The Game" pos_hint: {'center_x': .5, 'center_y': .15} on_release: app.restart()
Add comment