一些想法
基本游戏界面就是这样
分析需要的功能
我的构思是将游戏分成三个部分
- 初始游戏菜单界面
- 游戏进行界面
- 游戏结束界面
游戏里的角色和道具则使用类
- 小鸟类
- 管道类
因为是使用pygame模块 我对这个模块也很不熟悉 很多功能都是论坛参考其他大神的 比如
pygame.transform 里面的各种变化功能
pygame.sprite 精灵模块里面的方法
构建整体框架
-
导入pygame和random
pygame拥有丰富的制作游戏的功能
random是随机模块 游戏里各种随机事件就是通过这个模块功能实现
import pygame
import random
2.我们写一个小的项目之前 需要将每个功能分成不同的代码块
- 定义的变量都写到最上面
MAP_WIDTH = 288 # 地图大小
MAP_HEIGHT = 512
FPS = 30 # 刷新率
PIPE_GAPS = [110, 120, 130, 140, 150, 160] # 缺口的距离 有这6个随机距离
# 写的途中的全局变量都可以写在最上面
全局变量
我一般喜欢使用大写来区分
- 游戏窗口的设置
pygame.init() # 进行初始化
SCREEN = pygame.display.set_mode((MAP_WIDTH, MAP_HEIGHT)) # 屏幕大小
pygame.display.set_caption('飞行小鸟') # 标题
CLOCK = pygame.time.Clock()
- 加载素材
加载游戏图片和音乐
SPRITE_FILE = './images'
IMAGES = {
}
IMAGES['guide'] = pygame.image.load(SPRITE_FILE + 'guide.png')
IMAGES['gameover'] = pygame.image.load(SPRITE_FILE + 'gameover.png')
IMAGES['floor'] = pygame.image.load(SPRITE_FILE + 'floor.png')
SPRITE_SOUND = './audio/'
SOUNDS = {
}
SOUNDS['start'] = pygame.mixer.Sound(SPRITE_SOUND + 'start.wav')
SOUNDS['die'] = pygame.mixer.Sound(SPRITE_SOUND + 'die.wav')
SOUNDS['hit'] = pygame.mixer.Sound(SPRITE_SOUND + 'hit.wav')
SOUNDS['score'] = pygame.mixer.Sound(SPRITE_SOUND + 'score.wav')
- 执行函数
就是执行程序的函数
def main():
menu_window()
result = game_window()
end_window(result)
- 程序入口
if __name__ == '__main__':
main()
-
我将游戏分成了三个界面
- 初始游戏菜单界面
- 游戏进行界面
- 游戏结束界面
def menu_window():
pass
def game_window():
pass
def end_window(result):
pass
# 这里就是写运行三种游戏界面的代码
-
因为要显示游戏得分
所以专门写一个方法在游戏主界面代码里面直接调用这个方法 让代码不会显得冗余
-
最后就是我们游戏角色和道具的类方法
- 小鸟类
- 管道类
class Bird(pygame.sprite.Sprite):
def __init__(self, x, y):
# super(Bird, self).__init__(x, y)
pygame.sprite.Sprite.__init__(self)
pass
def update(self, flap=False):
pass
def go_die(self):
pass
class Pipe(pygame.sprite.Sprite):
def __init__(self, x, y, upwards=True):
pygame.sprite.Sprite.__init__(self)
pass
def update(self):
pass
我们把整体框架搭建好之后 就可以着手完善代码
着手完整代码
"""
Project: pygame
Creator: stan Z
Create time: 2021-03-08 19:37
IDE: PyCharm
Introduction:
"""
import pygame
import random
######################################## 定义变量
MAP_WIDTH = 288 # 地图大小
MAP_HEIGHT = 512
FPS = 30 # 刷新率
PIPE_GAPS = [90, 100, 110, 120, 130, 140] # 缺口的距离 有这6个随机距离
# PIPE_GAPS1 = []
PIPE_HEIGHT_RANGE = [int(MAP_HEIGHT * 0.3), int(MAP_HEIGHT * 0.7)] # 管道长度范围
PIPE_DISTANCE = 120 # 管道之间距离
######################################## 游戏基本设置
pygame.init() # 进行初始化
SCREEN = pygame.display.set_mode((MAP_WIDTH, MAP_HEIGHT)) # 调用窗口设置屏幕大小
pygame.display.set_caption('飞行小鸟byStanZ') # 标题
CLOCK = pygame.time.Clock(