Python——pygame 面向对象的飞行小鸟(Flappy bird)

一些想法

基本游戏界面就是这样
在这里插入图片描述

分析需要的功能

我的构思是将游戏分成三个部分

  1. 初始游戏菜单界面
  2. 游戏进行界面
  3. 游戏结束界面

游戏里的角色和道具则使用类

  1. 小鸟类
  2. 管道类

因为是使用pygame模块 我对这个模块也很不熟悉 很多功能都是论坛参考其他大神的 比如

pygame.transform 里面的各种变化功能
pygame.sprite 精灵模块里面的方法

构建整体框架

  1. 导入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个随机距离

# 写的途中的全局变量都可以写在最上面 

全局变量我一般喜欢使用大写来区分

  1. 游戏窗口的设置
pygame.init()  # 进行初始化
SCREEN = pygame.display.set_mode((MAP_WIDTH, MAP_HEIGHT))  # 屏幕大小
pygame.display.set_caption('飞行小鸟')  # 标题
CLOCK = pygame.time.Clock() 
  1. 加载素材
    加载游戏图片和音乐
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')
  1. 执行函数
    就是执行程序的函数
def main():
		menu_window()
        result = game_window()
        end_window(result)
  1. 程序入口
if __name__ == '__main__':
    main()
  1. 我将游戏分成了三个界面

    1. 初始游戏菜单界面
    2. 游戏进行界面
    3. 游戏结束界面
def menu_window():
	pass

def game_window():
	pass

def end_window(result):
	pass

# 这里就是写运行三种游戏界面的代码
  1. 因为要显示游戏得分

    所以专门写一个方法在游戏主界面代码里面直接调用这个方法 让代码不会显得冗余

  2. 最后就是我们游戏角色和道具的类方法

    1. 小鸟类
    2. 管道类
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(
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值