关键词

Python3实现飞机大战游戏

Python3实现飞机大战游戏攻略

1. 准备工作

在开始编写游戏代码之前,需要安装好Pygame库。

在Windows系统下可以使用pip命令进行安装:

pip install pygame

在Linux系统下可以使用以下命令安装:

sudo apt-get install python3-pygame

2. 创建窗口

使用Pygame库创建游戏窗口的代码如下:

import pygame

pygame.init()

screen = pygame.display.set_mode((480, 700))
pygame.display.set_caption("飞机大战")

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
    pygame.display.update()

代码中首先导入了Pygame库,然后调用了pygame.init()方法进行初始化。

pygame.display.set_mode((480, 700))用来创建一个大小为480x700的游戏窗口。

pygame.display.set_caption("飞机大战")用来设置游戏窗口的标题。

使用pygame.QUIT来检测游戏窗口是否被关闭,如果窗口被关闭就退出游戏。

最后调用pygame.display.update()方法来刷新游戏窗口。

3. 添加背景图片

使用Pygame库在游戏窗口中添加背景图片的代码如下:

import pygame

pygame.init()

# 创建游戏窗口
screen = pygame.display.set_mode((480, 700))
pygame.display.set_caption("飞机大战")

# 加载背景图片
bg_img = pygame.image.load("background.png")

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

    # 绘制背景图片
    screen.blit(bg_img, (0, 0))

    pygame.display.update()

代码中使用pygame.image.load("background.png")方法加载一张名为background.png的图片。

使用screen.blit(bg_img, (0, 0))方法将背景图片绘制到游戏窗口中。

4. 添加玩家飞机

使用Pygame库在游戏窗口中添加玩家飞机的代码如下:

import pygame

pygame.init()

# 创建游戏窗口
screen = pygame.display.set_mode((480, 700))
pygame.display.set_caption("飞机大战")

# 加载背景图片和玩家飞机图片
bg_img = pygame.image.load("background.png")
player_img = pygame.image.load("player.png")

# 获取玩家飞机的位置和大小
player_rect = player_img.get_rect()
player_width = player_rect.width
player_height = player_rect.height
player_x = (480 - player_width) // 2
player_y = 500

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

    # 绘制背景图片
    screen.blit(bg_img, (0, 0))

    # 绘制玩家飞机
    screen.blit(player_img, (player_x, player_y))

    pygame.display.update()

代码中使用pygame.image.load("player.png")方法加载一张名为player.png的图片作为玩家飞机。

使用player_img.get_rect()方法获取玩家飞机图片的矩形区域。

然后可以根据矩形区域的宽度和高度计算出玩家飞机的初始位置,这里设置为窗口底端的正中央位置。

使用screen.blit(player_img, (player_x, player_y))方法将玩家飞机绘制到游戏窗口中。

5. 玩家飞机的控制

使用Pygame库实现玩家飞机的控制的代码如下:

import pygame

pygame.init()

# 创建游戏窗口
screen = pygame.display.set_mode((480, 700))
pygame.display.set_caption("飞机大战")

# 加载背景图片和玩家飞机图片
bg_img = pygame.image.load("background.png")
player_img = pygame.image.load("player.png")

# 获取玩家飞机的位置和大小
player_rect = player_img.get_rect()
player_width = player_rect.width
player_height = player_rect.height
player_x = (480 - player_width) // 2
player_y = 500

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                player_x -= 5
            elif event.key == pygame.K_RIGHT:
                player_x += 5
            elif event.key == pygame.K_UP:
                player_y -= 5
            elif event.key == pygame.K_DOWN:
                player_y += 5

    # 绘制背景图片
    screen.blit(bg_img, (0, 0))

    # 绘制玩家飞机
    screen.blit(player_img, (player_x, player_y))

    pygame.display.update()

代码中使用pygame.KEYDOWN来检测玩家按下了哪个方向键,然后根据按下的键调整玩家飞机的位置。

这里设置玩家飞机在水平和竖直方向上移动的距离为5。可以根据实际情况进行调整。

6. 示例说明1

在玩家飞机控制代码的基础上,我们可以添加按空格键发射子弹的功能。

代码如下:

import pygame

pygame.init()

# 创建游戏窗口
screen = pygame.display.set_mode((480, 700))
pygame.display.set_caption("飞机大战")

# 加载背景图片、玩家飞机图片和子弹图片
bg_img = pygame.image.load("background.png")
player_img = pygame.image.load("player.png")
bullet_img = pygame.image.load("bullet.png")

# 获取玩家飞机的位置和大小
player_rect = player_img.get_rect()
player_width = player_rect.width
player_height = player_rect.height
player_x = (480 - player_width) // 2
player_y = 500

# 定义子弹的列表以及每个子弹的初始位置
bullets = []
bullet_x = player_x + player_width // 2 - 5
bullet_y = player_y - 20

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                player_x -= 5
            elif event.key == pygame.K_RIGHT:
                player_x += 5
            elif event.key == pygame.K_UP:
                player_y -= 5
            elif event.key == pygame.K_DOWN:
                player_y += 5
            elif event.key == pygame.K_SPACE:
                # 发射子弹
                bullet_x = player_x + player_width // 2 - 5
                bullet_y = player_y - 20
                bullets.append([bullet_x, bullet_y])

    # 绘制背景图片
    screen.blit(bg_img, (0, 0))

    # 绘制玩家飞机
    screen.blit(player_img, (player_x, player_y))

    # 绘制子弹
    for b in bullets:
        screen.blit(bullet_img, (b[0], b[1]))
        b[1] -= 10
        if b[1] < 0:
            bullets.remove(b)

    pygame.display.update()

添加按下空格键发射子弹的判断语句,将发射的子弹的坐标和速度加入到一个列表中。

然后在循环中绘制子弹的同时,更新每个子弹的位置。如果子弹超出窗口,则从子弹列表中删除。

7. 示例说明2

在示例1的基础上,我们可以添加敌机的出现,并设置敌机随机出现的位置和速度。

代码如下:

import pygame
import random

pygame.init()

# 创建游戏窗口
screen = pygame.display.set_mode((480, 700))
pygame.display.set_caption("飞机大战")

# 加载背景图片、玩家飞机图片、子弹图片和敌机图片
bg_img = pygame.image.load("background.png")
player_img = pygame.image.load("player.png")
bullet_img = pygame.image.load("bullet.png")
enemy_img = pygame.image.load("enemy.png")

# 获取玩家飞机的位置和大小
player_rect = player_img.get_rect()
player_width = player_rect.width
player_height = player_rect.height
player_x = (480 - player_width) // 2
player_y = 500

# 定义子弹的列表以及每个子弹的初始位置和速度
bullets = []
bullet_x = player_x + player_width // 2 - 5
bullet_y = player_y - 20
bullet_speed = 10

# 定义敌机的列表以及每个敌机的初始位置和速度
enemies = []
enemy_speed = 5

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                player_x -= 5
            elif event.key == pygame.K_RIGHT:
                player_x += 5
            elif event.key == pygame.K_UP:
                player_y -= 5
            elif event.key == pygame.K_DOWN:
                player_y += 5
            elif event.key == pygame.K_SPACE:
                # 发射子弹
                bullet_x = player_x + player_width // 2 - 5
                bullet_y = player_y - 20
                bullets.append([bullet_x, bullet_y])

    # 绘制背景图片
    screen.blit(bg_img, (0, 0))

    # 绘制玩家飞机
    screen.blit(player_img, (player_x, player_y))

    # 绘制子弹
    for b in bullets:
        screen.blit(bullet_img, (b[0], b[1]))
        b[1] -= bullet_speed
        if b[1] < 0:
            bullets.remove(b)

    # 添加敌机
    if len(enemies) < 5:
        enemy_x = random.randint(0, 430)
        enemy_y = -50
        enemies.append([enemy_x, enemy_y])

    # 绘制敌机
    for e in enemies:
        screen.blit(enemy_img, (e[0], e[1]))
        e[1] += enemy_speed
        if e[1] > 700:
            enemies.remove(e)

    pygame.display.update()

添加敌机的表现需要在主循环内,检测敌机列表长度如果小于5则在窗口中添加一个新敌机。

同时更新敌机列表中每个敌机的位置,当敌机移除窗口则从敌机列表中删除。

本文链接:http://task.lmcjl.com/news/8843.html

展开阅读全文