编程新小白 2024-03-24 18:03 采纳率: 33.3%
浏览 1

Trivia类编程存在的一些问题

询问一下,关于readlines()函数怎么使用才不会使得输出到窗口上的内容是白板?编码是同类型,一样为”GBK“,是在做Trivia类遇到的难题


import pygame
import sys
from pygame.locals import *


def print_text(font, x, y, text, color=(255, 255, 255), shadow=True):
    if shadow:
        imgText = font.render(text, True, (0, 0, 0))
        screen.blit(imgText, (x - 2, y - 2))
    imgText = font.render(text, True, color)
    screen.blit(imgText, (x, y))


# 初始化Trivia
class Trivia(object):
    def __init__(self, filename):
        self.data = []
        self.current = 0
        self.total = 0
        self.correct = 0
        self.score = 0
        self.scored = False
        self.failed = False
        self.wronganswer = 0  # wronganswer
        self.colors = [white, white, white, white] 

        with open("demo_text.txt", "r", encoding='gbk') as f:
            trivia_data = f.readlines()
            f.close()

        for text_line in trivia_data:
            self.data.append(text_line.strip())
            self.total += 1

    def show_question(self):
        print_text(font1, 210, 5, "TRIVIA GAME")
        print_text(font2, 190, 500 - 20, "Press Keys(1-4) TO Answer", purple)
        print_text(font2, 530, 5, "SCORE", purple)
        print_text(font2, 550, 25, str(self.score), purple)

        self.correct = int(self.data[self.current + 5])
        question = int(self.current / 6)
        print_text(font1, 5, 80, "QUESTION" + str(question + 1))
        print_text(font2, 20, 120, self.data[self.current], yellow)

        if self.scored:
            self.colors = [white, white, white, white]
            self.colors[self.correct - 1] = green
            print_text(font1, 230, 380, "CORRECT!", green)
            print_text(font2, 170, 420, "Press Enter For Next Question", green)
        elif self.failed:
            self.colors = [white, white, white, white]
            self.colors[self.wronganswer - 1] = red
            self.colors[self.correct - 1] = green
            print_text(font1, 220, 380, "INCORRECT!", red)
            print_text(font2, 170, 420, "Press Enter For Next Question", red)

        # 显示答案
        print_text(font1, 5, 170, "Answers")
        print_text(font2, 20, 210, "1 - " + self.data[self.current + 1], self.colors[0])
        print_text(font2, 20, 240, "2 - " + self.data[self.current + 2], self.colors[1])
        print_text(font2, 20, 270, "3 - " + self.data[self.current + 3], self.colors[2])
        print_text(font2, 20, 300, "4 - " + self.data[self.current + 4], self.colors[3])

    def next_question(self):
        if self.scored or self.failed:
            self.scored = False
            self.failed = False
            self.correct = 0
            self.colors = [white, white, white, white]
            self.current += 6
            if self.current >= self.total:
                self.current = 0

    def handle_input(self, number):
        if not self.scored and not self.failed:
            if number == self.correct:
                self.scored = True
                self.score += 1
            else:
                self.failed = True
                self.wronganswer = number


if __name__ == "__main__":
    # 一些初始化操作
    pygame.init()
    screen = pygame.display.set_mode((600, 500))
    pygame.display.set_caption("测试")
    font1 = pygame.font.Font(None, 40)
    font2 = pygame.font.Font(None, 24)
    white = 255, 255, 255
    cyan = 0, 255, 255
    yellow = 255, 255, 0
    purple = 255, 0, 255
    green = 0, 255, 0
    red = 255, 0, 0

    trivia = Trivia("demo_text.txt")
    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                sys.exit()
            elif event.type == KEYUP:
                if event.key == pygame.K_ESCAPE:
                    sys.exit()
                elif event.key == pygame.K_1:
                    trivia.handle_input(1)
                elif event.key == pygame.K_2:
                    trivia.handle_input(2)
                elif event.key == pygame.K_3:
                    trivia.handle_input(3)
                elif event.key == pygame.K_4:
                    trivia.handle_input(4)
                elif event.key == pygame.K_RETURN:
                    trivia.next_question()

        # 清除屏幕
        screen.fill((0, 0, 200))
        # 显示问题
        trivia.show_question()
        pygame.display.update()

运行情况:

img


编码一致,但是原文本有中文,然后输出变成这样的情况

  • 写回答

1条回答 默认 最新

  • 码农阿豪 Java领域优质创作者 2024-03-24 18:03
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题:关于readlines()函数怎么使用才不会使得输出到窗口上的内容是白板? 回答: readlines()函数将文件的所有行读取到一个列表中,并将列表返回。在本例中,readlines()函数被用于从文件中读取Trivia游戏的问题和答案。 如果输出到窗口上的内容是白板,问题可能是出在以下几个方面: 1.文件编码问题:请确保文件和Python脚本的编码类型相同。可以使用Notepad++等编辑器查看文件的编码类型。在打开文件时,请指定文件的编码类型。 with open("demo_text.txt", "r", encoding='gbk') as f:
    trivia_data = f.readlines()
    f.close()
    

    2.代码逻辑问题:请检查代码逻辑。在此例中,show_question()方法和next_question()方法用于显示问题和处理下一个问题。如果这两个方法的逻辑出现问题,可能会导致输出的内容为空白。 3.屏幕更新问题:请确保在输出后更新了屏幕。在每次输出后,使用pygame.display.update()方法更新屏幕。 下面是一个完整的示例代码,其中readlines()函数用于读取文件: import pygame from pygame.locals import * pygame.init() screen = pygame.display.set_mode((640, 480)) font1 = pygame.font.Font(None, 36) font2 = pygame.font.Font(None, 24) white = (255, 255, 255) yellow = (255, 255, 0) purple = (255, 0, 255) green = (0, 255, 0) red = (255, 0, 0) class Trivia(object): def init(self, filename): self.data = [] self.current = 0 self.total = 0 self.correct = 0 self.score = 0 self.scored = False self.failed = False self.wronganswer = 0 self.colors = [white, white, white, white] with open("demo_text.txt", "r", encoding='gbk') as f: trivia_data = f.readlines() f.close() for text_line in trivia_data: self.data.append(text_line.strip()) self.total += 1 def show_question(self): print_text(font1, 210, 5, "TRIVIA GAME") print_text(font2, 190, 500 - 20, "Press Keys(1-4) TO Answer", purple) print_text(font2, 530, 5, "SCORE", purple) print_text(font2, 550, 25, str(self.score), purple) self.correct = int(self.data[self.current + 5]) question = int(self.current / 6) print_text(font1, 5, 80, "QUESTION" + str(question + 1)) print_text(font2, 20, 120, self.data[self.current], yellow) if self.scored: self.colors = [white, white, white, white] self.colors[self.correct - 1] = green print_text(font1, 230, 380, "CORRECT!", green) print_text(font2, 170, 420, "Press Enter For Next Question", green) elif self.failed: self.colors = [white, white, white, white] self.colors[self.wronganswer - 1] = red self.colors[self.correct - 1] = green print_text(font1, 220, 380, "INCORRECT!", red) print_text(font2, 170, 420, "Press Enter For Next Question", red) # 显示答案 print_text(font1, 5, 170, "Answers") print_text(font2, 20, 210, "1 - " + self.data[self.current + 1], self.colors[0]) print_text(font2, 20, 240, "2 - " + self.data[self.current + 2], self.colors[1]) print_text(font2, 20, 270, "3 - " + self.data[self.current + 3], self.colors[2]) print_text(font2, 20, 300, "4 - " + self.data[self.current + 4], self.colors[3]) def next_question(self): if self.scored or self.failed: self.scored = False self.failed = False self.correct = 0 self.colors = [white, white, white, white] self.current += 6 if self.current >= self.total: self.current = 0 def handle_input(self, number): if not self.scored and not self.failed: if number == self.correct: self.scored = True self.score += 1 else: self.failed = True self.wronganswer = number def print_text(font, x, y, text, color=(255, 255, 255), shadow=True): if shadow: imgText = font.render(text, True, (0, 0, 0)) screen.blit(imgText, (x - 2, y - 2)) imgText = font.render(text, True, color) screen.blit(imgText, (x, y)) if name == 'main': trivia = Trivia("demo_text.txt") pygame.display.set_caption("Trivia Game") while True: for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() elif event.type == KEYUP: if event.key == pygame.K_ESCAPE: pygame.quit() sys.exit() elif event.key == pygame.K_RETURN: trivia.next_question() elif event.key == pygame.K_1: trivia.handle_input(1) elif event.key == pygame.K_2: trivia.handle_input(2) elif event.key == pygame.K_3: trivia.handle_input(3) elif event.key == pygame.K_4: trivia.handle_input(4) screen.fill((0, 0, 200)) trivia.show_question() pygame.display.update()

    评论

报告相同问题?

问题事件

  • 创建了问题 3月24日

悬赏问题

  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题