广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python实现问题回答小游戏
  • 355
分享到

Python实现问题回答小游戏

2024-04-02 19:04:59 355人浏览 薄情痞子

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.font


class 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, sys
from pygame.locals import *
from question import Question
from 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 = 1


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


# 按钮
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.font


class 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

“落霞与孤鹜齐飞”的下一句是?

携酒对情人

秋水共长天一色

抱琴开野室

林塘花月下

以上就是python实现问题回答小游戏的详细内容,更多关于Python问题回答游戏的资料请关注编程网其它相关文章!

--结束END--

本文标题: Python实现问题回答小游戏

本文链接: https://www.lsjlt.com/news/159598.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python实现问题回答小游戏
    目录读取问题绘制回答面板回答问题问题切换完整代码读取问题 如下所示,我们在文本中写了一个问题,然后将其读取出来。 “黄河远上白云间,一片孤城万仞山。”的作者是谁? 王之涣 李白 白...
    99+
    2022-11-12
  • 如何用Python实现问题回答小游戏
    这篇文章将为大家详细讲解有关如何用Python实现问题回答小游戏,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。读取问题如下所示,我们在文本中写了一个问题,然后将其读取出来。“黄河远上白云间,...
    99+
    2023-06-22
  • python 答题小游戏
    #^_^coding=gbk ^_^ import linecache #数据分割 f = [ x.replace('\n','') for x in linecache.getlines('a.txt')]&...
    99+
    2023-01-31
    小游戏 python
  • python实现21点小游戏
    用python实现21点小游戏,供大家参考,具体内容如下 from random import shuffle import random import numpy as np from sys import...
    99+
    2022-06-02
    python 21点游戏
  • Python实现24点小游戏
    本文实例为大家分享了Python实现24点小游戏的具体代码,供大家参考,具体内容如下 玩法:通过加减乘除操作,小学生都没问题的。 源码分享: import os import ...
    99+
    2022-11-12
  • Python实现滑雪小游戏
    本文实例为大家分享了Python实现滑雪小游戏的具体代码,供大家参考,具体内容如下 源码分享: import sys import cfg import pygame imp...
    99+
    2022-11-12
  • python小游戏实现代码
    早上逛CSDN首页就见到这么一篇教程。看了一下很有意思,就马上动手实现了一下。看看效果吧: 完整代码: # -*- coding: utf-8 -*- # 1 - Import library import pygame from ...
    99+
    2023-01-31
    小游戏 代码 python
  • Python游戏开发之魔塔小游戏的实现
    前言 这一期我们继续完善我们的魔塔小游戏。 废话不多说,让我们愉快地开始吧~ 开发工具 Python版本: 3.7.4 相关模块: cpgames模块; 以及一些pytho...
    99+
    2022-11-13
  • Python实现简单2048小游戏
    简单的2048小游戏 不多说,直接上图,这里并未实现GUI之类的,需要的话,可自行实现: 接下来就是代码模块,其中的2048游戏原来网络上有很多,我就不详细写上去了,都写在注释里面了。唯一要注意的就是需要先去了解一...
    99+
    2022-06-02
    python 2048 游戏
  • Python实现消消乐小游戏
    本文实例为大家分享了Python实现消消乐小游戏的具体代码,供大家参考,具体内容如下 玩法:三个相连就能消除 源码分享: import os import sys import...
    99+
    2022-11-12
  • Python实现打乒乓小游戏
    本文实例为大家分享了Python实现打乒乓小游戏的具体代码,供大家参考,具体内容如下 源码奉上: import sys import cfg import pygame fro...
    99+
    2022-11-12
  • Python实现猜数字小游戏
    首先需求一共有五次猜测机会,在五次机会中才对就赢了,结束游戏,五次都猜错就输了,也结束游戏。首先先画个草图,这是我画的草图 再根据草图编写一个窗口,一个Label,一个Entry,...
    99+
    2022-11-12
  • 用python实现弹球小游戏
    目录一、弹球游戏代码 二、程序结果 总结一、弹球游戏代码  下文是tkinter的应用实例,实现弹球游戏,通过<--和-->件移动平板接球。...
    99+
    2022-11-13
  • python怎么实现flappy bird小游戏
    本篇内容介绍了“python怎么实现flappy bird小游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!开发工具:Pytho...
    99+
    2023-06-29
  • 用python实现打砖块小游戏
    本文实例为大家分享了python实现打砖块小游戏的具体代码,供大家参考,具体内容如下 开发益智的打砖块小游戏,你可以试一下能打几块 import pygame,sys,time,ra...
    99+
    2022-11-11
  • python实现简易猜数小游戏
    目录程序思想:具体代码:近几天闲着没事开始学了些python,看了看之前写过的代码,把写过的基础的几个程序写进博客,今天是第一个。一个可以说简单的不能再简单的小程序—&m...
    99+
    2022-11-12
  • python实现一个围棋小游戏
    一道Python课作业题,大致如下: 编写一个类: 该类Building应具有以下方法: ●一个构造函数,它根本不接受任何参数(除了通常的`self`) ●setHeightRand...
    99+
    2022-11-13
    python围棋程序 python围棋算法
  • 基于Python实现骰子小游戏
    目录导语一、环境准备 二、代码展示三、效果展示导语 哈喽!大家晚上好,我是木木子吖,很久没给大家更新游戏代码的类型啦~ 骰子,是现在娱乐场所最常见的一种玩乐项目。一般骰子分...
    99+
    2023-02-28
    Python实现骰子游戏 Python骰子游戏 Python游戏
  • Python+Pygame实现接小弹珠游戏
    目录游戏介绍效果展示游戏代码项目资源游戏介绍 小学生都不一定会晚的游戏,用挡板接住会反弹的小球,随着次数的增多,速度变快,分数增多。 效果展示 游戏代码 import pygame...
    99+
    2022-12-27
    Python Pygame接弹珠游戏 Python Pygame接弹珠 Python Pygame 游戏 Python 接弹珠
  • 怎么用Python实现2048小游戏
    这篇文章主要介绍怎么用Python实现2048小游戏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、开发环境Python版本:3.6.4相关模块:pygame模块;以及一些Python自带的模块。二、环境搭建安装P...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作