一、准备工作
在编写飞机大战游戏前,需要安装pygame包。如果您还没有安装pygame包,可以在终端中输入以下命令:
pip install pygame
安装完成后,就可以开始编写飞机大战游戏了。
二、编写游戏窗口
在pygame中,可以使用pygame.display.set_mode()函数来创建游戏窗口。代码如下:
import pygame
pygame.init()
# 定义窗口大小
SIZE = (480, 700)
# 创建游戏窗口
screen = pygame.display.set_mode(SIZE)
# 设置窗口标题
pygame.display.set_caption("飞机大战")
在上述代码中,我们首先调用pygame.init()函数初始化pygame模块,然后定义窗口大小为(480,700),并使用pygame.display.set_mode()函数创建窗口。最后,使用pygame.display.set_caption()函数设置窗口标题为“飞机大战”。
三、添加背景音乐
为了增加游戏的趣味性,我们可以添加一些背景音乐。在pygame中,可以使用pygame.mixer.music.load()函数加载音乐文件,pygame.mixer.music.play()函数播放音乐。代码如下:
import pygame
pygame.init()
# 定义窗口大小
SIZE = (480, 700)
# 创建游戏窗口
screen = pygame.display.set_mode(SIZE)
# 设置窗口标题
pygame.display.set_caption("飞机大战")
# 添加背景音乐
pygame.mixer.music.load("bgm.mp3") # 加载音乐文件
pygame.mixer.music.play(-1) # 循环播放
在上述代码中,我们使用pygame.mixer.music.load()函数加载名为“bgm.mp3”的音乐文件,并使用pygame.mixer.music.play()函数循环播放。
四、添加游戏主循环
在编写pygame程序时,需要编写游戏主循环,来处理不同的游戏事件,例如用户输入、游戏更新等。代码如下:
import pygame
pygame.init()
# 定义窗口大小
SIZE = (480, 700)
# 创建游戏窗口
screen = pygame.display.set_mode(SIZE)
# 设置窗口标题
pygame.display.set_caption("飞机大战")
# 添加背景音乐
pygame.mixer.music.load("bgm.mp3") # 加载音乐文件
pygame.mixer.music.play(-1) # 循环播放
# 创建游戏主循环
while True:
# 处理游戏事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
在上述代码中,我们使用while True创建了游戏主循环,然后使用pygame.event.get()函数获取游戏事件,并对QUIT事件进行处理。当检测到QUIT事件时,我们调用pygame.quit()函数退出pygame模块,并使用exit()函数退出程序。
五、添加背景图像
在游戏中,我们需要添加一张背景图像。可以使用pygame.image.load()函数加载图像文件,再使用pygame.Surface.blit()函数将图像绘制到窗口上。代码如下:
import pygame
pygame.init()
# 定义窗口大小
SIZE = (480, 700)
# 创建游戏窗口
screen = pygame.display.set_mode(SIZE)
# 设置窗口标题
pygame.display.set_caption("飞机大战")
# 添加背景音乐
pygame.mixer.music.load("bgm.mp3") # 加载音乐文件
pygame.mixer.music.play(-1) # 循环播放
# 加载背景图像
bg_image = pygame.image.load("background.png")
# 添加背景图像
screen.blit(bg_image, (0, 0))
# 创建游戏主循环
while True:
# 处理游戏事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
在上述代码中,我们使用pygame.image.load()函数加载名为“background.png”的背景图像,然后使用pygame.Surface.blit()函数将背景图像绘制到上述创建的窗口中。需要注意的是,我们将背景图像的左上角与窗口的左上角对齐,所以在调用screen.blit()函数时,传入的坐标为(0,0)。
六、添加飞机图像
接下来,我们需要添加一架飞机的图像。与添加背景图像相似,可以使用pygame.image.load()函数加载图像文件,再使用pygame.Surface.blit()函数将图像绘制到窗口上。代码如下:
import pygame
pygame.init()
# 定义窗口大小
SIZE = (480, 700)
# 创建游戏窗口
screen = pygame.display.set_mode(SIZE)
# 设置窗口标题
pygame.display.set_caption("飞机大战")
# 添加背景音乐
pygame.mixer.music.load("bgm.mp3") # 加载音乐文件
pygame.mixer.music.play(-1) # 循环播放
# 加载背景图像
bg_image = pygame.image.load("background.png")
# 添加背景图像
screen.blit(bg_image, (0, 0))
# 加载飞机图像
plane_image = pygame.image.load("plane.png")
# 添加飞机图像
screen.blit(plane_image, (200, 600))
# 创建游戏主循环
while True:
# 处理游戏事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
在上述代码中,我们使用pygame.image.load()函数加载名为“plane.png”的飞机图像,然后使用pygame.Surface.blit()函数将飞机图像绘制到窗口中。需要注意的是,我们将飞机图像的左上角与窗口的左上角对齐,并将飞机图像的坐标设置为(200,600)。
七、移动飞机
为了让玩家控制飞机,我们需要在游戏循环中加入一些代码,来接收玩家的输入,并根据输入来移动飞机。代码如下:
import pygame
pygame.init()
# 定义窗口大小
SIZE = (480, 700)
# 创建游戏窗口
screen = pygame.display.set_mode(SIZE)
# 设置窗口标题
pygame.display.set_caption("飞机大战")
# 添加背景音乐
pygame.mixer.music.load("bgm.mp3") # 加载音乐文件
pygame.mixer.music.play(-1) # 循环播放
# 加载背景图像
bg_image = pygame.image.load("background.png")
# 添加背景图像
screen.blit(bg_image, (0, 0))
# 加载飞机图像
plane_image = pygame.image.load("plane.png")
# 初始化飞机坐标
plane_x = 200
plane_y = 600
# 添加飞机图像
screen.blit(plane_image, (plane_x, plane_y))
# 创建游戏主循环
while True:
# 处理游戏事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
# 处理键盘事件(移动飞机)
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
plane_x -= 10
elif event.key == pygame.K_RIGHT:
plane_x += 10
# 更新飞机图像
screen.blit(bg_image, (0, 0))
screen.blit(plane_image, (plane_x, plane_y))
# 刷新屏幕
pygame.display.update()
在上述代码中,我们首先初始化了飞机的坐标(plane_x, plane_y),然后在游戏主循环中加入了对玩家输入的处理代码。当玩家按下左箭头键时,将飞机的x坐标减去10,当玩家按下右箭头键时,将飞机的x坐标加上10。最后,使用pygame.Surface.blit()函数更新飞机图像,随后使用pygame.display.update()函数刷新屏幕。
八、添加子弹图像
在飞机大战游戏中,飞机会发射子弹,我们需要在游戏中添加子弹的图像。与添加飞机图像相似,可以使用pygame.image.load()函数加载图像文件,再使用pygame.Surface.blit()函数将图像绘制到窗口上。代码如下:
import pygame
pygame.init()
# 定义窗口大小
SIZE = (480, 700)
# 创建游戏窗口
screen = pygame.display.set_mode(SIZE)
# 设置窗口标题
pygame.display.set_caption("飞机大战")
# 添加背景音乐
pygame.mixer.music.load("bgm.mp3") # 加载音乐文件
pygame.mixer.music.play(-1) # 循环播放
# 加载背景图像
bg_image = pygame.image.load("background.png")
# 添加背景图像
screen.blit(bg_image, (0, 0))
# 加载飞机图像
plane_image = pygame.image.load("plane.png")
# 初始化飞机坐标
plane_x = 200
plane_y = 600
# 添加飞机图像
screen.blit(plane_image, (plane_x, plane_y))
# 加载子弹图像
bullet_image = pygame.image.load("bullet.png")
# 创建游戏主循环
while True:
# 处理游戏事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
# 处理键盘事件(移动飞机)
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
plane_x -= 10
elif event.key == pygame.K_RIGHT:
plane_x += 10
# 绘制背景和飞机图像
screen.blit(bg_image, (0, 0))
screen.blit(plane_image, (plane_x, plane_y))
# 添加子弹
bullet_x = plane_x + 40
bullet_y = plane_y - 20
screen.blit(bullet_image, (bullet_x, bullet_y))
# 刷新屏幕
pygame.display.update()
在上述代码中,我们使用pygame.image.load()函数加载名为“bullet.png”的子弹图像,然后使用pygame.Surface.blit()函数将子弹图像绘制到屏幕上。需要注意的是,我们将子弹图像的坐标设置为飞机图像的中间位置,即(bullet_x, bullet_y) = (plane_x + 40, plane_y - 20)。
九、让子弹移动
在飞机大战游戏中,子弹会向上移动,所以需要在游戏循环中添加一些代码,来更新子弹的位置。代码如下:
import pygame
pygame.init()
# 定义窗口大小
SIZE = (480, 700)
# 创建游戏窗口
screen = pygame.display.set_mode(SIZE)
# 设置窗口标题
pygame.display.set_caption("飞机大战")
# 添加背景音乐
pygame.mixer.music.load("bgm.mp3") # 加载音乐文件
pygame.mixer.music.play(-1) # 循环播放
# 加载背景图像
bg_image = pygame.image.load("background.png")
# 添加背景图像
screen.blit(bg_image, (0, 0))
# 加载飞机图像
plane_image = pygame.image.load("plane.png")
# 初始化飞机坐标
plane_x = 200
plane_y = 600
# 添加飞机图像
screen.blit(plane_image, (plane_x, plane_y))
# 加载子弹图像
bullet_image = pygame.image.load("bullet.png")
# 初始化子弹坐标
bullet_x = plane_x + 40
bullet_y = plane_y - 20
# 创建游戏主循环
while True:
# 处理游戏事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
# 处理键盘事件(移动飞机)
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
plane_x -= 10
elif event.key == pygame.K_RIGHT:
plane_x += 10
# 绘制背景和飞机图像
screen.blit(bg_image, (0, 0))
screen.blit(plane_image, (plane_x, plane_y))
# 绘制子弹
screen.blit(bullet_image, (bullet_x, bullet_y))
# 更新子弹位置
bullet_y -= 10
# 刷新屏幕
pygame.display.update()
在上述代码中,我们首先初始化了子弹的坐标(bullet_x, bullet_y),然后在游戏主循环中添加了一些代码,用来更新子弹的位置。具体地,我们将子弹的y坐标减去10,以使其向上移动。随后,使用pygame.Surface.blit()函数将子弹图像绘制到屏幕上。
十、检测子弹是否超出窗口范围
在飞机大战游戏中,如果子弹超出了窗口范围,就需要将其移除,以免浪费计算资源。我们可以在游戏循环中添加一些代码,来检测子弹是否超出了窗口范围。代码如下:
import pygame
pygame.init()
# 定义窗口大小
SIZE = (480, 700)
# 创建游戏窗口
screen = pygame.display.set_mode(SIZE)
# 设置窗口标题
pygame.display.set_caption("飞机大战")
# 添加背景音乐
pygame.mixer.music.load("bgm.mp3") # 加载音乐文件
pygame.mixer.music.play(-1) # 循环播放
# 加载背景图像
bg_image = pygame.image.load("background.png")
# 添加背景图像
screen.blit(bg_image, (0, 0))
# 加载飞机图像
plane_image = pygame.image.load("plane.png")
# 初始化飞机坐标
plane_x = 200
plane_y = 600
# 添加飞机图像
screen.blit(plane_image, (plane_x, plane_y))
# 加载子弹图像
bullet_image = pygame.image.load("bullet.png")
# 初始化子弹坐标
bullet_x = plane_x + 40
bullet_y = plane_y - 20
# 创建游戏主循环
while True:
# 处理游戏事件