如何用Python实现问题回答小游戏
发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章将为大家详细讲解有关如何用Python实现问题回答小游戏,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。读取问题如下所示,我们在文本中写了一个问
千家信息网最后更新 2024年11月11日如何用Python实现问题回答小游戏
这篇文章将为大家详细讲解有关如何用Python实现问题回答小游戏,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
读取问题
如下所示,我们在文本中写了一个问题,然后将其读取出来。
"黄河远上白云间,一片孤城万仞山。"的作者是谁?
王之涣
李白
白居易
杜甫
file = open("1.txt", "r")question_coll = file.readlines()file.close()print(file)
运行之后发现报错,查询之后发现编码格式不正确。
设置了读取的编码格式发现可以读取文本的内容
file = open("1.txt", encoding='utf-8')
绘制回答面板
为了方便读取,新建一个类来储存文件中的问题
# 问题类class Question: # 回答列表 answer_question = [] # 正确答案 answer_index = 1 """问题类""" def __init__(self, question): self.question = question
导入问题,将文件中的问题保存在qustion中
from question import Question
因为文件的格式是固定的以6为一个问题的所有行数。
将问题
questionList = []for i in range(int(len(question_coll) / 6)): que_all = question_coll[i * 6: i * 6 + 6] que = Question(que_all[0].rstrip()) que.answer_question = [que_all[1].rstrip(), que_all[2].rstrip(), que_all[3].rstrip(), que_all[4].rstrip()] que.answer_index = int(que_all[5].rstrip()) questionList.append(que)
封装屏幕上显示文字的打印
def draw_text(window_screen, font_size, content, starting_x, starting_y, text_color=WHITE, bg_color=BLACK): # 绘制文字 # 设置字体 font = pygame.font.SysFont("方正粗黑宋简体", font_size) text1 = font.render(content, True, text_color, bg_color) window_screen.blit(text1, (starting_x, starting_y))
显示问题
draw_text(screen, 48, "知识竞赛", 180, 20)while True: for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() tips = "当前一共有" + str(len(questionList)) + "个问题,目前是第" + str(index) + "个。" draw_text(screen, 18, tips, 20, 140, bg_color=WHITE, text_color=BLACK) current_que = questionList[index - 1] question_main = "问题" + str(index) + ". " + current_que.question draw_text(screen, 16, question_main, 20, 200, bg_color=WHITE, text_color=BLACK) for i in range(len(current_que.answer_question)): option = str(i + 1) + ". " + current_que.answer_question[i] draw_text(screen, 16, option, 40, 260 + i * 40, bg_color=WHITE, text_color=BLACK) pygame.display.update()
这样就实现了问题的显示
回答问题
首先我们给出提示,为了方便确认问题是否回答,答案正确与否,我们在问题类中添加变量
# 是否回答 answeredFlg = False # 回答是否正确 rightFlg = False
根据这些变量设置文字。
if current_que.answeredFlg: if current_que.rightFlg: print("回答正确,是" + current_que.answer_question[current_que.answer_index]) else: print("回答错误,正确答案是" + current_que.answer_question[current_que.answer_index]) else: draw_text(screen, 16, "请按下1、2、3、4来回答答案", 40, 460, bg_color=WHITE, text_color=RED)
如果按下按键,根据答案的正确与否给与响应的提示。
if current_que.answeredFlg: if current_que.rightFlg: str1 = "回答正确,是" + current_que.answer_question[current_que.answer_index - 1] draw_text(screen, 16, str1, 40, 460, bg_color=WHITE, text_color=GREEN) else: str1 = "回答错误,正确答案是" + current_que.answer_question[current_que.answer_index - 1] draw_text(screen, 16, str1, 40, 460, bg_color=WHITE, text_color=RED) else: draw_text(screen, 16, "请按下1、2、3、4来回答答案", 40, 460, bg_color=WHITE, text_color=RED)
问题切换
为了方便用户切换问题,在窗口上添加对应的按钮。
import pygame.fontclass Button: def __init__(self, screen, msg, start_x, start_y): # 设置按钮的尺寸和其他属性 self.screen = screen self.width, self.height = 200, 50 self.button_color = (0, 255, 0) self.text_color = (255, 255, 255) self.font = pygame.font.SysFont("方正粗黑宋简体", 20) # 创建按钮的rect对象,并使其居中 self.rect = pygame.Rect(0, 0, self.width, self.height) self.rect.left = start_x self.rect.right = start_y # 按钮的标签只需创建一次 self._prep_msg(msg) def _prep_msg(self, msg): """将msg渲染为图像,并让按钮居上""" self.msg_image = self.font.render(msg, True, self.text_color, self.button_color) self.msg_image_rect = self.msg_image.get_rect() self.msg_image_rect.center = self.rect.center def draw_button(self): # 绘制一个用颜色填充的按钮,在绘制文本 self.screen.fill(self.button_color, self.rect) self.screen.blit(self.msg_image, self.msg_image_rect)
answer_question.py
btn1 = Button(screen, "next", 300, 500) btn1.draw_button()
修改对应的按钮颜色,并添加上一个按钮。
通过是否回答和是否有下一个或者上一个控制按钮的显示
if current_que.answeredFlg and index < len(questionList): btn1 = Button(screen, "下一个", 300, 500) btn1.draw_button() if index > 1: btn2 = Button(screen, "上一个", 50, 500) btn2.draw_button()
给按钮添加事件
if event.type == pygame.MOUSEBUTTONDOWN: mouse_pos = pygame.mouse.get_pos() if btn1.rect.collidepoint(mouse_pos): if current_que.answeredFlg and index < len(questionList): index += 1 if btn2.rect.collidepoint(mouse_pos) and index > 1: index -= 1
完整代码
answer_question.py 主程序
import pygame, sysfrom pygame.locals import *from question import Questionfrom button import Button# 读取问题file = open("1.txt", encoding='utf-8')question_coll = file.readlines()file.close()questionList = []for i in range(int(len(question_coll) / 6)): que_all = question_coll[i * 6: i * 6 + 6] que = Question(que_all[0].rstrip()) que.answer_question = [que_all[1].rstrip(), que_all[2].rstrip(), que_all[3].rstrip(), que_all[4].rstrip()] que.answer_index = int(que_all[5].rstrip()) questionList.append(que)# 颜色变量WHITE = (255, 255, 255)BLACK = (0, 0, 0)RED = (255, 0, 0)GREEN = (0, 255, 0)# 初始化面板pygame.init()screen = pygame.display.set_mode((600, 600))pygame.display.set_caption("知识竞赛")# 当前问题index = 1def draw_text(window_screen, font_size, content, starting_x, starting_y, text_color=WHITE, bg_color=BLACK): # 绘制文字 # 设置字体 font = pygame.font.SysFont("方正粗黑宋简体", font_size) text1 = font.render(content, True, text_color, bg_color) window_screen.blit(text1, (starting_x, starting_y))# 按钮btn1 = Button(screen, "下一个", 300, 500)btn2 = Button(screen, "上一个", 50, 500)while True: answer_index = 0 # 填充白色 screen.fill(WHITE) draw_text(screen, 48, "知识竞赛", 180, 20) tips = "当前一共有" + str(len(questionList)) + "个问题,目前是第" + str(index) + "个。" draw_text(screen, 18, tips, 20, 140, bg_color=WHITE, text_color=BLACK) current_que = questionList[index - 1] for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() if event.type == KEYDOWN: if event.key == K_1: answer_index = 1 if event.key == K_2: answer_index = 2 if event.key == K_3: answer_index = 3 if event.key == K_4: answer_index = 4 if event.type == pygame.MOUSEBUTTONDOWN: mouse_pos = pygame.mouse.get_pos() if btn1.rect.collidepoint(mouse_pos): if current_que.answeredFlg and index < len(questionList): index += 1 if btn2.rect.collidepoint(mouse_pos) and index > 1: index -= 1 question_main = "问题" + str(index) + ". " + current_que.question draw_text(screen, 16, question_main, 20, 200, bg_color=WHITE, text_color=BLACK) for i in range(len(current_que.answer_question)): option = str(i + 1) + ". " + current_que.answer_question[i] draw_text(screen, 16, option, 40, 260 + i * 40, bg_color=WHITE, text_color=BLACK) if answer_index != 0: current_que.answeredFlg = True current_que.rightFlg = answer_index == current_que.answer_index if current_que.answeredFlg: if current_que.rightFlg: str1 = "回答正确,是" + current_que.answer_question[current_que.answer_index - 1] draw_text(screen, 16, str1, 40, 460, bg_color=WHITE, text_color=GREEN) else: str1 = "回答错误,正确答案是" + current_que.answer_question[current_que.answer_index - 1] draw_text(screen, 16, str1, 40, 460, bg_color=WHITE, text_color=RED) else: draw_text(screen, 16, "请按下1、2、3、4来回答答案", 40, 460, bg_color=WHITE, text_color=RED) if current_que.answeredFlg and index < len(questionList): btn1.draw_button() if index > 1: btn2.draw_button() pygame.display.update()
问题类 qustion.py
# 问题类class Question: """问题类""" # 回答列表 answer_question = [] # 正确答案 answer_index = 1 # 是否回答 answeredFlg = False # 回答是否正确 rightFlg = False def __init__(self, question): self.question = question
按钮类 button.py
import pygame.fontclass Button: def __init__(self, screen, msg, start_x, start_y): # 设置按钮的尺寸和其他属性 self.screen = screen self.width, self.height = 200, 50 self.button_color = (255, 192, 128) self.text_color = (255, 255, 255) self.font = pygame.font.SysFont("方正粗黑宋简体", 20) # 创建按钮的rect对象,并使其居中 self.rect = pygame.Rect(0, 0, self.width, self.height) self.rect.left = start_x self.rect.top = start_y # 按钮的标签只需创建一次 self._prep_msg(msg) def _prep_msg(self, msg): """将msg渲染为图像,并让按钮居上""" self.msg_image = self.font.render(msg, True, self.text_color, self.button_color) self.msg_image_rect = self.msg_image.get_rect() self.msg_image_rect.center = self.rect.center def draw_button(self): # 绘制一个用颜色填充的按钮,在绘制文本 self.screen.fill(self.button_color, self.rect) self.screen.blit(self.msg_image, self.msg_image_rect)
问题文本文件 1.txt
"黄河远上白云间,一片孤城万仞山。"的作者是谁?
王之涣
李白
白居易
杜甫
1
"落霞与孤鹜齐飞"的下一句是?
携酒对情人
秋水共长天一色
抱琴开野室
林塘花月下
2
关于如何用Python实现问题回答小游戏就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
问题
按钮
答案
文本
知识
文件
文字
颜色
方正
内容
变量
格式
错误
竞赛
小游戏
作者
只需
图像
字体
对象
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
华为软件开发乱不乱
北京无时限网络技术有限公司
软件开发中的se是什么
仪器仪表行业 年报数据库
hpp2000服务器更换硬盘
不想做软件开发了可以做什么
怎么做db数据库
足球经理数据库能力值
介绍网络安全部门的人
濉溪县软件开发技术项目实训中心
西南软件开发专业大学排名
mc服务器如何取消管理员
数据库视图存储在哪里找
计算机网络技术(大数据)
梦幻挤服务器
云服务器商用的管理软件
一财软件开发
国税网络安全周总结
未成年的网络安全
网易mc服务器ip被封了
性能测试 软件开发
冒险小分队只有一个服务器吗
php访问数据库的技术
数据库调优是dba
饥荒如何将本地模组显示在服务器
手表鉴定网络安全
数据库读取数据用到哪些方法
一财软件开发
鹏城科技互联网
温州吉家软件开发有限公司电话