目錄
1、設計思路
2、建立題庫
3、答題設計
4、GUI設計
本篇博文將使用Python代碼語言簡單撰寫一個輕松益智的小游戲,效果如下所示:

1、設計思路
本專案使用SQLite建立問答題庫,每道題包括4個選項答案(3個正確答案,1個錯誤答案),每道題都有一定分值,根據用戶的答題效率,自動計算出最后的答題成績,

2、建立題庫
使用SQLite資料庫建立題庫,本質上就是SQL陳述句,創建exam表,實作代碼如下所示:
#匯入SQLite驅動
import sqlite3
# 連接到SQLite資料庫,資料庫檔案是test.db
# 如果檔案不存在,會自動在當前目錄創建:
conn = sqlite3.connect('test2.db')
cursor = conn.cursor()# 創建一個Cursor:
#cursor.execute("delete from exam")
# 執行一條SQL陳述句,創建exam表:
cursor.execute('CREATE TABLE [exam] ([question] VARCHAR(80) NULL,[Answer_A] VARCHAR(1) NULL,[Answer_B] VARCHAR(1) NULL,[Answer_C] VARCHAR(1) NULL,[Answer_D] VARCHAR(1) NULL,[right_Answer] VARCHAR(1) NULL)')
# 繼續執行一條SQL陳述句,插入一條記錄:
cursor.execute("insert into exam (question, Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values ('哈雷慧星的平均周期為', '54年', '56年', '73年', '83年', 'C')")
cursor.execute("insert into exam (question, Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values ('夜郎自大中“夜郎”指的是現在哪個地方?', '貴州', '云南', '廣西', '福建', 'A')")
cursor.execute("insert into exam (question, Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values ('在中國歷史上是誰發明了麻藥', '孫思邈', '華佗', '張仲景', '扁鵲', 'B')")
cursor.execute("insert into exam (question, Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values ('京劇中花旦是指', '年輕男子', '年輕女子', '年長男子', '年長女子', 'B')")
cursor.execute("insert into exam (question, Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values ('籃球比賽每隊幾人?', '4', '5', '6', '7', 'B')")
cursor.execute("insert into exam (question, Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values ('在天愿作比翼鳥,在地愿為連理枝,講述的是誰的愛情故事?', '焦鐘卿和劉蘭芝', '梁山伯與祝英臺', '崔鶯鶯和張生', '楊貴妃和唐明皇', 'D')")
# 通過rowcount獲得插入的行數:
print(cursor.rowcount) #1
# 關閉Cursor:
cursor.close()
# 提交事務:
conn.commit()
# 關閉Connection:
conn.close()
3、答題設計
從建立好的題庫資料庫中讀取試題資訊,callNext()函式實作判斷用戶選擇答案的正誤,正確則加10分,錯誤不加分,并判斷用戶是否做完,如果沒做完則將下一題的題目資訊顯示到timu標簽,而4個選項顯示到radio1~ radio4這4個單選按鈕上;callResult()函式在GUI上顯示此時答題得分,實作代碼如下所示:
conn = sqlite3.connect('test2.db')
cursor = conn.cursor()
# 執行查詢陳述句:
cursor.execute('select * from exam')
# 獲得查詢結果集:
values = cursor.fetchall()
print(values)
print('記錄數:',len(values))
for k in range(len(values)):
print(k,values[k][0])
cursor.close()
conn.close()
def callNext():
global k
global score
useranswer=r.get()
print (r.get()) #獲取被選中單選按鈕變數值
if useranswer==values[k][5]:
showinfo("恭喜","恭喜你對了!")
score+=10
else:
showinfo("遺憾","遺憾你錯了!")
k=k+1
if k>=len(values):
showinfo("提示","題目做完了")
return
#顯示下一題
timu["text"]=values[k][0]
radio1["text"]=values[k][1]
radio2["text"]=values[k][2]
radio3["text"]=values[k][3]
radio4["text"]=values[k][4]
r.set('E')
def callResult():
showinfo("你的得分",str(score))
4、GUI設計
最后設計GUI,添加兩個Frame組件組件,實作選擇答案、確認和查看結果功能,實作代碼如下所示:
import tkinter
from tkinter import *
from tkinter.messagebox import *
root=tkinter.Tk()
root.title('Python智力問答游戲')
root.geometry("500x200")
r=tkinter.StringVar() #創建StringVar物件
r.set('E') #設定初始值為'E',初始沒選中
k=0
score=0
timu=tkinter.Label(root,text=values[k][0]) #題目
timu.pack()
f1 = Frame(root) #創建第1個Frame組件
f1.pack()
radio1=tkinter.Radiobutton(f1,variable=r,value='A',text=values[k][1])
radio1.pack()
radio2=tkinter.Radiobutton(f1,variable=r,value='B',text=values[k][2])
radio2.pack()
radio3=tkinter.Radiobutton(f1,variable=r,value='C',text=values[k][3])
radio3.pack()
radio4=tkinter.Radiobutton(f1,variable=r,value='D',text=values[k][4])
radio4.pack()
f2 = Frame(root) #創建第2個Frame組件
f2.pack()
Button(f2,text = '下一題',command=callNext).pack(side = LEFT)
Button(f2,text = '結 果',command=callResult).pack(side = LEFT)
root.mainloop()
關注微信公眾號,回復關鍵字: 智力問答小游戲,獲取原始碼~
CSDN認證博客專家
視覺/OpenCV
IoT/嵌入式
Python
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/147057.html
標籤:其他
上一篇:codeforces1426 E. Rock, Paper, Scissors(思維 || 最小費用最大流)
下一篇:js禁止打開控制臺
