基于sqlite3、python gui的猜谜游戏

Builder.py是基于sqlite3,python gui的猜谜游戏 

猜谜游戏

2021.9.25

1、上传了数据库的备用库

2、新增未选中提示框

3、新增是否重新游戏的功能 用到了easygui的ccbox返回True or False来进行判断

4、新增数据库为空时,自动插入数据的功能

5、优化了一下代码结构

【bug修复】

1、修复了弹出未选中提示框后题目切到下一题的问题

2、修复了重复游戏分数累加的问题

重新游戏选择界面

# -*- conding:utf-8 -*-
import sqlite3
import tkinter
from tkinter import *
from tkinter.messagebox import *
from easygui import ccbox


def opendb():
    conn = sqlite3.connect('test2.db')
    cursor = conn.execute(
        "create table if not exists [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)")
    return cursor, conn


def showalldb():
    # print("--处理后的数据--")
    hel = opendb()
    cur = hel[1].cursor()
    cur.execute("select * from exam")
    res = cur.fetchall()
    cur.close()
    return res


# 生成试题库
def shiti():
    # welcome = """---开始添加...---"""
    # print(welcome)
    hel = opendb()
    hel[1].execute(
        "insert into exam(question,Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values('11有多重','50g','40g','30g','动态变化','D')")
    hel[1].execute(
        "insert into exam(question,Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values('焦糖有多重','50g','40g','30g','动态变化','A')")
    hel[1].execute(
        "insert into exam(question,Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values('布丁有多重','50g','40g','30g','动态变化','C')")
    hel[1].execute(
        "insert into exam(question,Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values('秋叶有多重','50g','40g','30g','动态变化','B')")
    hel[1].execute(
        "insert into exam(question,Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values('秋葵有多重','50g','40g','30g','动态变化','D')")
    hel[1].commit()
    # print('数据添加......')
    showalldb()
    hel[1].close()


def callnext():
    global k
    global score
    useranswer = r.get()
    print("你选择的是", r.get(), '正确答案是', values[k][5])
    if useranswer == 'E':
        showinfo(title="警告!", message="warning:请进行选择")
    elif useranswer == values[k][5]:
        showinfo(title="回答正确!", message="回答正确!")
        score += 10
        k = k + 1
    else:
        showinfo(title="回答错误!", message="回答错误!")
        k = k + 1
    # print("k的值是...", k)
    if k == len(values):
        # showinfo(title="题目回答完毕", message=("题目回答完毕!\n你的总分是: %d\n 是否重新开始游戏?" % score))
        flag = ccbox(msg=("题目回答完毕!\n你的总分是: %d\n是否重新开始游戏?" % score), title='题目回答完毕', choices=('确定', '退出'), image=None)
        # 重置题目和分数
        if flag:
            k = 0
            score = 0
        else:
            closewin()
            return
            # 这里遍历赋值去显示新题目
    timu["text"] = '标题:', values[k][0]
    radio1["text"] = '1、', values[k][1]
    radio2["text"] = '2、', values[k][2]
    radio3["text"] = '3、', values[k][3]
    radio4["text"] = '4、', values[k][4]
    r.set('E')


def callresult():
    # 打印出分数窗口用的
    showinfo("当前总分:", str(score))


def closewin():
    root.destroy()


if __name__ == "__main__":
    root = tkinter.Tk()
    root.title('问答游戏')
    root.geometry("500x200")
    values = showalldb()  # 题库内容,列表嵌套了元组,k是列表索引,0是元组索引, 每一个列表里有5项
    if len(values) == 0:
        print("当前题库为空,正在插入数据....")
        shiti()
    if len(values) != 0:
        print("题目一共有%d题" % (len(values)))
        r = tkinter.StringVar()
        r.set('E')  # 玩家选的默认值是E,也就是不选中提交
        k = 0
        score = 0
        timu = tkinter.Label(root, text=('题目: ', values[k][0]))  # 标题
        timu.pack()
        f1 = Frame(root)
        f1.pack()
        radio1 = tkinter.Radiobutton(f1, variable=r, value='A', text=('1、', values[k][1]))
        radio1.pack()
        radio2 = tkinter.Radiobutton(f1, variable=r, value='B', text=('2、', values[k][2]))
        radio2.pack()
        radio3 = tkinter.Radiobutton(f1, variable=r, value='C', text=('3、', values[k][3]))
        radio3.pack()
        radio4 = tkinter.Radiobutton(f1, variable=r, value='D', text=('4、', values[k][4]))
        radio4.pack()
        f2 = Frame(root)
        f2.pack()
        Button(f2, text="下一题", command=callnext).pack(side=LEFT)
        Button(f2, text="结果", command=callresult).pack(side=RIGHT)
        Button(f2, text="关闭", command=closewin).pack(side=RIGHT)
    root.mainloop()

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一身正气z

打赏随心就好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值