如何用Python实现问题回答小游戏
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这篇文章将为大家详细讲解有关如何用Python实现问题回答小游戏,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。读取问题如下所示,我们在文本中写了一个问
千家信息网最后更新 2025年01月31日如何用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安全错误
数据库的锁怎样保障安全
监控数据写进数据库
浙南科技城互联网中心
数据库连接报错12170
数据库系统三级模式结构优缺点
设计数据库统计学生成绩
查看服务器是否开启
飞鸿杯网络安全攻防赛
简单的软件开发合同
金山区使用软件开发口碑推荐
qq加群太多服务器维护
淮安节能刀片服务器直销
万普服务器下载后打不开
网络安全5分钟小剧本
自建smtp服务器
软件开发难度测量
局域网架设rtsp服务器
德惠有名的网络技术服务参考价格
网络安全等保基本要求
租用服务器ip地址怎么填
如何获取数据库中的数据
僵尸毁灭工程重启服务器终止
计算机网络技术获奖情况怎么写
软件开发商与客户的合同
普陀区网络技术开发售后服务
奥的斯电梯服务器如何改参数
数据库冻结列有什么作用
数据库比较基础的知识点
柏羽互联网科技有限公司
微软服务器连接不上
杭州ktv服务器回收公司