本文章最初发布在 XJHui’s Blog,未经允许,任何人禁止转载!

注意:最新修改版本已发布在 这里,点击前往查看!

项目需求

  1. 存在四个对象:

    • 我方飞机
    • 敌方飞机
    • 我方子弹
    • 敌方子弹
  2. 功能:

    • 背景音乐的添加

    • 我方飞机可以移动【根据按键来控制的】

    • 敌方飞机也可以移动【随机的自动移动】

    • 双方飞机都可以发送子弹

  3. 步骤:

    • 创建一个窗口【搭建界面】
    • 创建一个我方飞机,根据方向键左右的移动【键盘监测】
    • 给我方飞机添加发射子弹的功能【按下空格键去发送】
    • 创建一个敌人飞机
    • 敌人飞机可以自由的移动
    • 敌人飞机可以自动的发射子弹

环境安装和调试

安装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
2
3
import pygame

print('可以正常使用!')

运行结果:

界面配置

搭建界面

  1. 游戏界面:

  2. 程序代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    import 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. 程序代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    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')
    elif event.key == K_d or event.key == K_RIGHT:
    print('right')
    elif event.key == K_SPACE:
    print('space')
  2. 运行结果:

背景音乐

1
2
3
4
pygame.mixer.init()  # 初始化音乐播放器
pygame.mixer.music.load("./feiji/backgrou
pygame.mixer.music.set_volume(0.5) # 设置背景音乐音量
pygame.mixer.music.play(-1) # 无限循环

玩家样式

  1. 程序代码:

    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
    46
    import 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() # 调用创建界面的函数
  2. 运行结果:

面向对象实现

  1. 代码:在这

  2. 运行结果:

发射子弹

  1. 代码:在这

  2. 运行结果:

显示敌机和子弹

  1. 代码:在这

  2. 运行结果:

代码优化

可优化项:继承(避免过度冗余)

代码:在这


不足之处,欢迎留言,会及时回复,及时更正!

创作不易,感谢支持!