pygame小游戏打飞机_4显示敌人
<p><strong>显示敌人:</strong></p><p>定义显示敌人的函数 show_enemy,调用该函数时显示敌人的图像</p>
<pre class="language-python highlighter-hljs"><code># 引用pygame
import pygame
# 使程序初始化
pygame.init()
# 设置图像参数
screen = pygame.display.set_mode((480, 700))
# 设置标题
pygame.display.set_caption('打飞机')
# 引入图片
icon = pygame.image.load('ufo.png')
pygame.display.set_icon(icon)
# 引入背景图片
bgImg = pygame.image.load('background.png')
# 引入玩家图片
playerImg = pygame.image.load('player.png')
# 定义玩家初始位置
playerX = 225
playerY = 350
# 定义变量表示运动距离
playerStep = 0
# 新增 引入敌人图片
enemyImg = pygame.image.load('enemy.png')
# 新增 定义显示敌人的函数
def show_enemy():
# 新增 使敌人出现在(0,0)的位置
screen.blit(enemyImg, (0, 0))
running = True
# 进行循环 游戏主循环
while running:
# 绘制背景
screen.blit(bgImg, (0, 0))
# 绘制玩家
screen.blit(playerImg, (playerX, playerY))
# 新增 调用显示敌人函数
show_enemy()
# 获取游戏事件队列中的所有事件(涉及到玩家的各种交互,如鼠标点击、键盘操作、窗口事件等)
for event in pygame.event.get():
# 如果事件是QUIT事件,如点击窗口的关闭按钮,则退出循环
if event.type == pygame.QUIT:
# 退出循环
running = False
# KEYDOWN判断键盘按下的类型
if event.type == pygame.KEYDOWN:
# 新增 判断按下向左右键进行移动赋值
if event.key == pygame.K_RIGHT:
playerStep = 0.5
elif event.key == pygame.K_LEFT:
playerStep = -0.5
# KEYUP判断键盘抬起的类型
if event.type == pygame.KEYUP:
# 抬起键盘时将移动距离改为0
playerStep = 0
# 进行位移
playerX += playerStep
# 控制边界
if playerX > 378:
playerX = 378
if playerX < 0:
playerX = 0
if playerY > 572:
playerY = 572
if playerY < 0:
playerY = 0
# 界面更新
pygame.display.update()</code></pre>
<p><strong>敌人移动:</strong></p>
<p>1.敌人左右移动</p>
<p>设置敌人初始运动速度,当敌人移动到边界时在左右边界做反弹效果</p>
<p>注意:在函数中使用全局变量时,需要在函数中使用 global 语句标注使用的变量为全局变量</p>
<pre class="language-python highlighter-hljs"><code># 引用pygame
import pygame
# 使程序初始化
pygame.init()
# 设置图像参数
screen =pygame.display.set_mode((480,700))
# 设置标题
pygame.display.set_caption('打飞机')
# 引入图片
icon=pygame.image.load('ufo.png')
pygame.display.set_icon(icon)
# 引入背景图片
bgImg=pygame.image.load('background.png')
# 引入玩家图片
playerImg=pygame.image.load('player.png')
# 定义玩家初始位置
playerX=225
playerY=350
# 定义变量表示玩家运动速度
playerStep=0
# 引入敌人图片
enemyImg=pygame.image.load('enemy.png')
# 新增 定义敌人位置
enemyX=225
enemyY=20
# 新增 引入敌人运动速度
enemyStep=0.1
# 定义显示敌人的函数
def show_enemy():
# 新增 标注为全局变量
global enemyX
global enemyY
global enemyStep
# 函数可以使敌人出现在(enemyX,enemyY)的位置
screen.blit(enemyImg, (enemyX,enemyY))
# 新增 敌人飞机运动测试
enemyX += enemyStep
# 新增 控制敌人边界当敌人碰到左右边界时反弹,当敌人运动到上下边界时停止
if enemyX > 378:
enemyStep*=-1
if enemyX < 0:
enemyStep*=-1
if enemyY > 572:
enemyY = 572
if enemyY < 0:
enemyY = 0
running =True
# 进行循环 游戏主循环
while running :
# 绘制背景
screen.blit(bgImg,(0,0))
# 绘制玩家
screen.blit(playerImg, (playerX, playerY))
# 调用显示敌人函数
show_enemy()
# 获取游戏事件队列中的所有事件(涉及到玩家的各种交互,如鼠标点击、键盘操作、窗口事件等)
for eventin pygame.event.get():
# 如果事件是QUIT事件,如点击窗口的关闭按钮,则退出循环
if event.type == pygame.QUIT:
#退出循环
running =False
# KEYDOWN判断键盘按下的类型
if event.type == pygame.KEYDOWN:
# 判断按下向左右键进行移动赋值
if event.key == pygame.K_RIGHT:
playerStep=0.5
elif event.key == pygame.K_LEFT:
playerStep=-0.5
# KEYUP判断键盘抬起的类型
if event.type == pygame.KEYUP:
# 抬起键盘时将移动距离改为0
playerStep = 0
# 进行位移
playerX+=playerStep
# 控制边界
if playerX > 378:
playerX = 378
if playerX < 0:
playerX = 0
if playerY > 572:
playerY = 572
if playerY < 0:
playerY = 0
# 界面更新
pygame.display.update()</code></pre>
<p> 效果如下:</p>
<p><img src="https://img2024.cnblogs.com/blog/3680152/202507/3680152-20250730161640338-346271828.gif"></p>
<p>2.敌人下沉移动与随机出现</p>
<p>当敌人碰到左右边界时触发下沉移动</p>
<p>调用 random 函数生成敌人随机显示位置的坐标</p>
<p>注意:生成随机数时需要定义最大值和最小值。</p>
<pre class="language-python highlighter-hljs"><code># 引用 pygame
import pygame
# 新增 引用随机模块
import random
# 使程序初始化
pygame.init()
# 设置游戏窗口大小
screen = pygame.display.set_mode((480, 700))
# 设置标题
pygame.display.set_caption('打飞机')
# 设置游戏图标
icon = pygame.image.load('ufo.png')
pygame.display.set_icon(icon)
# 引入背景图片
bgImg = pygame.image.load('background.png')
# 引入玩家图片
playerImg = pygame.image.load('player.png')
# 定义玩家初始位置
playerX = 225
playerY = 350
# 定义变量表示玩家运动速度
playerStep = 0
# 引入敌人图片
enemyImg = pygame.image.load('enemy.png')
# 新增 通过 random 函数进行随机位置坐标生成
enemyX = random.randint(100, 380)
enemyY = random.randint(0, 100)
# 定义变量表示敌人运动速度
enemyStep = 0.1
# 定义显示敌人的函数
def show_enemy():
# 标注为全局变量
global enemyX
global enemyY
global enemyStep
# 使敌人出现在(enemyX, enemyY)的位置
screen.blit(enemyImg, (enemyX, enemyY))
# 使敌人飞机左右移动
enemyX += enemyStep
# 控制敌人移动边界,当敌人碰到左右边界时反弹,当敌人运动到上下边界时停止
if enemyX > 378:
enemyStep *= -1
# 新增 当碰到左右边界时下沉
enemyY += 20
if enemyX < 0:
enemyStep *= -1
enemyY += 20
if enemyY > 572:
enemyY = 572
if enemyY < 0:
enemyY = 0
running = True
# 进行循环 游戏主循环
while running:
# 绘制背景
screen.blit(bgImg, (0, 0))
# 绘制玩家
screen.blit(playerImg, (playerX, playerY))
# 调用显示敌人函数
show_enemy()
# 获取游戏事件队列中的所有事件(涉及到玩家的各种交互,如鼠标点击、键盘操作、窗口事件等)
for event in pygame.event.get():
# 如果事件是QUIT事件,如点击窗口的关闭按钮,则退出循环
if event.type == pygame.QUIT:
# 退出循环
running = False
# KEYDOWN 判断键盘是否按下
if event.type == pygame.KEYDOWN:
# 判断按下左右键进行移动赋值
if event.key == pygame.K_RIGHT:
playerStep = 0.5
elif event.key == pygame.K_LEFT:
playerStep = -0.5
# KEYUP 判断键盘是否抬起
if event.type == pygame.KEYUP:
# 抬起键盘时将移动距离改为 0
playerStep = 0
# 玩家左右移动
playerX += playerStep
# 控制玩家移动边界
if playerX > 378:
playerX = 378
if playerX < 0:
playerX = 0
if playerY > 572:
playerY = 572
if playerY < 0:
playerY = 0
# 界面更新
pygame.display.update()</code></pre>
<p>效果如下:</p>
<p> <img src="https://img2024.cnblogs.com/blog/3680152/202507/3680152-20250730171056072-490369417.gif"></p><br><br>
来源:https://www.cnblogs.com/cyber120/p/19013143
頁:
[1]