python---Trivia游戏(问答题程序)

掌握知识点: I/O、 数据 、字体

1.Python数据类型
2.获取用户输入
3.处理异常
4.Mad Lib 游戏
5.操作二进制文件
6.Trivia游戏

==============
Python数据类型
+=============
str() int() float() 用于数据类型的转换

Python的数据类型比较灵活的定义,和C语言进行对比,十分友好。

擅长处理成组的信息,例如 mylist = [1,2,3,4,5,6]

===========
用户输入
+==========
一般使用 raw_input() 函数 和 input() 函数

在Python 2.7中有所不同

区别如下:

a = input()

print a * 2

输入: 123
结果: 246


a = raw_input()

print a * 2

输入:123
结果:123123


一个是数字,一个是字符串。

============
异常处理
+===========

使用 try…except语句块完成异常处理,会捕捉错误。

问题代码加在try:语句块中,有错误时会运行except : 中的代码,

number = input("Enter a number: ")
try:
    number = float(s)
except:
    number = 0
    print "It's  not a number."

answer = number * number
print( number, "*", number, "=", answer )

=============
Mad Lib 游戏 (文字游戏)
+============
函数: string.replace() 进行搜索–替换 操作

print 'MAD LIB GAME !'

guy = raw_input('what\'s your name? ')
arm = raw_input('what arm do you have ?')
place_to_go = raw_input('where to go ?')
thing_to_do = raw_input('what do you want to do ?')
monster = raw_input('Monster is ?')
start_time = raw_input('when start to go ?')
end_time = raw_input('when end ?')

result = 'you are winner'

story = """
    My name is GUY, I want to go to PLACE. Because I want to beat a Monster, I have a ARM so I decide to THING ,
    I will go at START , and back at END.   
    Finally, The GUY fight whith MONSTER, result is RESULT.
    """

dic = {'GUY' : guy, 'ARM':arm, 'PLACE': place_to_go, 'THING': thing_to_do, 'START': start_time, 'END': end_time, 'RESULT': result, 'MONSTER': monster}

for i in dic :
    story = story.replace(i, dic[i])

print story 

=========
文件输入和输出
+========
使用open()函数

#向文件写入内容
file = open('1.txt', 'w')
file.write("Hello python!\n")
file.write("Hello , world!")
flie.close() #相当于对于文件的保存

 #从文件读取内容
 file = open('1.txt', 'r')
 a = file.read()
 file.close()
#删除行末换行符
for line in a:
    print(line.strip())

===================
操作二进制文件
+==================
二进制文件包含字节,而字节可以是任何数据类型。
二进制模式打开文件:

import struct

file = open('data.txt','wb+')

for n in range(1,1000):
    number = struct.pack( 'i', n )
    file.write(number)

file.close()

#读取二进制数据

file = open('data.txt', 'rb')
b = file.read()
print b
file.close()

#读取出不同数据类型数据
file = open('data.txt', 'rb')
size = struct.calcsize('i')
bytes_read = file.read(size)
while bytes_read:
    value = struct.unpack('i', bytes_read)
    value = value[0]
    print (str(value) + ' ')
    bytes_read = file.read(size)
a = file.read()
file.close()
print a  
print "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++END+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"

==================
Trivia 游戏
+=================

#导入游戏使用到的模块
import sys, pygame 
from pygame.locals import * 

#游戏逻辑代码在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 
        self.colors = [white, white, white, white]

        #read trivia data from file 
        f = open(filename,'r') 
        trivia_data = f.readline()
        f.close()

        #count and clean up trivia data 
        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)

        #get correct answer out of data 
        self.correct = (self.data[self.current+5])

        #display question 
        question = self.current  
        print_text(font1, 5, 80, "QUESTION" + str(question))
        print_text(font2, 20, 120, self.data[self.current], yellow)

        #respond to correct answer 
        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)

        #display answer 
        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 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 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 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))

#主程序初始化代码
pygame.init()
screen = pygame.display.set_mode((600,500))
pygame.display.set_caption("The Trivia Game")
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  

#load the Trivia data file 
trivia = Trivia("t_data.txt")


#repeating loop 
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()

    #clear the screen 
    screen.fill((0,0,200))

    #display trivia data 
    trivia.show_question()

    #update the display 
    pygame.display.update()

非常简单的程序,大部分代码都是成分的字体显示。
主要学习的地方是 Class 的定义 和对应的实例生成。
最后是图形界面的显示,一般都通过while循环 不同的刷新、更新 实现图形的变化。

#这是一个图形库,有了它就可以实现绘图  
import pygame  

#这句代码的意义在于让代码变得简单 ,少敲几下键盘
from pygame.locals import * 

########################以上举个例子,引入各种库,看你需要什么#############################
#初始化代码, 准备工作做好
pygame.init()

#绘制屏幕, 你的图形界面至少要出现在一个框子中,就是它了 screen, 后面是大小参数
screen = pygame.display.set_mode((800,600))

#字体, 这些有关图形的都是pygame 库所包含的
font = pygame.font.Font(None, 40)

#颜色  , 为了方便
red = (255,0,0) 
white= (0,0,0)

#文字 , 这是你要显示的文字内容。 注意它只是内容。  要想显示 你需要把他变成图片(其实是位图,说图片好理解)
text = "Hello, World ! "

#位图,  就是把你所说的内容,转化为位图,这样他才能够绘制在屏幕上,就行照片的底片一样。这里把你的‘图片文字’准备好
imgText = font.render(text, True, red)

######################以上举个例子,初始化就是这个样子######################################
##################
#这个while就是一个循环主体,它是True就会一直循环, 想让游戏里面的东西动起来,其实就是不断的循环你创建出 #来的屏幕。 
#这一秒它在这里, 循环一次他又移动一段距离,下一秒有跑到哪里,快速的刷新下,就成了游戏里面动态的物体移动
##################
while True:
    #第一步就是先fill(把你屏幕背景充满颜色, 就用白色了)
    screen.fill(white)

    #把你的‘图片文字’展示到屏幕上,后面是(x,y)坐标位置
    screen.blit(imgText,(400,300))

    #这里继续刷新,到这里你就可以显示一个图形界面的Hello,world了 ,  你想啊,让(x,y)坐标进行一个变化,每次刷新位置都改变,这不就是动态的界面了。   如果再通过If语句进行判断和 按键结合,就能控制方向。这不就是一个受控制的小游戏了。  当然还有很多逻辑,后续博客更新。。
    pygame.display.update()

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值