Python 符号雨
大约 3 分钟教学文档Python
符号雨
1.游戏功能

在屏幕上显示由上至下,类似下雨的多个符号。
2.游戏设计
游戏功能分析:在游戏窗口内,显示会移动的符号。
- 游戏窗口,有大小,有标题,有背景颜色。
- WIDTH: 800
- HEIGHT:600
- BKCOLOR:(0,0,0)
- 符号,有内容,有颜色,有速度
- 内容:符号包含具体的符号和长度,给出符号集,随机抽取。找度也可以随机产生。
- 颜色:随机产生颜色。
- 速度:给出速度范围,随机产生速度值。
- 位置:随机给出精灵位置。
- 一般游戏都有控制功能,即接收键盘或鼠标的输入
- 这里初步只考虑退出功能
3.游戏实现
3.1 整个游戏程序架构
- 包的引入(pygame, random, sys)
- 主函数(用于整个游戏功能的实现)
- 时间设定
- 窗口设计
- 标题设计
- 死循环控制函数
- 接收键盘与鼠标输入并判断
- 更新背景
- 更新精灵状态
- 帧数控制
- 精灵类的构建(符号精灵的实现)
- 内容
- 速度
- 颜色
- 精灵大小
- 精妙位置
3.2游戏窗口的实现
pygame.init() # 初始函数,使用pygame的第一步
screen = pygame.display.set_mode((WIDTH, HEIGHT)) #生成主屏幕screen;第一个参数是屏幕大小
pygame.display.set_caption('符号雨') # 窗口命名
screen.fill((0, 0, 0))#窗口颜色
3.3精灵的创建
class Code(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.font = pygame.font.Font('./font.ttf', randomSize()) # 随机字体大小
self.speed = randomSpeed() # 随机速度
self.code = self.getCode() # 随机长度
self.image = self.font.render(self.code, True, randomColor()) # 使用已有的文本创建一个位图image,返回值为一个image 随机颜色
self.image = pygame.transform.rotate(self.image, random.randint(87, 93)) # 讲图像随机旋转角度
self.rect = self.image.get_rect() #获取精灵的大小
self.rect.topleft = randomPos() # 随机位置
def getCode(self):#获取内容
length = randomLen() #符号精灵中符号的长度
code = ''
for i in range(length):
code += randomCode() #将随机取出的符号拼接到code中
return code
def update(self): #更新符号
self.rect = self.rect.move(0, self.speed) #在x和y轴方向上移动的距离,0,表示不移动。
if self.rect.top > HEIGHT:
self.kill()
3.4精灵创建中的随机函数
#随机生成一个颜色,是RGB三基色
def randomColor():
return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
# 随机生成一个速度
def randomSpeed():
return random.randint(SPEED[0], SPEED[1])
# 随机生成一个大小
def randomSize():
return random.randint(SIZE[0], SIZE[1])
# 随机生成一个长度
def randomLen():
return random.randint(LEN[0], LEN[1])
# 随机生成一个位置
def randomPos():
return (random.randint(0, WIDTH), -20)
# 随机生成一个字符串
def randomCode():
return random.choice('qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890')
# return random.choice('')
3.5 主函数实现
def main():
pygame.init() # 初始函数,使用pygame的第一步
screen = pygame.display.set_mode((WIDTH, HEIGHT)) #生成主屏幕screen;第一个参数是屏幕大小
pygame.display.set_caption('Code Rain-居然') # 窗口命名
clock = pygame.time.Clock() # 初始化一个clock对象
codesGroup = pygame.sprite.Group() # 精灵组,一个简单的实体容器
while True:
clock.tick(30) # 控制游戏绘制的最大帧率为30,控制刷新帧数
for event in pygame.event.get(): # 获取键盘或鼠标等输入事件
if event.type == QUIT: # 如果是关闭事件,则退出游戏
pygame.quit()
sys.exit(0)
screen.fill((0, 0, 0)) # 填充背景颜色,如果不填充,则会使新旧画面重叠
codeobject = Code() # 产生精灵对象
codesGroup.add(codeobject) # 添加精灵对象到精灵组
codesGroup.update() # 精灵组中的精灵移动
codesGroup.draw(screen) # 将精灵入到屏幕上
pygame.display.update() # 刷新屏幕
4.游戏扩展
- 增加暂停功能
- 可加入雨声音乐
- 可改变符号内容
- 可改变背景颜色
5.总结
- 了解游戏设计思路
- 了解游戏代码架构
- 熟悉pygame的常用函数
