先看一下项目结构
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
""" PlayPlane/ |-- bin/ | |-- main.py 程序运行主体程序 |-- config/ | |-- settings.py 程序配置(例如: 游戏背景音乐的加载等) |-- material 程序素材放置(打飞机游戏素材放置) |-- ... |-- src/ 程序主体模块存放 | |-- __init__.py | |-- bullet.py 我方飞机发射子弹实现代码存放 | |-- enemy.py 敌方飞机实现代码存放 | |-- plane.py 我方飞机实现代码存放 |-- manage.py 程序启动文件 |-- README.md """ |
再晒下项目成果图

实现步骤
一、首先在 config/settings.py 中进行以下功能的实现
- 游戏初始化
- 游戏混音器初始化
- 背景音乐初始化
- 我方飞机挂了音乐
- 敌方飞机挂了音乐
- 子弹发射音乐
+ View Code?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#! /usr/bin/env python # -*- coding: utf-8 -*- import pygame pygame.init() # 游戏初始化 pygame.mixer.init() # 混音器初始化 # 游戏背景音乐 pygame.mixer.music.load( "material/sound/game_music.wav" ) pygame.mixer.music.set_volume( 0.2 ) # 子弹发射音乐 bullet_sound = pygame.mixer.Sound( "material/sound/bullet.wav" ) bullet_sound.set_volume( 0.2 ) # 我方飞机挂了的音乐 me_down_sound = pygame.mixer.Sound( "material/sound/game_over.wav" ) me_down_sound.set_volume( 0.2 ) # 敌方飞机挂了的音乐 enemy1_down_sound = pygame.mixer.Sound( "material/sound/enemy1_down.wav" ) enemy1_down_sound.set_volume( 0.2 ) config / settings.py |
注:游戏素材滑动到文章底部点击链接即可下载
二、小试牛刀
飞机和子弹都是可移动的,那么怎么实现让它们动起来呢(我方飞机可以玩家进行操控,敌机就是随机性的出现,子弹暂由我方飞机发射)。
在Pygame中,所有移动对象都可看做是一个精灵(sprite),精灵之间能够进行相互的交互通信,例如如何让碰撞检测更加精准等等。
那么先让我们先在屏幕上制作一个游戏板,根据 settings.py 配置,并让它有声音播放,首先我们在 bin/main.py 中这么写:
我们可以直接运行它,那么我们会看到以下画面,并且还会有激情的声音吆!!!但是我们要将文件配置为绝对路径才可以运行,因为刚刚在settings中的加载的音乐文件为相对路径。
+ View Code?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#! /usr/bin/env python # -*- coding: utf-8 -*- import sys from config.settings import * bg_size = 480 , 852 # 初始化游戏背景大小(宽, 高) screen = pygame.display.set_mode(bg_size) # 设置背景对话框 pygame.display.set_caption( "飞机大战" ) # 设置标题 background = pygame.image.load(os.path.join(BASE_DIR, "material/image/background.png" )) # 加载背景图片,并设置为不透明 def main(): pygame.mixer.music.play(loops = - 1 ) # loops 对应的值为 -1 则音乐会无限循环播放 while True : # 绘制背景图 screen.blit(background, ( 0 , 0 )) # 响应用户的操作(一定要有响应的用户操作) for event in pygame.event.get(): if event. type = = 12 : # 如果用户按下屏幕上的关闭按钮,触发QUIT事件,程序退出 pygame.quit() sys.exit() # 再而我们将背景图像并输出到屏幕上面 pygame.display.flip() if __name__ = = '__main__' : main() |