以下是一个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): 判断子弹是否与敌人飞机相撞。
在游戏循环中,不断监听用户的输入事件(包括键盘操作和关闭窗口事件),并对飞机和子弹的位置进行更新和绘制。
玩家飞机可以通过左右键控制左右移动,空格键发射子弹;敌人飞机会在窗口中随机移动;当子弹击中敌人飞机时,重置子弹位置并重新生成敌人飞机。
这只是一个简单的游戏示例,你可以根据需要添加更多功能和效果。希望以上解释能够帮助你理解这个飞机大战游戏的代码实现。
"""