【闲来无事,py写game】知识竞答游戏 完美运行版本!

正文之前

这几天忙于写一个游戏程序,用于学院的一个毕业活动。。。。MMP我还是负责人,简直要死。。。所以都在赶制这个游戏程序中!!今天终于完成了逻辑上的设计,只差后面添加一些图片,以及扩充题库了!

正文

今天其实主要是在解决一个问题,那就是为啥不能显示中文??!!

一开始确实是有我从windows下拷贝过来一个文件,然后导致有个BOM还是什么的鬼东西。但是后来解决了。然后整天沉迷于编码解码。。。。到最后才发现,根本没啥卵子用!!不论是GBK还是UTF-8,在我的界面上都是一片方框。乱码表示!!沃日啊!!!

然后,我无意中搜了下,pygame如何显示中文。因为前面一直搜索python显示中文,结果都是叫我编码解码!!!我日哦 !!

结果,一大片答案!!!

最有用的还是这个:

怎样在pygame中显示中文

很有用啊!!!

要解决中文的显示问题,有两种方法。

  • 第一种方法:外带字体
    在网上下载一个中文字体文件,将这个文件与我们的程序放在同一个文件夹,如果是中文的文件名,将它改成英文文件名。例如,下载了迷你简毡笔黑.TTF,将文件名改成了mnjzbh.ttf,并将程序的第一句改成:
    ZiTiDuiXiang=pygame.font.Font('mnjzbh.ttf',32)
    这样,中文就能正确显示了。不过,有些下载的字体文件无法正常显示,可以多下载几个试试。
  • 第二种方法:使用系统字体
    将程序的第一句更改成:
    ZiTiDuiXiang=pygame.font.SysFont('SimHei',32)
    也就是用SysFont代替Font,并且使用系统自带字体,也可以正常显示中文。
    不过,系统自带有很多字体,要选择其中的中文字体。如何查看系统带了哪些字体呢?
    可以使用:
ZiTi=pygame.font.get_font()
for i in ZiTi:
   print(i)

来查看所有系统字体。

所以我就去下了两个字体。。

下载地址在这儿,有的付费,有的免费!

站长字体 免费的很多。尽情找!


然后今天还发现了几个好用的网站,一并推荐给大家!!

RGB配色表 很齐全 很贴心的配色表,比114那个强多了

https://www.pygame.org/docs/ref/image.html Pygame 的官网!!

用Python和Pygame写游戏-从入门到精通(1) 很优秀的个人博主的内容。深有感触!

下面是我的代码和图片文件!

#!/usr/bin/python
#coding:utf-8

import time
import math
import pygame
import sys
from pygame.locals import *
white=255, 255, 255
blue = 1, 1, 200

def print_text( font, x, y, text, color=white, 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))


class Trivia(object):
    def __init__(self, filename):
        self.data = []
        self.current = 0
        self.total = 0
        self.correct = 0
        self.score1 = 0
        self.score2 = 0
        self.scored = False
        self.failed = False
        self.wronganswer = 0
        self.colors = [white,  white,  white,  white]

        f=open(filename,  'r', encoding="utf-8")
        tdata = f.readlines()
        for x in tdata:
            self.data.append(x.strip())
            self.total += 1

    def show_question(self):
        print_text(font1,  width/5, height/15,  "机械学院14级\"头脑风暴\"知识竞赛!", blue)
        print_text(font3,  width/3, height/20*19,  "***最终解释权归机械学院14级年级学生会所有***", white)
        print_text(font2,  width/12, height/25*4, "SCORE1", red)
        print_text(font2,  width/10*8 , height/25*4, "SCORE2", red)
        self.correct = int(self.data[self.current+5])
        question=int(self.current/6)+1
        print_text(font1, width/10*4, height/20*4, "Question "+str(question), orange)
        fontsize = int(1000/len(self.data[self.current]))
        if fontsize > 50:
            fontsize = 50
        if fontsize < 30:
            fontsize = 30
        if len(self.data[self.current])>35:
            str1 = self.data[self.current][0:35]
            if len(self.data[self.current])<=70:
                str2 = self.data[self.current][35:]
                print_text(pygame.font.Font('piaoyi.ttf',  fontsize),  width/6,  height/20*6,  str1, yellow)
                print_text(pygame.font.Font('piaoyi.ttf',  fontsize),  width/6,  height/20*7,  str2, yellow)
            else:
                str2 = self.data[self.current][35:70]
                str3 = self.data[self.current][70:]
                print_text(pygame.font.Font('piaoyi.ttf', 20),  width/6,  height/60*17,  str1, yellow)
                print_text(pygame.font.Font('piaoyi.ttf',  20),  width/6,  height/60*19,  str2, yellow)
                print_text(pygame.font.Font('piaoyi.ttf',  20),  width/6,  height/60*21,  str2, yellow)
        else:
            print_text(pygame.font.Font('piaoyi.ttf',  fontsize),  width/6,  height/20*6,  self.data[self.current],  yellow)

        if self.scored:
            self.colors[self.correct-1] = green
        elif self.failed:
            self.colors[self.wronganswer-1] = red
        print_text(font1, width/10*4, height/20*8, "Answer:",  orange)
        maxlen = 0
        for i in range(4):
            if len(self.data[self.current+i+1])>maxlen:
                maxlen = len(self.data[self.current+i+1])
        print_text(font2,  width/20*9-maxlen*20,  height/20*10,  "1 ->  "+self.data[self.current+1],  self.colors[0])
        print_text(font2,  width/20*9-maxlen*20,  height/20*12,  "2->  "+self.data[self.current+2],  self.colors[1])
        print_text(font2,  width/20*9-maxlen*20,  height/20*14,  "3->  "+self.data[self.current+3],  self.colors[2])
        print_text(font2,  width/20*9-maxlen*20,  height/20*16,  "4->  "+self.data[self.current+4],  self.colors[3])
        print_text(font2,  width/8,  height/5+10,  str(self.score1),  red)
        print_text(font2,  width/20*17,  height/5+10, str(self.score2),  red)

    def handle_input(self,  number):
        if not self.scored:
            if number == self.correct :
                self.scored = True
            else:
                self.failed = True
                self.wronganswer = number
        self.show_question()

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

pygame.init()
width,  height = 1378,  776
screen = pygame.display.set_mode((width, height))
background = pygame.image.load("kate.png").convert()
frontground = pygame.image.load("dragon.png").convert_alpha()
pygame.display.set_caption("机械学院14级\"头脑风暴\"知识竞赛!")
font1 = pygame.font.Font('piaoyi.ttf',  60)
font2 = pygame.font.Font('piaoyi.ttf',  40)
font3 = pygame.font.Font('piaoyi.ttf',  20)

cyan = 0, 255, 255
yellow = 255, 255, 0
purple = 255, 0, 255
green = 0, 255, 0
red = 255, 0, 0
gray = 63, 63, 63
black = 8, 8, 8
orange = 255, 165, 0
Magenta = 255, 0, 255
trivia = Trivia("test.txt")

while True:
    screen.blit(background,  (0, 0))
    # screen.fill((0,255,0))
    # screen.blit(frontground, (-100, 88))
    trivia.show_question()
    pygame.display.update()
    Flag = True
    while Flag:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            elif event.type == pygame.KEYUP:
                if event.key == pygame.K_ESCAPE:
                    sys.exit()
                elif event.key == pygame.K_w:
                    trivia.handle_input(1)
                elif event.key == pygame.K_h:
                    trivia.score1 += 2
                    pygame.display.update()
                elif event.key == pygame.K_j:
                    trivia.score2 += 2
                    pygame.display.update()
                elif event.key == pygame.K_k:
                    if trivia.score1>0:
                        trivia.score1 -= 1
                    pygame.display.update()
                elif event.key == pygame.K_l:
                    if trivia.score2>0:
                        trivia.score2 -= 1
                    pygame.display.update()
                elif event.key == pygame.K_a:
                    trivia.handle_input(2)
                elif event.key == pygame.K_s:
                    trivia.handle_input(3)
                elif event.key == pygame.K_d:
                    trivia.handle_input(4)
                elif event.key == pygame.K_n:
                    trivia.next_question()
                    Flag = False
                pygame.display.update()

同一个文件夹下命名为test.txt即可,测试内容:

噪声对人体哪个系统有害:
心血管系统
消化系统
呼吸系统
泌尿系统
1
地球上的人观看晴朗的天空呈现蓝色,这是因为:
大陆上的海水把天空映成蓝色
太阳光中的蓝色被物体反射成蓝色
太阳光中的蓝色光被天空中的微粒散射成蓝色
宇宙空间本身是蓝色
3
植物是很多动物的食物,植物自身则主要是利用光合作用制造养料。植物在进行光合作用的时候,除利用太阳能和自身的叶绿素外,还需要空气中的
二氧化碳
一氧化碳
氧气
一氧化氮
1
下列哪种喝水方式不宜采用:
饭后大量喝水
渴了再喝水
根据膳食营养素构成等因素增减喝水量
运动后喝水
1
哺乳动物是最高等的脊椎动物,靠母体的乳腺分泌乳汁哺育初生幼体。下面哪种是哺乳动物?
海豚
海马
海星
海龙
1
乒乓球瘪了用什么办法能使它鼓起来?
放到冰柜里
向里吹气
泡在开水里
捂在手里
3
蝙蝠晚上捉蚊子不靠眼睛,靠什么呢?
超声波
电磁波
脑电波
念力
1
用冰块冷冻食物,最好把冰块放在食物:
上方
下方
中间
外面
2
dragon.png
kate.png

还有两个字体文件没法上传?!!心痛。

正文之后

下面进行一定的效果展示,虽然丑。但是我的好用啊!!只要扩充题库,美化界面就好了。开玩笑!!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,335评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,895评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,766评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,918评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,042评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,169评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,219评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,976评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,393评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,711评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,876评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,562评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,193评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,903评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,699评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,764评论 2 351

推荐阅读更多精彩内容