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


Posted in Python onOctober 13, 2020

本篇博文将使用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 智力问答小游戏内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python标准日志模块logging的使用方法
Nov 01 Python
10种检测Python程序运行时间、CPU和内存占用的方法
Apr 01 Python
Python素数检测实例分析
Jun 15 Python
python计算一个序列的平均值的方法
Jul 11 Python
浅谈python 四种数值类型(int,long,float,complex)
Jun 08 Python
python文件名和文件路径操作实例
Sep 29 Python
详解python string类型 bytes类型 bytearray类型
Dec 16 Python
python入门:这篇文章带你直接学会python
Sep 14 Python
python多线程高级锁condition简单用法示例
Nov 07 Python
Python进程间通信multiprocess代码实例
Mar 18 Python
Python基于paramunittest模块实现excl参数化
Apr 26 Python
Python 如何展开嵌套的序列
Aug 01 Python
Django Auth用户认证组件实现代码
Oct 13 #Python
通过代码实例了解Python3编程技巧
Oct 13 #Python
Python SQLAlchemy库的使用方法
Oct 13 #Python
Pycharm github配置实现过程图解
Oct 13 #Python
详解numpy.ndarray.reshape()函数的参数问题
Oct 13 #Python
Python求区间正整数内所有素数之和的方法实例
Oct 13 #Python
python关于倒排列的知识点总结
Oct 13 #Python
You might like
PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
2013/04/08 PHP
详解php魔术方法(Magic methods)的使用方法
2016/02/14 PHP
php实现留言板功能
2017/03/05 PHP
Ext对基本类型的扩展 ext,extjs,format
2010/12/25 Javascript
基于jQuery的星级评分插件
2011/08/12 Javascript
将list转换为json失败的原因
2013/12/17 Javascript
javascript中expression的用法整理
2014/05/13 Javascript
JS实现网页Div层Clone拖拽效果
2015/09/26 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
原生JS封装Ajax插件(同域、jsonp跨域)
2016/05/03 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(下)
2017/04/21 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
2017/07/11 Javascript
详解VUE单页应用骨架屏方案
2019/01/17 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
vue 页面跳转的实现方式
2021/01/12 Vue.js
在Python中使用PIL模块处理图像的教程
2015/04/29 Python
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
Python网络爬虫出现乱码问题的解决方法
2017/01/05 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
2018/05/10 Python
python列表list保留顺序去重的实例
2018/12/14 Python
django的settings中设置中文支持的实现
2019/04/28 Python
PyQt5 QTable插入图片并动态更新的实例
2019/06/18 Python
Python基本类型的连接组合和互相转换方式(13种)
2019/12/16 Python
Python标准库json模块和pickle模块使用详解
2020/03/10 Python
Python-jenkins 获取job构建信息方式
2020/05/12 Python
Python通过队列来实现进程间通信的示例
2020/10/14 Python
Python lxml库的简单介绍及基本使用讲解
2020/12/22 Python
CSS3常用的几种颜色渐变模式总结
2016/11/18 HTML / CSS
详解Html5微信支付爬坑之路
2018/07/24 HTML / CSS
工作过失检讨书
2014/02/23 职场文书
机电专业毕业生求职信
2014/07/01 职场文书
贷款委托书
2014/08/01 职场文书
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
2014年实习期工作总结
2014/11/27 职场文书
婚姻出轨保证书
2015/05/08 职场文书