pygame 小游戏-飞机大战

 以下是一个Pygame的进阶案例,展示了如何创建一个小游戏,
其中一个飞机可以通过键盘操作上下左右移动,同时可以发射子弹击中敌人飞机。

import pygame
import random

pygame.init()

# 游戏窗口设置
win = pygame.display.set_mode((800, 600))
pygame.display.set_caption("飞机大战")

# 颜色设置
WHITE = (255, 255, 255)
RED = (255, 0, 0)

# 玩家飞机设置
playerImg = pygame.image.load("player.png")
playerX = 370
playerY = 480
playerX_change = 0

# 敌人飞机设置
enemyImg = pygame.image.load("enemy.png")
enemyX = random.randint(0, 736)
enemyY = random.randint(50, 150)
enemyX_change = 4
enemyY_change = 20

# 子弹设置
bulletImg = pygame.image.load("bullet.png")
bulletX = 0
bulletY = 480
bulletY_change = 5
bullet_state = "ready"  # ready表示可以发射,fire表示正在飞行

def player(x, y):
    win.blit(playerImg, (x, y))

def enemy(x, y):
    win.blit(enemyImg, (x, y))

def fire_bullet(x, y):
    global bullet_state
    bullet_state = "fire"
    win.blit(bulletImg, (x + 16, y + 10))

def isCollision(enemyX, enemyY, bulletX, bulletY):
    distance = ((enemyX - bulletX) ** 2 + (enemyY - bulletY) ** 2) ** 0.5
    if distance < 27:
        return True
    else:
        return False

# 游戏循环
running = True
while running:
    win.fill((0, 0, 0))

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        # 键盘操作
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                playerX_change = -5
            if event.key == pygame.K_RIGHT:
                playerX_change = 5
            if event.key == pygame.K_SPACE:
                if bullet_state == "ready":
                    bulletX = playerX
                    fire_bullet(bulletX, bulletY)

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                playerX_change = 0

    playerX += playerX_change

    if playerX <= 0:
        playerX = 0
    elif playerX >= 736:
        playerX = 736

    enemyX += enemyX_change

    if enemyX <= 0:
        enemyX_change = 4
        enemyY += enemyY_change
    elif enemyX >= 736:
        enemyX_change = -4
        enemyY += enemyY_change

    if bulletY <= 0:
        bulletY = 480
        bullet_state = "ready"

    if bullet_state == "fire":
        fire_bullet(bulletX, bulletY)
        bulletY -= bulletY_change

    collision = isCollision(enemyX, enemyY, bulletX, bulletY)
    if collision:
        bulletY = 480
        bullet_state = "ready"
        enemyX = random.randint(0, 736)
        enemyY = random.randint(50, 150)

    player(playerX, playerY)
    enemy(enemyX, enemyY)

    pygame.display.update()

【注意】

素材下载下来,创建一个image文件存放,名字如下

【代码解释】

这段代码是一个简单的飞机大战游戏,使用Pygame库来实现。下面是一些重要部分的说明:

初始化游戏窗口的大小为800x600,并设置标题为"飞机大战"。
加载玩家飞机、敌人飞机和子弹的图片,并设置它们的初始位置。
定义了几个函数:
player(x, y): 用于在窗口中绘制玩家飞机。
enemy(x, y): 用于在窗口中绘制敌人飞机。
fire_bullet(x, y): 用于在飞机位置发射子弹。
isCollision(enemyX, enemyY, bulletX, bulletY): 判断子弹是否与敌人飞机相撞。
在游戏循环中,不断监听用户的输入事件(包括键盘操作和关闭窗口事件),并对飞机和子弹的位置进行更新和绘制。
玩家飞机可以通过左右键控制左右移动,空格键发射子弹;敌人飞机会在窗口中随机移动;当子弹击中敌人飞机时,重置子弹位置并重新生成敌人飞机。
这只是一个简单的游戏示例,你可以根据需要添加更多功能和效果。希望以上解释能够帮助你理解这个飞机大战游戏的代码实现。
"""
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值