python基于pygame实现飞机大作战小游戏

一、准备工作

在编写飞机大战游戏前,需要安装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:

# 处理游戏事件