Rock Paper Scissors in Python using GUI Tkinter

Hey folks, This project will help you play and create Rock Paper Scissors GUI game in Python, a very renowned game we have all swayed our hands to since our childhood. So for this project, we are going to use some in-built libraries of python namely: Tkinter and Random.
Using:
from tkinter import * from tkinter import messagebox import random as r
Rock Paper Scissors GUI using Python
We’ll kick off with learning the functions used in this project:
The P1_roll function:
def p1_roll():
global p1_choice
p1_choice=r.choice(['rock','scissors','paper'])
p1.configure(image=moves[p1_choice])
b1['text']=p1_choice.title()
b1['state']=DISABLED
check()The above function randomly chooses a move for Player 1 while also changing the state and text of the button associated and changes the image to match the button text.
The P2_roll function:
def p2_roll():
global p2_choice
p2_choice=r.choice(['rock','scissors','paper'])
p2.configure(image=moves[p2_choice])
b2['text']=p2_choice.title()
b2['state']=DISABLED
check()This function is the same as the above but it does all the above-mentioned configurations for Player 2.
You might have noticed the check() function being called in both the p1_roll and p2_roll, it goes like this:
The Check() function:
def check():
if(b1['state']==b2['state']==DISABLED):
compare()The check() function checks if the states of both the buttons are the same and is set to DISABLED and finally calls the compare() function.
The Compare() function:
def compare():
if((b1['text'][0]=='R' and b2['text']=='S') or (b1['text'][0]=='S' and b2['text']=='P') or (b1['text'][0]=='P' and b2['text']=='R')):
messagebox.showinfo('Victory','Player 1 has Won.\n\tHurrah!!')
elif(b1['text']==b2['text']):
messagebox.showinfo('Draw',"Well that's a tie.\n\tBetter luck next time!!")
else:
messagebox.showinfo('Victory','Player 2 has Won.\n\tHurrah!!')
reset()This function does the basic comparing of the moves of the players based on the Rock-Paper-Scissor rules and displays prompt for each result and resets the application by calling the reset() function.
The Reset() function:
def reset():
global p1_choice,p2_choice
b1['text']='Player 1 Roll'
b1['state']=NORMAL
p1.configure(image=general['player_1'])
p1_choice=None
b2['text']='Player 2 Roll'
b2['state']=NORMAL
p2.configure(image=general['player_2'])
p2_choice=NoneThe reset() function returns all the configuration of the application to its initial state.
In the main program we follow the following steps:
- We define the tk window using Tk() as the root variable.
- Then we create the title of the window.
- Next, we define a variable each for storing the initial images (general)and moves images(moves).
- Then we create two frames:
- The first frame contains image displays.
- The second frame contains the buttons required.
- Also, we set the various arguments of the button and the frames.
- Note: We insert a frame in the second frame between the two buttons to create some space between them.
- Lastly, we pack all the widgets together in their respective positions and define the variables that store choice for each player.
- We end by a root.mainloop() function to keep the events on the main window active and all widgets interactive.
Also, we use a messagebox class of Tkinter to display prompts during the game for the results
The Complete program looks like so:
from tkinter import *
from tkinter import messagebox
import random as r
def reset():
global p1_choice,p2_choice
b1['text']='Player 1 Roll'
b1['state']=NORMAL
p1.configure(image=general['player_1'])
p1_choice=None
b2['text']='Player 2 Roll'
b2['state']=NORMAL
p2.configure(image=general['player_2'])
p2_choice=None
def compare():
if((b1['text'][0]=='R' and b2['text']=='S') or (b1['text'][0]=='S' and b2['text']=='P') or (b1['text'][0]=='P' and b2['text']=='R')):
messagebox.showinfo('Victory','Player 1 has Won.\n\tHurrah!!')
elif(b1['text']==b2['text']):
messagebox.showinfo('Draw',"Well that's a tie.\n\tBetter luck next time!!")
else:
messagebox.showinfo('Victory','Player 2 has Won.\n\tHurrah!!')
reset()
def check():
if(b1['state']==b2['state']==DISABLED):
compare()
def p1_roll():
global p1_choice
p1_choice=r.choice(['rock','scissors','paper'])
p1.configure(image=moves[p1_choice])
b1['text']=p1_choice.title()
b1['state']=DISABLED
check()
def p2_roll():
global p2_choice
p2_choice=r.choice(['rock','scissors','paper'])
p2.configure(image=moves[p2_choice])
b2['text']=p2_choice.title()
b2['state']=DISABLED
check()
#############################Main Program############################
root=Tk()
root.title("Rock-Paper-Scissors")
font=(('Times New Roman','bold'),'20')
general={'player_1':PhotoImage(file='Assets/player1.png'),'player_2':PhotoImage(file='Assets/player2.png'),'vs':PhotoImage(file='Assets/vs.png')}
moves={'rock':PhotoImage(file='Assets/rock.png'),'paper':PhotoImage(file='Assets/paper.png'),'scissors':PhotoImage(file='Assets/scissor.png')}
f1=Frame(root)
p1=Label(f1,image=general['player_1'])
p1.pack(side='left')
vs=Label(f1,image=general['vs'])
vs.pack(side='left')
p2=Label(f1,image=general['player_2'])
p2.pack(side='left')
f1.pack()
f2=Frame(root)
b1=Button(f2,text='Player 1 Roll',width=20,font=font,command=p1_roll)
b1.pack(side='left')
f_space=Frame(f2,width=150)
f_space.pack(side='left')
b2=Button(f2,text='Player 2 Roll',width=20,font=font,command=p2_roll)
b2.pack(side='left')
f2.pack(pady=10)
p1_choice=None
p2_choice=None
root.mainloop()To learn more about Random:
How to create rock paper scissors two players game in Python
Leave a Reply