Comp Pro Rep
Comp Pro Rep
Project Report On
Quiz Game
FOR AISSCE 2024 EXAMINATION
[AS A PART OF THE COMPUTER SCIENCE COURSE (083)]
Page 1 of 33
CERTIFICATE
………………………… ……………………………..
Signature of Principal Signature of Teacher
………………………… ……………………………..
Signature of Examiner Signature of Student
Page 2 of 33
ACKNOWLEDGEMENT
Page 3 of 33
Table of Contents
CERTIFICATE..........................................................2
ACKNOWLEDGEMENT ..........................................3
INTRODUCTION ...................................................5
OBJECTIVE AND PROJECT DEFINITION ..................6
HARDWARE AND SOFTWARE REQUIREMENTS .....7
MODULES ............................................................8
Tkinter.......................................................8
Pillow .......................................................8
MYSQL Connector .....................................9
Code and Output ..................................................9
Database Description ................................9
Project code files ......................................10
Text files for question bank ........................10
MainGame.py ............................................11
NewUser.py ...............................................13
LoginGame.py ............................................16
Quizgame.py ..............................................19
ShowScore.py .............................................27
deleteUser.py .............................................30
BIBLOGRAPHY .......................................................33
Page 4 of 33
INTRODUCTION
Quiz Game:
Games are essential for development of the students.
It nurtures the competitive sprit in students. This quiz
game will enhance the knowledge of the students on
different subject.
Page 5 of 33
OBJECTIVE AND PROJECT
DEFINITION
Page 6 of 33
HARDWARE AND SOFTWARE
REQUIREMENTS
1. PC with Intel core i5 with 64 GB RAM and 64 bit
OS
2. MS Windows 11 OS
3. Python 5.5
4. IDLE (Python 5.5)
5. Python Libraries
a. TKinter
b. Pillow
c. MySQL Connector
6. MySQL DB
Page 7 of 33
MODULES
Tkinter
Tkinter is a useful tool for creating a wide variety of
graphical user interfaces, including windows, dialog
boxes, and custom widgets. It is particularly well-suited
for building desktop applications and adding a GUI to
command-line programs. It is indeed one of the fastest
and easiest ways to build GUI applications. Moreover,
Tkinter is cross-platform, hence the same code works
on macOS, Windows, and Linux.
To install Tkinter: pip install Tk
Pillow
The Pillow library in Python contains all the basic
image processing functionality. We can rotate, resize
and transform an image. In this code, the Pillow
module has been used in defining the backgrounds
that appear as the output.
To install Pillow: pip install pillow
Page 8 of 33
MYSQL Connector
MySQL Connector/Python enables Python programs to
access MySQL databases, using an API that is
compliant with the python.
Tables:
Page 9 of 33
Project code files:
S.no. File Name Description
1 MainGame.py Main window of the project gives user all the options
provided by the application
2 NewUser.py This window of the application allow user to add new user
3 LoginGame.py This window allows user to login to play the quiz
4 Quizgame.py This is the window to show the questions and receive the
answers
5 ShowScore.py After the quiz it shows the score
6 deleteUser.py To delete a user from DB only Admin can delete the user
Page 10 of 33
MainGame.py:
from random import randint
from tkinter import messagebox
from tkinter import *
import tkinter as tk
import os
from PIL import ImageTk, Image
from LoginGame import *
from NewUser import *
from deleteUser import *
Main_window = Tk()
Main_window.title("Game")
shight = Main_window.winfo_screenheight()
swidth = Main_window.winfo_screenwidth()
Main_window.geometry("%dx%d" %(swidth,shight))
#Adding background
bkImg = Image.open("myimg.jpeg")
img = ImageTk.PhotoImage(bkImg)
Canvas1=Canvas(Main_window)
Canvas1.create_image(300,300,image=img)
#Canvas1.config (bg="Green",width=swidth,height=shight)
Canvas1.pack(expand=True,fill=BOTH)
headingFrame1 = Frame(Main_window,bg="#FFBB00",bd=5)
headingFrame1.place(relx=0.2,rely=0.1,relwidth=0.6,relheight=0.16)
headingLabel = Label(headingFrame1, text=" Welcome to \nWorld of Quiz", bg='black',
fg='white',font=('Century 15 bold'))
headingLabel.place(relx=0,rely=0, relwidth=1, relheight=1)
Page 11 of 33
Output:
Page 12 of 33
NewUser.py:
from random import randint
from tkinter import messagebox
from tkinter import *
import tkinter as tk
import os
from PIL import ImageTk, Image
import mysql.connector
nu_pwd=None
nu_UName=None
nu_UID=None
def newu():
global Main_window, Canvas1, nu_UName, nu_pwd,nu_UID
Main_window = Tk()
Main_window.title("QuizGame New User")
Main_window.minsize(width=400,height=400)
Main_window.geometry("600x500")
Canvas1 = Canvas(Main_window)
#Canvas1.config(bg="#ff6e40")
Canvas1.config(bg="#ffce30")
Canvas1.pack(expand=True,fill=BOTH)
headingFrame1 = Frame(Main_window,bg="#FFBB00",bd=5)
headingFrame1.place(relx=0.25,rely=0.1,relwidth=0.5,relheight=0.13)
labelFrame = Frame(Main_window,bg='black')
labelFrame.place(relx=0.1,rely=0.4,relwidth=0.8,relheight=0.4)
nu_UID = Entry(labelFrame)
nu_UID.place(relx=0.3,rely=0.2, relwidth=0.62, relheight=0.08)
nu_UName = Entry(labelFrame)
nu_UName.place(relx=0.3,rely=0.35, relwidth=0.62, relheight=0.08)
Page 13 of 33
lb3 = Label(labelFrame,text="Password : ", bg='black', fg='white')
lb3.place(relx=0.05,rely=0.5, relheight=0.08)
nu_pwd = Entry(labelFrame)
nu_pwd.place(relx=0.3,rely=0.5, relwidth=0.62, relheight=0.08)
#Submit Button
SubmitBtn = Button(Main_window,text="Add User",bg='#d1ccc0',
fg='black',command=adduser)
SubmitBtn.place(relx=0.28,rely=0.9, relwidth=0.18,relheight=0.08)
quitBtn = Button(Main_window,text="Quit",bg='#f7f1e3', fg='black',
command=Main_window.destroy)
quitBtn.place(relx=0.53,rely=0.9, relwidth=0.18,relheight=0.08)
Main_window.mainloop()
def adduser():
global nu_UName, nu_pwd,nu_UID,Main_window
#need to connect to db
con=mysql.connector.connect(host="localhost",user="root",password="Tiaa123$"
,database="quizgame")
cur = con.cursor()
suname = nu_UName.get()
spwd = nu_pwd.get()
suid = nu_UID.get()
values="('"+suid+"' ,'"+suname+"' ,'"+spwd+"')"
#print(values)
userTable = "gameplayer"
extractInfo="select * from {} where id='{}'".format(userTable,suid)
print (extractInfo)
try:
cur.execute(extractInfo)
data =cur.fetchall()
Count=cur.rowcount
print (data)
print("rowCount=",Count)
if Count>0:
messagebox.showinfo("Error","User already exist!")
Main_window.destroy()
else:
extractInfo1="insert into {} value {}".format(userTable,values)
cur.execute(extractInfo1)
con.commit()
messagebox.showinfo("Success", "User Added successfully")
Main_window.destroy()
Page 14 of 33
except:
messagebox.showinfo("Error", "Can't get the gameplayer data")
Main_window.destroy()
Output:
Page 15 of 33
LoginGame.py:
from random import randint
from tkinter import messagebox
from tkinter import *
import tkinter as tk
import os
from PIL import ImageTk, Image
import mysql.connector
from Quizgame import *
txpwd=None
UName=None
def login2game():
global Main_window, Canvas1,txpwd,UName
Main_window = Tk()
Main_window.title("QuizGame login")
Main_window.minsize(width=400,height=400)
Main_window.geometry("600x500")
# Add your own database name and password here to reflect in the code
#con=mysql.connector.connect(host="localhost",user="root",password="Abc",dat
abase="db")
#cur = con.cursor()
# Enter Table Names here
Canvas1 = Canvas(Main_window)
#Canvas1.config(bg="#ff6e40")
Canvas1.config(bg="#800080")
Canvas1.pack(expand=True,fill=BOTH)
headingFrame1 = Frame(Main_window,bg="#FFBB00",bd=5)
headingFrame1.place(relx=0.25,rely=0.1,relwidth=0.5,relheight=0.13)
labelFrame = Frame(Main_window,bg='black')
labelFrame.place(relx=0.1,rely=0.4,relwidth=0.8,relheight=0.4)
UName = Entry(labelFrame)
Page 16 of 33
UName.place(relx=0.3,rely=0.2, relwidth=0.62, relheight=0.08)
txpwd = Entry(labelFrame)
txpwd.place(relx=0.3,rely=0.35, relwidth=0.62, relheight=0.08)
#Submit Button
SubmitBtn = Button(Main_window,text="SUBMIT",bg='#d1ccc0',
fg='black',command=glogin)
SubmitBtn.place(relx=0.28,rely=0.9, relwidth=0.18,relheight=0.08)
quitBtn = Button(Main_window,text="Quit",bg='#f7f1e3', fg='black',
command=Main_window.destroy)
quitBtn.place(relx=0.53,rely=0.9, relwidth=0.18,relheight=0.08)
Main_window.mainloop()
def glogin():
global UName,txpwd,Canvas1,userTable,Main_window #con,cur,
suname = UName.get()
spwd = txpwd.get()
#print ("workin progress for login uid=" ,suname ,"pwd=",spwd)
#need to check DB if the username and PWD is correct.
con=mysql.connector.connect(host="localhost",user="root",password="Tiaa123$"
,database="quizgame")
cur = con.cursor()
userTable = "gameplayer"
extractInfo="select * from {} where id='{}'".format(userTable,suname)
try:
cur.execute(extractInfo)
data =cur.fetchall()
print (data)
if data[0][0]==suname:
if data[0][2]==spwd:
Main_window.destroy()
play(suname)
else:
messagebox.showinfo("Error", "Username or password not
valid")
Main_window.destroy()
else:
messagebox.showinfo("Error", "Username or password not valid")
Main_window.destroy()
Page 17 of 33
except:
messagebox.showinfo("Error", "Can't get the gameplayer data")
Main_window.destroy()
Output
Page 18 of 33
Quizgame.py:
from random import randint
from tkinter import messagebox
from tkinter import *
import tkinter as tk
import os
from PIL import ImageTk, Image
import mysql.connector
from ShowScore import *
questionsGK=[]
AnswersGK=[]
questionsMath=[]
AnswersMath=[]
questionsSic=[]
AnswersSic=[]
questionsComp=[]
AnswersComp=[]
qList=[]
ansList=[]
qvar1=None
question=""
first=0
count=0
score=0
Skipcount=0
ans=""
my_label=None
qlableText=None
qlb1=None
headingFrame1=None
headingLabel=None
qlabelFrame=None
uname=""
subject=""
# creating the tkinter window
def importans(file,alist):
file_name = os.path.join(os.getcwd(), file)
print (file_name)
file_ans = open(file_name, 'r')
count = 0
linetype=0
#line ="a"
Page 19 of 33
while True:
count += 1
# Get next line from file
#line = file1.readline()
# if line is empty
# end of file is reached
line = file_ans.readline()
if not line:
break
print(line);
alist=line.split(",")
print(alist)
#question_list.append(line)
file_ans.close()
print(count)
return alist
def importquiz(file,question_list):
"""
read the quiz file and import it in list.
"""
#file = os.getcwd()+file
#file = os.path.join(os.getcwd(), file)
file_name = os.path.join(os.getcwd(), file)
print (file_name)
file1 = open(file_name, 'r')
count = 0
linetype=0
#line ="a"
while True:
count += 1
# Get next line from file
#line = file1.readline()
# if line is empty
# end of file is reached
line = file1.readline()
if not line:
break
question_list.append(line)
#print("Line{}: {}".format(count, line.strip()))
file1.close()
print(count)
return question_list
def showQuestion():
global ans, qList, ansList,count,qlableText,ansList,qlb1,uname
Page 20 of 33
#print ("in showQuestion")
if (count==5):
#show result
text1="you score "+str(score)+ " outof 5"
messagebox.showinfo( "Result", text1)
addscoretoDB()
exit(0)
else:
#print("inside else count=",count)
qno=randint(0,9-count)
#print("inside else qno=",qno)
count=count+1
q=qList.pop(qno)
tokens=q.split("|")
qu=tokens[0]+"\n"+tokens[1]+"\n"+tokens[2]+"\n"+tokens[3]+"\n"+tokens[4]
qlableText.set(qu)
print(ansList)
ans=ansList.pop(qno)
def addscoretoDB():
global uname,subject,score
print ("user=",uname,"sub=" ,subject,"score=",score)
con=mysql.connector.connect(host="localhost",user="root",password="Tiaa123$"
,database="quizgame")
cur = con.cursor()
userTable = "scores"
#values="('"+uname+"',"+score+",'"+subject+"')"
extractInfo1="insert into {} value
('{}',{},'{}')".format(userTable,uname,score,subject)
cur.execute(extractInfo1)
con.commit()
ShowScoreScreen(uname,subject)
def verifyAns():
global ans,score,qvar1
# messagebox.showinfo("verifyAns",str(qvar1.get()))
if (ans==str(qvar1.get())):
score=score+1
print("inside verifyAns
ans=",ans,"Uans=",str(qvar1.get()),"score=",score)
def submitCallBack():
Page 21 of 33
global
subject,first,qvar1,qList,questionsGK,questionsMath,questionsSic,questionsCo
mp,AnswersGK,AnswersMath,AnswersSic,AnswersComp,ansList
print("qvar1.get()=",qvar1.get())
if(first==0):
# messagebox.showinfo( "submit", str(qvar1.get()))
first=1
if(str(qvar1.get())=="1"):
print("GK")
subject="GK"
importquiz('Questions\GK_ques.txt',questionsGK)
AnswersGK=importans('Questions\GK_ans.txt',AnswersGK)
print(AnswersGK)
qList=questionsGK
ansList=AnswersGK
elif(str(qvar1.get())=="2"):
print("math")
subject="Math"
importquiz('Questions\Math_ques.txt',questionsMath)
AnswersMath=importans('Questions\Math_ans.txt',AnswersMath)
qList=questionsMath
ansList=AnswersMath
elif(str(qvar1.get())=="3"):
print("science")
subject="Science"
importquiz('Questions\Sci_ques.txt',questionsSic)
AnswersSic=importans('Questions\Sci_ans.txt',AnswersSic)
qList=questionsSic
ansList=AnswersSic
elif(str(qvar1.get())=="4"):
print("Comp science")
subject="Computer"
importquiz('Questions\Comp_ques.txt',questionsComp)
AnswersComp=importans('Questions\Comp_ans.txt',AnswersComp)
qList=questionsComp
ansList=AnswersComp
showQuestion()
else:
addscoretoDB()
qMain_window.destroy()
def nextCallBack():
#global first, qList, ansList,var,qlableText
verifyAns()
showQuestion()
Page 22 of 33
def skipCallBack():
global Skipcount
if(Skipcount==1):
messagebox.showinfo ("Skip","You already skiped 1 question, \ncannot
skip this one")
else:
Skipcount=Skipcount+1
showQuestion()
def sel():
#messagebox.showinfo("sel",var.get())
a=2
def play(user):
global qMain_window, qvar1,qlableText,qlb1,qlabelFrame,uname
qMain_window = Tk()
qMain_window.title("Quiz Game")
qMain_window.minsize(width=400,height=400)
qMain_window.geometry("600x500")
uname=user
qCanvas1 = Canvas(qMain_window)
qCanvas1.config(bg="#B22222")
qCanvas1.pack(expand=True,fill=BOTH)
headingFrame1 = Frame(qMain_window,bg="#FFBB00",bd=5)
headingFrame1.place(relx=0.25,rely=0.1,relwidth=0.5,relheight=0.13)
wel="Welcome "+uname
headingLabel = Label(headingFrame1, text=wel, bg='black', fg='white',
font=('Century 15'))
headingLabel.place(relx=0,rely=0, relwidth=1, relheight=1)
qlabelFrame = Frame(qMain_window,bg='black')
qlabelFrame.place(relx=0.1,rely=0.3,relwidth=0.8,relheight=0.6)
qlableText=tk.StringVar()
qlb1 = Label(qlabelFrame, textvariable=qlableText, bg='black',
fg='white',font=('Century 12'),justify=LEFT,wraplength=450)
qlableText.set("Select The Quiz subject from below options\n\nA) GK\nB)
Math\nC) Science\nD) Python ")
qlb1.place(relx=0.05,rely=0.02, relwidth=0.9,relheight=0.5)
qvar1 = IntVar()
R1 = Radiobutton(qlabelFrame, text="A", variable=qvar1, value=1,
fg='black',bg='white',command=sel).place(relx=.1,rely=.55)
Page 23 of 33
R2 = Radiobutton(qlabelFrame, text="B", variable=qvar1, value=2,
fg='black',bg='white',command=sel).place(relx=.5,rely=.55)
R3 = Radiobutton(qlabelFrame, text="C", variable=qvar1, value=3,
fg='black',bg='white',command=sel).place(relx=.1,rely=.7)
R4 = Radiobutton(qlabelFrame, text="D", variable=qvar1, value=4,
fg='black',bg='white',command=sel).place(relx=.5,rely=.7)
#Submit Button
nxtBtn = Button(qMain_window,text="Next",bg='#d1ccc0',
fg='black',command=nextCallBack)
nxtBtn.place(relx=0.2,rely=0.9, relwidth=0.18,relheight=0.08)
SubmitBtn = Button(qMain_window,text="SUBMIT",bg='#d1ccc0',
fg='black',command=submitCallBack)
SubmitBtn.place(relx=0.4,rely=0.9, relwidth=0.18,relheight=0.08)
quitBtn = Button(qMain_window,text="Quit",bg='#f7f1e3', fg='black',
command=qMain_window.destroy)
quitBtn.place(relx=0.6,rely=0.9, relwidth=0.18,relheight=0.08)
qMain_window.mainloop()
Page 24 of 33
Output:
Page 25 of 33
Page 26 of 33
ShowScore.py:
from random import randint
from tkinter import messagebox
from tkinter import *
import tkinter as tk
import os
from PIL import ImageTk, Image
import mysql.connector
from Quizgame import *
uname=''
subject=''
def ShowScoreScreen(user,sub):
global Main_window, Canvas1,uname,subject
Main_window = Tk()
Main_window.title("QuizGame Score")
Main_window.minsize(width=400,height=400)
Main_window.geometry("600x500")
uname=user
subject=sub
Canvas1 = Canvas(Main_window)
#Canvas1.config(bg="#ff6e40")
Canvas1.config(bg="#FFFACD")
Canvas1.pack(expand=True,fill=BOTH)
headingFrame1 = Frame(Main_window,bg="#FFBB00",bd=5)
headingFrame1.place(relx=0.25,rely=0.1,relwidth=0.5,relheight=0.13)
labelFrame=Frame( Main_window,bg='black')
labelFrame.place(relx=0.1,rely=0.3,relwidth=0.8, relheight=0.5)
Label(labelFrame,text="%-20s%-10s%-
20s"%('ID','Score','Subject'),bg='black',fg='white').place(relx=0.07,rely=0.
1)
Label(labelFrame,text="-------------------------------------------------
-",bg='black',fg='white').place(relx=0.07,rely=0.2)
con=mysql.connector.connect(host="localhost",user="root",password="Tiaa123$"
,database="quizgame")
cur = con.cursor()
userTable = "scores"
Page 27 of 33
extractInfo="select * from {} where ID='{}' and
subject='{}'".format(userTable,uname,subject)
print (extractInfo)
y=0.3
try:
cur.execute(extractInfo)
data =cur.fetchall()
#messagebox ("Score",data)
#print(data)
for i in data:
Label(labelFrame,text="%-20s%-10s%-
20s"%(i[0],i[1],i[2]),bg='black',fg='white').place(relx=0.07,rely=y)
y=y+0.1
except:
messagebox.showinfo("Error", "Can't get the gameplayer data")
exitBTN= Button(Main_window,text="Exit",bg='#f7f1e3', fg='black',
command=Main_window.destroy)
exitBTN.place(relx=0.4,rely=0.9,relwidth=0.18,relheight=0.18)
Main_window.mainloop()
Page 28 of 33
Output:
Page 29 of 33
deleteUser.py:
from random import randint
from tkinter import messagebox
from tkinter import *
import tkinter as tk
import os
from PIL import ImageTk, Image
import mysql.connector
from Quizgame import *
tpwd=None
dUser = None
def adminl():
global Main_window, Canvas1,tpwd,dUser
Main_window = Tk()
Main_window.title("Delete User")
Main_window.minsize(width=400,height=400)
Main_window.geometry("600x500")
Canvas1 = Canvas(Main_window)
#Canvas1.config(bg="#ff6e40")
Canvas1.config(bg="#288BA8")
Canvas1.pack(expand=True,fill=BOTH)
headingFrame1 = Frame(Main_window,bg="#FFBB00",bd=5)
headingFrame1.place(relx=0.25,rely=0.1,relwidth=0.5,relheight=0.13)
labelFrame = Frame(Main_window,bg='black')
labelFrame.place(relx=0.1,rely=0.4,relwidth=0.8,relheight=0.4)
dUser = Entry(labelFrame)
dUser.place(relx=0.3,rely=0.35, relwidth=0.62, relheight=0.08)
#Submit Button
SubmitBtn = Button(Main_window,text="SUBMIT",bg='#d1ccc0',
fg='black',command=alogin)
SubmitBtn.place(relx=0.28,rely=0.9, relwidth=0.18,relheight=0.08)
quitBtn = Button(Main_window,text="Quit",bg='#f7f1e3', fg='black',
command=Main_window.destroy)
quitBtn.place(relx=0.53,rely=0.9, relwidth=0.18,relheight=0.08)
Main_window.mainloop()
def deleteUser(delU):
con=mysql.connector.connect(host="localhost",user="root",password="Tiaa123$"
,database="quizgame")
cur = con.cursor()
userTable = "scores"
extractInfo="delete from {} where id='{}'".format(userTable,delU)
extractInfo1="delete from {} where id='{}'".format ("gameplayer",delU)
#print(extractInfo)
try:
cur.execute(extractInfo)
cur.execute(extractInfo1)
con.commit();
messagebox.showinfo("Success", "User Delete Successfully")
except:
messagebox.showinfo("Error", "Can't get the data from DB")
Main_window.destroy()
def alogin():
global UName,tpwd,Canvas1,userTable,Main_window,dUser #con,cur,
suname = "admin"
spwd = tpwd.get()
delU = dUser.get()
if (delU=='admin'):
messagebox.showinfo("Error", "admin Usercannot be deleted")
Main_window.destroy()
else:
Page 31 of 33
#print ("workin progress for login uid=" ,suname ,"pwd=",spwd)
#need to check DB if the username and PWD is correct.
con=mysql.connector.connect(host="localhost",user="root",password="Tiaa123$"
,database="quizgame")
cur = con.cursor()
userTable = "gameplayer"
extractInfo="select * from {} where
id='{}'".format(userTable,suname)
print(extractInfo)
try:
cur.execute(extractInfo)
data =cur.fetchall()
#print (data)
if data[0][0]==suname:
if data[0][2]==spwd:
deleteUser(delU)
Main_window.destroy()
#play()
else:
messagebox.showinfo("Error", "You should be admin to
delete user")
Main_window.destroy()
else:
messagebox.showinfo("Error", "You should be admin to delete
user")
Main_window.destroy()
except:
messagebox.showinfo("Error", "Can't get the data from DB")
Main_window.destroy()
Page 32 of 33
Output:
BIBLOGRAPHY
1. https://www.mysql.com
2. https://pypi.org/project/Pillow/
3. https://docs.python.org/3/library/tkinter.html
4. https://www.w3schools.com/python/
5. Computer Science with Python (Textbook for Class XII) – Sumita
Arora
Page 33 of 33