掌握知识点: 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()