当前位置: 首页 > news >正文

pygame小游戏打飞机_5发射子弹

定义子弹的类

与定义敌人的类类似,通过调整位置是子弹出现在玩家正上方

# 新增 定义子弹的类,其中包括图片(self.img)初始位置( self.x,self.y )运动速度(self.step)
class Bullet:def __init__(self):self.img = pygame.image.load('bullet.png')# 新增 将子弹放在玩家上方self.x = playerX+48self.y = playerY+5# 新增 定义变量表示子弹运动速度。self.step = 1
# 新增 保存现有的子弹
bullets = []

定义子弹函数

子弹以一定速度向上运动,当出界时删除子弹

 
# 新增 定义显示子弹的函数
def show_bullet():# 新增 进行循环使用Bulle类进行敌人的创建for b in bullets:# 新增 使子弹出现在(b.x,b.y)的位置screen.blit(b.img, (b.x, b.y))# 新增 使子弹向上移动b.y -= b.step# 新增 判断子弹是否出界,是则移除if b.y < 0 :bullets.remove(b)

定义空格键发射子弹

# 新增 判断按下空格键
elif event.key ==pygame.K_SPACE :# 新增 创建一颗子弹bullets.append(Bullet())

完整代码

# 引用 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 = 450
# 定义变量表示玩家运动速度
playerStep = 0
# 变量表示敌人数量
number_of_enemies = 6# 定义敌人的类,其中包括图片(self.img)初始位置( self.x,self.y )运动速度(self.step)
class Enemy:def __init__(self):self.img = pygame.image.load('enemy.png')# 通过 random 函数进行随机位置坐标生成self.x = random.randint(100, 380)self.y = random.randint(30, 70)# 定义变量表示敌人运动速度。注意:将速度改为随机数时由于为浮点型用.uniform函数self.step = random.uniform(0.05, 0.3)
# 新增 定义子弹的类,其中包括图片(self.img)初始位置( self.x,self.y )运动速度(self.step)
class Bullet:def __init__(self):self.img = pygame.image.load('bullet.png')# 新增 将子弹放在玩家上方self.x = playerX+48self.y = playerY+5# 新增 定义变量表示子弹运动速度。self.step = 1
# 新增 保存现有的子弹
bullets = []# 创建列表进行引入number_of_enemies个敌人
enemies = []
for i in range(number_of_enemies):# 每进行一次循环添加一个Enemy到列表中enemies.append(Enemy())# 定义显示敌人的函数
def show_enemy():# 进行循环使用Enemy类进行敌人的创建for e in enemies:# 使敌人出现在(enemyX, enemyY)的位置screen.blit(e.img, (e.x, e.y))# 使敌人飞机左右移动e.x += e.step# 控制敌人移动边界,当敌人碰到左右边界时反弹,当敌人运动到上下边界时停止if e.x > 378:e.step *= -1# 当碰到左右边界时下沉e.y += 20if e.x < 0:e.step *= -1e.y += 20# 控制边界if e.y > 572:e.y = 572if e.y < 0:e.y = 0
# 新增 定义显示子弹的函数
def show_bullet():# 新增 进行循环使用Bulle类进行敌人的创建for b in bullets:# 新增 使子弹出现在(b.x,b.y)的位置screen.blit(b.img, (b.x, b.y))# 新增 使子弹向上移动b.y -= b.step# 新增 判断子弹是否出界,是则移除if b.y < 0 :bullets.remove(b)running = True
# 进行循环 游戏主循环
while running:# 绘制背景screen.blit(bgImg, (0, 0))# 绘制玩家screen.blit(playerImg, (playerX, playerY))# 调用显示敌人函数show_enemy()# 新增 显示子弹show_bullet()# 获取游戏事件队列中的所有事件(涉及到玩家的各种交互,如鼠标点击、键盘操作、窗口事件等)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.5elif event.key == pygame.K_LEFT:playerStep = -0.5# 新增 判断按下空格键elif event.key == pygame.K_SPACE:# 新增 创建一颗子弹bullets.append(Bullet())# KEYUP 判断键盘是否抬起if event.type == pygame.KEYUP:# 抬起键盘时将移动距离改为 0playerStep = 0# 玩家左右移动playerX += playerStep# 控制玩家移动边界if playerX > 378:playerX = 378if playerX < 0:playerX = 0if playerY > 572:playerY = 572if playerY < 0:playerY = 0# 界面更新pygame.display.update()

运行效果如下

左右方向键进行移动,空格键发射子弹

屏幕录制 2025-08-02 180034

 

http://www.sczhlp.com/news/4084/

相关文章:

  • 123
  • CF1379F2 Chess Strikes Back (hard version)
  • 使用Python进行简单的数据可视化
  • Jetpack架构学习(7)——使用DataStore存储配置信息 - Stars
  • Prometheus源码专题【左扬精讲】—— 监控系统 Prometheus 3.4.0 源码解析:Discovery 动态服务发现机制——manager.go
  • 函(菡)数
  • 个性化联邦学习提升客户体验
  • 性能测试
  • P4094 [HEOI2016/TJOI2016] 字符串
  • jianlai
  • 8月2号
  • 【书画展】纪念中国人民抗日战争暨世界反法西斯战争胜利80周年
  • 测试用例的设计方法:八大方法及综合策略
  • 对于自己代码的理解
  • pandoc:用 docs 生成 epub
  • 匀速二阶贝塞尔曲线(二)
  • 8/2
  • Windows使用IIS上搭建FTP,并指定用户登录
  • GLM4.5在线版快速开发实践
  • yolo11分类一键训练专业的工具免安装环境windows版使用教程
  • 量子计算新突破:Ocelot芯片实现高效纠错架构
  • 网文小说应该怎么从零开始设计故事情节呢?
  • 平面波区域密度近似(PW-LDA)
  • Bookstore靶机实战:从Web枚举到REST API模糊测试的完整攻破
  • 数据库索引有哪些类型(B-Tree, Hash等)?它们的工作原理和适用场景是什么?索引是不是越多越好?
  • 如何解决服务器文件丢失或损坏的问题
  • DAY6 数字类型内置方法 字符串类型内置方法
  • OTC欧地希焊接机器人弧焊气体节约设备
  • MySQL主从切换细节
  • 树08