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

pygame小游戏飞机大战_6敌人开火

引入敌人子弹:

算出敌人子弹出射点并在敌人出射点绘制子弹

# 引入敌人子弹的类
class EnemyBullet(object):def __init__(self, screen, x, y):# 定义坐标self.x = x + 29 - 2self.y = y + 43# 引入子弹图片self.image = pygame.image.load("./images/bullet2.png")# 显示窗口self.screen = screen# 定义速度self.speed = 4# 定义显示子弹的方法def display(self):# 显示子弹到窗口self.screen.blit(self.image, (self.x, self.y))# 定义移动子弹的方法def auto_move(self):# 修改子弹y坐标使子弹飞起来self.y += self.speed

在敌人类中引入子弹存入列表中并进行循环实现发射:

 

# 引入敌方飞机的类
class Enemy(object):# 创建玩家的方法,引入screen模块def __init__(self, screen):# 引入图片创建敌人self.enemy = pygame.image.load("./images/enemy1.png")  # 51*43# 设置速度变量self.speed = 5self.x = 0self.y = 0# 使screen变为飞机类的一个属性self.screen = screen# 定义装子弹的列表self.bullets = []def display(self):# 绘制敌人self.screen.blit(self.enemy, (self.x, self.y))# 遍历所有子弹for bullet in self.bullets:# 引入让子弹飞起来的方法bullet.auto_move()# 显示子弹bullet.display()# 定义移动飞机的方法def auto_move(self):# 将direction改为全局变量global direction# 判断方向进行移动if direction == "right":self.x += self.speedif direction == "left":self.x -= self.speed# 定义碰壁时调整移动方向if self.x >= 480 - 51:direction = "left"if self.x <= 0:direction = "right"# 定义自动开火的方法def auto_fire(self):#创建单个子弹bullet = EnemyBullet(self.screen,self.x,self.y)#将子弹放入列表中self.bullets.append(bullet)

引入子弹和敌人的方法到主程序:

# 敌人自动移动
enemy.auto_move()
# 敌人自动开火
enemy.auto_fire()

完整代码:

# 引入pygame
import pygame
# 引入time模块
import time
# 引入pygame中的所有方法
from pygame.constants import K_UP, K_RIGHT, K_DOWN, K_LEFT, K_w, K_a, K_s, K_d, K_SPACE# 定义初始为向右
direction = "right"# 引入敌方飞机的类
class Enemy(object):# 创建玩家的方法,引入screen模块def __init__(self, screen):# 引入图片创建敌人self.enemy = pygame.image.load("./images/enemy1.png")  # 51*43# 设置速度变量self.speed = 5self.x = 0self.y = 0# 使screen变为飞机类的一个属性self.screen = screen# 定义装子弹的列表self.bullets = []def display(self):# 绘制敌人self.screen.blit(self.enemy, (self.x, self.y))# 遍历所有子弹for bullet in self.bullets:# 引入让子弹飞起来的方法bullet.auto_move()# 显示子弹bullet.display()# 定义移动飞机的方法def auto_move(self):# 将direction改为全局变量global direction# 判断方向进行移动if direction == "right":self.x += self.speedif direction == "left":self.x -= self.speed# 定义碰壁时调整移动方向if self.x >= 480 - 51:direction = "left"if self.x <= 0:direction = "right"# 定义自动开火的方法def auto_fire(self):#创建单个子弹bullet = EnemyBullet(self.screen,self.x,self.y)#将子弹放入列表中self.bullets.append(bullet)
# 引入飞机的类
class Plane(object):# 创建玩家的方法,引入screen模块def __init__(self, screen):# 引入图片创建玩家self.player = pygame.image.load("./images/me1.png")# 设置速度变量self.speed = 10self.x = 179self.y = 500# 使screen变为飞机类的一个属性self.screen = screen# 定义装子弹的列表self.bullets = []# 创建玩家移动的方法def key_control(self):# 判断按下键盘事件,对玩家x,y坐标进行调整使玩家移动key_pressed = pygame.key.get_pressed()if key_pressed[K_w] or key_pressed[K_UP]:self.y -= self.speedif key_pressed[K_d] or key_pressed[K_RIGHT]:self.x += self.speedif key_pressed[K_a] or key_pressed[K_LEFT]:self.x -= self.speedif key_pressed[K_s] or key_pressed[K_DOWN]:self.y += self.speedif key_pressed[K_SPACE]:# 按下空格键发射子弹bullet = Bullet(self.screen, self.x, self.y)# 将子弹存入列表self.bullets.append(bullet)def display(self):# 绘制玩家self.screen.blit(self.player, (self.x, self.y))# 遍历所有子弹for bullet in self.bullets:# 引入让子弹飞起来的方法bullet.auto_move()# 显示子弹bullet.display()
# 引入敌人子弹的类
class EnemyBullet(object):def __init__(self, screen, x, y):# 定义坐标self.x = x + 29 - 2self.y = y + 43# 引入子弹图片self.image = pygame.image.load("./images/bullet2.png")# 显示窗口self.screen = screen# 定义速度self.speed = 4# 定义显示子弹的方法def display(self):# 显示子弹到窗口self.screen.blit(self.image, (self.x, self.y))# 定义移动子弹的方法def auto_move(self):# 修改子弹y坐标使子弹飞起来self.y += self.speed# 引入子弹的类
class Bullet(object):def __init__(self, screen, x, y):# 定义坐标self.x = x + 51 - 2self.y = y# 引入子弹图片self.image = pygame.image.load("./images/bullet1.png")# 显示窗口self.screen = screen# 定义速度self.speed = 10# 定义显示子弹的方法def display(self):# 显示子弹到窗口self.screen.blit(self.image, (self.x, self.y))# 定义移动子弹的方法def auto_move(self):# 修改子弹y坐标使子弹飞起来self.y -= self.speed# 创建main函数创建主程序
def main():# 创建一个窗口screen = pygame.display.set_mode((480, 700), 0, 32)# 引入图片创建背景background = pygame.image.load("./images/background.png")# 引入图片创建玩家player = pygame.image.load("./images/me1.png")# 引入玩家信息player = Plane(screen)# 引入敌人信息enemy = Enemy(screen)# 设置速度变量speed = 10x = 179y = 500while True:# 绘制背景screen.blit(background, (0, 0))# 获取事件for event in pygame.event.get():# 如果事件是QUIT事件,如点击窗口的关闭按钮,则退出循环if event.type == pygame.QUIT:# 执行退出游戏pygame.quit# 退出程序exit()# 执行飞机按键监听player.key_control()# 显示飞机player.display()# 显示敌人enemy.display()# 敌人自动移动enemy.auto_move()# 敌人自动开火enemy.auto_fire()# 界面更新pygame.display.update()# 使程序每次运行时停留0.01秒time.sleep(0.01)if __name__ == '__main__':main()

演示如下:

屏幕录制 2025-08-12 151224

由于敌人子弹发射速度过快为降低子弹发射频率使用random函数:

# 引入random
import random
# 定义自动开火的方法
def auto_fire(self):# 使用随机数函数进行随机抽取一个1到10的一个随机数random_number = random.randint(1, 10)# 当随机数为8时创建子弹if random_number == 8:# 创建单个子弹bullet = EnemyBullet(self.screen, self.x, self.y)# 将子弹放入列表中self.bullets.append(bullet)

完整代码:

# 引入random
import random
# 引入pygame
import pygame
# 引入time模块
import time
# 引入pygame中的所有方法
from pygame.constants import K_UP, K_RIGHT, K_DOWN, K_LEFT, K_w, K_a, K_s, K_d, K_SPACE# 定义初始为向右
direction = "right"# 引入敌方飞机的类
class Enemy(object):# 创建玩家的方法,引入screen模块def __init__(self, screen):# 引入图片创建敌人self.enemy = pygame.image.load("./images/enemy1.png")  # 51*43# 设置速度变量self.speed = 5self.x = 0self.y = 0# 使screen变为飞机类的一个属性self.screen = screen# 定义装子弹的列表self.bullets = []def display(self):# 绘制敌人self.screen.blit(self.enemy, (self.x, self.y))# 遍历所有子弹for bullet in self.bullets:# 引入让子弹飞起来的方法bullet.auto_move()# 显示子弹bullet.display()# 定义移动飞机的方法def auto_move(self):# 将direction改为全局变量global direction# 判断方向进行移动if direction == "right":self.x += self.speedif direction == "left":self.x -= self.speed# 定义碰壁时调整移动方向if self.x >= 480 - 51:direction = "left"if self.x <= 0:direction = "right"# 定义自动开火的方法def auto_fire(self):# 使用随机数函数进行随机抽取一个1到10的一个随机数random_number = random.randint(1, 10)# 当随机数为8时创建子弹if random_number == 8:# 创建单个子弹bullet = EnemyBullet(self.screen, self.x, self.y)# 将子弹放入列表中self.bullets.append(bullet)# 引入飞机的类
class Plane(object):# 创建玩家的方法,引入screen模块def __init__(self, screen):# 引入图片创建玩家self.player = pygame.image.load("./images/me1.png")# 设置速度变量self.speed = 10self.x = 179self.y = 500# 使screen变为飞机类的一个属性self.screen = screen# 定义装子弹的列表self.bullets = []# 创建玩家移动的方法def key_control(self):# 判断按下键盘事件,对玩家x,y坐标进行调整使玩家移动key_pressed = pygame.key.get_pressed()if key_pressed[K_w] or key_pressed[K_UP]:self.y -= self.speedif key_pressed[K_d] or key_pressed[K_RIGHT]:self.x += self.speedif key_pressed[K_a] or key_pressed[K_LEFT]:self.x -= self.speedif key_pressed[K_s] or key_pressed[K_DOWN]:self.y += self.speedif key_pressed[K_SPACE]:# 按下空格键发射子弹bullet = Bullet(self.screen, self.x, self.y)# 将子弹存入列表self.bullets.append(bullet)def display(self):# 绘制玩家self.screen.blit(self.player, (self.x, self.y))# 遍历所有子弹for bullet in self.bullets:# 引入让子弹飞起来的方法bullet.auto_move()# 显示子弹bullet.display()# 引入敌人子弹的类
class EnemyBullet(object):def __init__(self, screen, x, y):# 定义坐标self.x = x + 29 - 2self.y = y + 43# 引入子弹图片self.image = pygame.image.load("./images/bullet2.png")# 显示窗口self.screen = screen# 定义速度self.speed = 4# 定义显示子弹的方法def display(self):# 显示子弹到窗口self.screen.blit(self.image, (self.x, self.y))# 定义移动子弹的方法def auto_move(self):# 修改子弹y坐标使子弹飞起来self.y += self.speed# 引入子弹的类
class Bullet(object):def __init__(self, screen, x, y):# 定义坐标self.x = x + 51 - 2self.y = y# 引入子弹图片self.image = pygame.image.load("./images/bullet1.png")# 显示窗口self.screen = screen# 定义速度self.speed = 10# 定义显示子弹的方法def display(self):# 显示子弹到窗口self.screen.blit(self.image, (self.x, self.y))# 定义移动子弹的方法def auto_move(self):# 修改子弹y坐标使子弹飞起来self.y -= self.speed# 创建main函数创建主程序
def main():# 创建一个窗口screen = pygame.display.set_mode((480, 700), 0, 32)# 引入图片创建背景background = pygame.image.load("./images/background.png")# 引入图片创建玩家player = pygame.image.load("./images/me1.png")# 引入玩家信息player = Plane(screen)# 引入敌人信息enemy = Enemy(screen)# 设置速度变量speed = 10x = 179y = 500while True:# 绘制背景screen.blit(background, (0, 0))# 获取事件for event in pygame.event.get():# 如果事件是QUIT事件,如点击窗口的关闭按钮,则退出循环if event.type == pygame.QUIT:# 执行退出游戏pygame.quit# 退出程序exit()# 执行飞机按键监听player.key_control()# 显示飞机player.display()# 显示敌人enemy.display()# 敌人自动移动enemy.auto_move()# 敌人自动开火enemy.auto_fire()# 界面更新pygame.display.update()# 使程序每次运行时停留0.01秒time.sleep(0.01)if __name__ == '__main__':main()

演示如下:

屏幕录制 2025-08-12 152710

http://www.aitangshan.cn/news/842.html

相关文章:

  • Git 如何正确回滚代码?常见回滚操作对比,适用不同的场景
  • 嵌入式数据库_sqlite-duckdb
  • 抱歉!Java面试标准答案最不重要
  • PyCharm安装教程(附安装包)超详细下载安装激活教程(新手零基础安装指南)
  • maven配置阿里云镜像加速
  • RAID 磁盘阵列
  • 题解:P10965 Largest Submatrix - e
  • 面试防坑场景
  • 夜莺开源监控,模板函数一览
  • 10 个不错的 C 语言开源项目
  • systemctl服务管理
  • 打编程之024:免费本地AI客户端-Chatbox和CherryStudio
  • 绩效考核管理系统横评:功能对比、应用场景与企业选择指南
  • Windows10 安装编译后的 pysqlcipher3-v1.2.1 基于 Python 3.11.9
  • SEATA AT vs SAGA vs 本地消息表
  • Moka远程招聘系统:2025年AI视频面试+电子签零接触入职标准方案
  • 个性化联邦学习库PFLlib的技术解析与基准测试
  • 回归whk
  • DNS服务器漏洞可能导致远程代码执行
  • (自适应手机端)烘干机网站模板 通用机械设备网站源码下载
  • Oracle RAC 19.8 RHEL7.6 安装手册
  • AutoCAD Plant 3D 安装步骤与新手入门教程
  • 技术岗位学习路径指南 - 详解
  • 状态机的设计流程
  • (自适应手机端)消防设备网站pbootcms模板
  • 金仓数据库物理备份还原
  • (自适应手机端)导航网站模板 网站目录源码下载
  • (自适应手机端)网址发布页pbootcms网站模板
  • 7.2.1 十二重计数法
  • (自适应手机端)驾校网站模板 驾照考证网站源码下载