询问一下,关于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()
运行情况:
编码一致,但是原文本有中文,然后输出变成这样的情况