Python语言编写智力问答小游戏功能

2020-10-13 0 957

本篇博文将使用Python代码语言简单编写一个轻松益智的小游戏,效果如下所示:

Python语言编写智力问答小游戏功能

1、设计思路

本项目使用SQLite建立问答题库,每道题包括4个选项答案(3个正确答案,1个错误答案)。每道题都有一定分值,根据用户的答题效率,自动计算出最后的答题成绩。

Python语言编写智力问答小游戏功能

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()

到此这篇关于Python语言编写智力问答小游戏功能的文章就介绍到这了,更多相关Python 智力问答小游戏内容请搜索自学编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持自学编程网!

遇见资源网 Linux Python语言编写智力问答小游戏功能 http://www.ox520.com/29594.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务