溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

使用Python語(yǔ)言實(shí)現(xiàn)智力問(wèn)答小游戲功能

發(fā)布時(shí)間:2020-10-28 20:25:55 來(lái)源:億速云 閱讀:504 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

今天就跟大家聊聊有關(guān)使用Python語(yǔ)言實(shí)現(xiàn)智力問(wèn)答小游戲功能,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

使用Python語(yǔ)言實(shí)現(xiàn)智力問(wèn)答小游戲功能

1、設(shè)計(jì)思路

本項(xiàng)目使用SQLite建立問(wèn)答題庫(kù),每道題包括4個(gè)選項(xiàng)答案(3個(gè)正確答案,1個(gè)錯(cuò)誤答案)。每道題都有一定分值,根據(jù)用戶(hù)的答題效率,自動(dòng)計(jì)算出最后的答題成績(jī)。

使用Python語(yǔ)言實(shí)現(xiàn)智力問(wèn)答小游戲功能

2、建立題庫(kù)

使用SQLite數(shù)據(jù)庫(kù)建立題庫(kù),本質(zhì)上就是SQL語(yǔ)句,創(chuàng)建exam表,實(shí)現(xiàn)代碼如下所示:

#導(dǎo)入SQLite驅(qū)動(dòng)
import sqlite3 
# 連接到SQLite數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)文件是test.db
# 如果文件不存在,會(huì)自動(dòng)在當(dāng)前目錄創(chuàng)建:
conn = sqlite3.connect('test2.db')
cursor = conn.cursor()# 創(chuàng)建一個(gè)Cursor:
#cursor.execute("delete from exam")
# 執(zhí)行一條SQL語(yǔ)句,創(chuàng)建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)')
# 繼續(xù)執(zhí)行一條SQL語(yǔ)句,插入一條記錄:
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 ('夜郎自大中“夜郎”指的是現(xiàn)在哪個(gè)地方?', '貴州', '云南', '廣西', '福建', 'A')")
cursor.execute("insert into exam (question, Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values ('在中國(guó)歷史上是誰(shuí)發(fā)明了麻藥', '孫思邈', '華佗', '張仲景', '扁鵲', 'B')")
cursor.execute("insert into exam (question, Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values ('京劇中花旦是指', '年輕男子', '年輕女子', '年長(zhǎng)男子', '年長(zhǎng)女子', 'B')")
cursor.execute("insert into exam (question, Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values ('籃球比賽每隊(duì)幾人?', '4', '5', '6', '7', 'B')")
cursor.execute("insert into exam (question, Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values ('在天愿作比翼鳥(niǎo),在地愿為連理枝。講述的是誰(shuí)的愛(ài)情故事?', '焦鐘卿和劉蘭芝', '梁山伯與祝英臺(tái)', '崔鶯鶯和張生', '楊貴妃和唐明皇', 'D')")
# 通過(guò)rowcount獲得插入的行數(shù):
print(cursor.rowcount) #1
# 關(guān)閉Cursor:
cursor.close()
# 提交事務(wù):
conn.commit()
# 關(guān)閉Connection:
conn.close()

3、答題設(shè)計(jì)

從建立好的題庫(kù)數(shù)據(jù)庫(kù)中讀取試題信息,callNext()函數(shù)實(shí)現(xiàn)判斷用戶(hù)選擇答案的正誤,正確則加10分,錯(cuò)誤不加分。并判斷用戶(hù)是否做完,如果沒(méi)做完則將下一題的題目信息顯示到timu標(biāo)簽,而4個(gè)選項(xiàng)顯示到radio1~ radio4這4個(gè)單選按鈕上;callResult()函數(shù)在GUI上顯示此時(shí)答題得分,實(shí)現(xiàn)代碼如下所示:

conn = sqlite3.connect('test2.db')
cursor = conn.cursor()
# 執(zhí)行查詢(xún)語(yǔ)句:
cursor.execute('select * from exam')
# 獲得查詢(xún)結(jié)果集:
values = cursor.fetchall()
print(values)
 
print('記錄數(shù):',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("恭喜","恭喜你對(duì)了!")
  score+=10
 else:
  showinfo("遺憾","遺憾你錯(cuò)了!") 
 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設(shè)計(jì)

最后設(shè)計(jì)GUI,添加兩個(gè)Frame組件組件,實(shí)現(xiàn)選擇答案、確認(rèn)和查看結(jié)果功能,實(shí)現(xiàn)代碼如下所示:

import tkinter
from tkinter import *
from tkinter.messagebox import *
 
root=tkinter.Tk()
root.title('Python智力問(wèn)答游戲')
root.geometry("500x200")
r=tkinter.StringVar()						#創(chuàng)建StringVar對(duì)象
r.set('E') 							#設(shè)置初始值為'E',初始沒(méi)選中
k=0
score=0
timu=tkinter.Label(root,text=values[k][0])      #題目
timu.pack()
f1 = Frame(root)						#創(chuàng)建第1個(gè)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)						#創(chuàng)建第2個(gè)Frame組件
f2.pack()
Button(f2,text = '下一題',command=callNext).pack(side = LEFT)
Button(f2,text = '結(jié) 果',command=callResult).pack(side = LEFT)
root.mainloop()

看完上述內(nèi)容,你們對(duì)使用Python語(yǔ)言實(shí)現(xiàn)智力問(wèn)答小游戲功能有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI