Python Mastermind Game using Tkinter GUI Based with Full Source Code

MASTERMIND GAME

  • The Python program uses tkinter interface to create a GUI-based simulation of the MasterMind game.
  • Refer to the link to understand the rules of the game: https://www.wikihow.com/Play-Mastermind
  • System Specifications: python3.8, Ubuntu 20.04

Dependencies:

  • tkinter
sudo apt-get install python3-tk
Code language: JavaScript (javascript)

Source Code:

Mastermind_GUIinterface.py

from tkinter import * class medium: def user(self,color): # takes user' choice self.color=color def __init__(self): # generates random palette a=['#270101', '#F08B33', '#776B04', '#F1B848', '#8F715B', '#0486DB', '#C1403D', '#F3D4A0'] import random self.b=[];n=4; while n!=0: p=random.choice(a) if p not in self.b: self.b.append(p) n-=1 def compare(self,g,l1): l=[] # hints for x in range(4): if l1[x]==g[x]: l.append('red') elif l1[x]in g: l.append('gray') return l class MasterMind(): def __init__(self, root): obj=medium() self.gen=obj.b # generated color combo self.colors = ['#270101', '#F08B33', '#776B04', '#F1B848', '#8F715B', '#0486DB', '#C1403D', '#F3D4A0'] root.geometry('390x600') for y in range(20): Grid.rowconfigure(root, y, weight=1) for x in range(8): Grid.columnconfigure(root, x, weight=1) self.palette = [] # display of palette n,c=0,0 for i in self.colors: self.palette.append(Button(root, bg=i, height=1, width=5, relief=SUNKEN)) self.palette[n].grid(row=20, column=c) n+=1;c+=1; self.palette[0].config(command=lambda: self.guess(root, self.palette[0]['bg'],obj)) # binding function to palette self.palette[1].config(command=lambda: self.guess(root, self.palette[1]['bg'],obj)) self.palette[2].config(command=lambda: self.guess(root, self.palette[2]['bg'],obj)) self.palette[3].config(command=lambda: self.guess(root, self.palette[3]['bg'],obj)) self.palette[4].config(command=lambda: self.guess(root, self.palette[4]['bg'],obj)) self.palette[5].config(command=lambda: self.guess(root, self.palette[5]['bg'],obj)) self.palette[6].config(command=lambda: self.guess(root, self.palette[6]['bg'],obj)) self.palette[7].config(command=lambda: self.guess(root, self.palette[7]['bg'],obj)) self.user_choice = [] # stores the widget self.code = [] # stores the colors self.key = [] # stores the hints global ccol, cro ccol,cro = 2,19 def guess(self, root, choice,obj): global ccol global cro f=True # boolean flag if cro != 1: self.user_choice.append(Button(root, bg=choice, height=1, width=5, relief=RAISED)) if len(self.user_choice) < 4: self.user_choice[-1].grid(row=cro, column=ccol) self.code.append(self.user_choice[-1]['bg']) ccol += 1 elif len(self.user_choice) == 4: self.user_choice[-1].grid(row=cro, column=ccol) self.code.append(self.user_choice[-1]['bg']) ccol += 1 ccol = 2 cro = cro-1 obj.user(self.code) # send the user's choice self.key=obj.compare(self.code,self.gen) #get the hints if self.key==['red','red','red','red']: f=False self.hint(root, self.key) l=Label(root,text="CONGRATULATIONS!!!") l.grid(row=0,columnspan=8) else: self.hint(root, self.key) self.code = [] self.user_choice = [] else: if f: l=Label(root,text="You are a LOSER!!!! ANSWER:") l.grid(row=0,columnspan=4) c=5 for i in self.gen: b=Button(root,bg=i,height=1, width=5, relief=SUNKEN) b.grid(row=0,column=c) c+=1 global hcol, hro hcol,hro = 8,19 def hint(self, root, key): global hcol, hro a = [] for i in key: a.append(Label(root, bg=i,relief=SUNKEN)) a[-1].grid(row=hro, column=hcol, sticky=E) hcol += 1 hro -= 1;hcol = 8; master = Tk() M = MasterMind(master) master.mainloop()
Code language: HTML, XML (xml)

Output:

Leave a Comment