本文章最初发布在 XJHui’s Blog,未经允许,任何人禁止转载!
注意:最新修改版本已发布在 这里,点击前往查看!
项目需求
存在四个对象:
- 我方飞机
- 敌方飞机
- 我方子弹
- 敌方子弹
功能:
背景音乐的添加
我方飞机可以移动【根据按键来控制的】
敌方飞机也可以移动【随机的自动移动】
双方飞机都可以发送子弹
步骤:
- 创建一个窗口【搭建界面】
- 创建一个我方飞机,根据方向键左右的移动【键盘监测】
- 给我方飞机添加发射子弹的功能【按下空格键去发送】
- 创建一个敌人飞机
- 敌人飞机可以自由的移动
- 敌人飞机可以自动的发射子弹
环境安装和调试
安装pygame
利用SDL(C语言编写)库编写的python游戏库,需要手动安装
安装库:
1
pip install pygame
安装完成:
注意:可能会因为网络原因下载中断导致安装失败,建议科学上网。
验证安装:
1
pip list
运行结果:
搭建环境
新建python项目:
注意:要勾选红框中的内容,代表使用新的虚拟环境。
导入pygame文件:
点击下方Terminal:
输入:pip list查看已安装的第三方库,发现pygame未安装
输入:pip install pygame
如果cmd中安装成功,pycharm中安装失败,可以按照以下步骤操作:
输入:pip show pygame
访问该路径,找到下图所示文件夹并复制:
粘贴到
游戏项目\venv\Lib\site-packages
路径下:
验证安装成功:
验证库
运行代码:
1 | import pygame |
运行结果:
界面配置
搭建界面
游戏界面:
程序代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20import pygame # 导入pygame包
from pygame.locals import *
def main():
'''
搭建界面,显示背景图片
:return:
'''
screen = pygame.display.set_mode((350, 500)) # 设置界面大小
background = pygame.image.load("./feiji/background.png") # 导入背景图片
pygame.display.set_caption('飞机大作战') # 界面名称
while True:
screen.blit(background, (0, 0)) # 在界面中心位置显示背景图片
pygame.display.update() # 刷新界面
if __name__ == '__main__':
main() # 调用创建界面的函数
键盘监测
程序代码:
1
2
3
4
5
6
7
8
9
10
11
12
13eventList = pygame.event.get() # event.gey()可以监听键盘的输入
for event in eventList: # 遍历读取到的信息
print(event)
if event.type == QUIT: # 先判断读取到的信息的类型
print('退出!')
exit()
elif event.type == KEYDOWN:
if event.key == K_a or event.key == K_LEFT: # 如果是a或者左方向键
print('left')
elif event.key == K_d or event.key == K_RIGHT:
print('right')
elif event.key == K_SPACE:
print('space')运行结果:
背景音乐
1 | pygame.mixer.init() # 初始化音乐播放器 |
玩家样式
程序代码:
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
34
35
36
37
38
39
40
41
42
43
44
45
46import pygame # 导入pygame包
from pygame.locals import * # 导入包中的一些函数
def main():
'''
搭建界面,显示背景图片
:return:
'''
screen = pygame.display.set_mode((350, 500), depth=32) # 设置界面大小
background = pygame.image.load("./feiji/background.png") # 导入背景图片
hero = pygame.image.load('./feiji/hero.png')
pygame.display.set_caption('飞机大作战') # 界面名称
pygame.mixer.init() # 初始化音乐播放器
pygame.mixer.music.load("./feiji/background.mp3") # 导入背景音乐
pygame.mixer.music.set_volume(0.5) # 设置背景音乐音量
pygame.mixer.music.play(-1) # 无限循环
x, y = 0, 0
while True:
screen.blit(background, (0, 0)) # 在界面中心位置显示背景图片
screen.blit(hero, (x, y)) # 在界面中心位置显示背景图片
eventList = pygame.event.get() # event.gey()可以监听键盘的输入
for event in eventList: # 遍历读取到的信息
print(event)
if event.type == QUIT: # 先判断读取到的信息的类型
print('退出!')
exit()
elif event.type == KEYDOWN:
if event.key == K_a or event.key == K_LEFT: # 如果是a或者左方向键
print('left')
if x > 0:
x -= 5
elif event.key == K_d or event.key == K_RIGHT:
if x < 310:
x += 5
print('right')
elif event.key == K_SPACE:
print('space')
pygame.display.update() # 刷新界面
if __name__ == '__main__':
main() # 调用创建界面的函数运行结果:
面向对象实现
代码:在这
运行结果:
发射子弹
代码:在这
运行结果:
显示敌机和子弹
代码:在这
运行结果:
代码优化
可优化项:继承(避免过度冗余)
代码:在这
不足之处,欢迎留言,会及时回复,及时更正!
创作不易,感谢支持!