Exe如下,欢迎试玩!

链接:https://pan.baidu.com/s/1Hw-DP98Jayr-jmE3ZCe9NA
提取码:2xsq

先上图,终极子弹:

我方子弹共有三种模型:基础子弹、双发子弹及S型子弹

1. 基础子弹

实现代码,定义类:

class Bullet1(pygame.sprite.Sprite):def __init__(self, position):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load("images/bullet1.png").convert_alpha()self.rect = self.image.get_rect()self.rect.left, self.rect.top = positionself.speed = 9self.active = Falseself.mask = pygame.mask.from_surface(self.image)def move(self, width):self.rect.top -= self.speedif self.rect.top < 0:self.active = Falsedef reset(self, position):self.rect.left, self.rect.top = positionself.active = True

实例化:

    bullet1 = []bullet1_index = 0BULLET1_NUM = 9for i in range(BULLET1_NUM):bullet1.append(bullet.Bullet1((me.rect.centerx - 5, me.rect.centery - 40)))

2. 双发子弹:

实现代码,定义类:

class Bullet2(pygame.sprite.Sprite):def __init__(self, position):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load("images/bullet2.png").convert_alpha()self.rect = self.image.get_rect()self.rect.left, self.rect.top = positionself.speed = 10self.active = Falseself.mask = pygame.mask.from_surface(self.image)def move(self, width):self.rect.top -= self.speedif self.rect.top < 0:self.active = Falsedef reset(self, position):self.rect.left, self.rect.top = positionself.active = True

实例化:

    bullet2 = []bullet2_index = 0bullet2_num = 14for i in range(bullet2_num // 2):bullet2.append(bullet.Bullet2((me.rect.centerx - 42, me.rect.centery)))bullet2.append(bullet.Bullet2((me.rect.centerx + 22, me.rect.centery)))

3. S型子弹(两种类型:正S和反S)::

实现代码,定义类:

class Bullet3(pygame.sprite.Sprite):def __init__(self, position):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load("images/bullet3.png").convert_alpha()self.rect = self.image.get_rect()self.rect.left, self.rect.top = positionself.speed = 5self.x_speed = 0self.x = 0self.active = Falseself.mask = pygame.mask.from_surface(self.image)def move(self, width):self.rect.top -= self.speedif self.rect.top < 0:self.active = Falseelse:self.x_speed += 8if self.x_speed > 360:self.x_speed = 0self.rect.left = self.x + 150 * sin(self.x_speed * pi / 180)def reset(self, position):self.x, self.rect.top = positionself.active = Trueself.x_speed = 0

实例化:

    bullet3 = []bullet3_index = 0BULLET3_NUM = 15for i in range(BULLET3_NUM):bullet3.append(bullet.Bullet3(me.rect.midtop))

随着游戏难度增加,子弹采用“升级”的模式:两种补给包:双发和S型
A. “吃到”一个双发,子弹等级加1,最高为基础加双发,即三发子弹:

 if bullet_level > 0:bullets1 = bullet1bullets1[bullet1_index].reset((me.rect.centerx - 5, me.rect.centery - 40))bullet1_index = (bullet1_index + 1) % BULLET1_NUMif bullet_level == 2:bullets1 = []if bullet_level > 1:bullets2 = bullet2bullets2[bullet2_index].reset((me.rect.centerx-42,me.rect.centery))bullets2[bullet2_index+1].reset((me.rect.centerx+22, me.rect.centery))bullet2_index = (bullet2_index + 2) % bullet2_num

B. “吃到”一个S型,子弹等级加1,最高为正S加反S:

  if bullet3_level > 0:bullets3 = bullet3bullets3[bullet3_index].reset(me.rect.midtop)bullet3_index = (bullet3_index + 1) % BULLET3_NUMif bullet3_level > 1:bullets4 = bullet4bullets4[bullet4_index].reset(me.rect.midtop)bullet4_index = (bullet4_index + 1) % BULLET4_NUM

两种子弹可叠加,后期子弹感官强烈,增加玩家乐趣

# 各种子弹叠加bullets = bullets1 + bullets2 + bullets3 + bullets4for b in bullets:if b.active:b.move(width)screen.blit(b.image, b.rect)

/n/n/n/n/n/n

为了平衡游戏,因后期子弹过于“无敌”,故增加敌方子弹,敌方子弹无法消灭,只能闪躲:

class Flies(pygame.sprite.Sprite):def __init__(self, bg_size):pygame.sprite.Sprite.__init__(self)self.image_flies = pygame.image.load("images/enemy4.png").convert_alpha()self.rect = self.image_flies.get_rect()self.width, self.height = bg_size[0], bg_size[1]self.rect.left, self.rect.top = randint(0, self.width - self.rect.width), \randint(-5 * self.height, -self.height)self.x = randint(-2, 2)self.active = Trueself.mask = pygame.mask.from_surface(self.image_flies)def move_flies(self):if self.rect.top < self.height:if self.rect.top > 0:self.rect.top += 2if self.rect.left < 0 or self.rect.right > self.width:self.x = -self.xself.rect.left -= self.xelse:self.rect.top += 1else:self.reset()def reset(self):self.rect.left, self.rect.top = randint(0, self.width - self.rect.width), \randint(-5 * self.height, -self.height)self.x = self.rect.leftself.active = Trueself.x = randint(-2, 2)

如图小红点:

完整代码:
链接:https://pan.baidu.com/s/1xi-Y7J7BTNCBBFH62l__9A
提取码:ce3l

链接失效,备用链接:
https://download.csdn.net/download/jiandan44444/12776250

传送门:
pygame飞机大战关于子弹的设计(二)

pygame飞机大战关于子弹的设计(一)(含源码)相关推荐

  1. pygame 飞机大战 让子弹再飞一会儿

    我转载的飞机大战文章中,由于只是采用飞机或子弹的属性进行隐藏,在子弹和飞机较少时,不影响游戏体验.但当有大量敌机,大量子弹时候,由于需要每次都遍历 list,会卡的动不了.只能采取删除措施了. 在子弹 ...

  2. java实现飞机大战小游戏——————【附素材、源码、逐行注释讲解】

    java飞机小游戏,实现了以下功能: 1.我方小飞机可以通过鼠标移动来控制. 2.蜜蜂(必须打死而不是碰到,并且碰到蜜蜂会失去生命值)分为两种奖励 获得生命值或者子弹翻3倍. 3.当鼠标移动到界面外可 ...

  3. 基于 RICS-V 架构的单周期 38 条指令处理器设计(含源码及实验报告)

    一.概述   之前有专门的写过两篇博文来介绍基于 RICS-V 架构的单周期九条指令处理器设计,并提供了相关的代码结构介绍,之后我又对其进行了拓展,且修补了之前源码中存在的一些小问题,并将指令集从九条 ...

  4. 基于JavaSwing开发潜艇大战小游戏 课程设计 大作业源码

    基于JavaSwing开发潜艇大战小游戏:  (大作业) 开发环境: Windows操作系统 开发工具: Eclipse+Jdk 运行效果图: 基于JavaSwing开发潜艇大战小游戏:  (大作业) ...

  5. C++骰子游戏课程设计(含源码)

    一.目的与要求 1.1课程设计题目 在碰运气游戏中最常见到的是"投掷双骰子"游戏,这种游戏在影视作品中经常会见到.游戏规则是:游戏者每次投掷两颗骰子,每颗骰子是一个正方体,有6面, ...

  6. 基于java的企业人事管理系统设计--软件工程课程设计(含源码与论文设计).rar

    1 引言 4 1.1 课程设计目标 4 1.2 编程工具(编程环境)介绍 4 1.3 实施时间及主要实施步骤 4 2 需求分析 5 3 系统总体设计 6 4 数据库设计 6 5 主要功能模块的设计与实 ...

  7. 用java异常完成丢色子功能,java自动投掷骰子设计报告(含源码)

    自动投掷筛子的统计实验 一.实验内容: 编写一个图形界面程序实现自动投掷筛子100次的统计,在窗体中显示投掷过程,显示投掷的值,每隔1秒投掷1次,点击投掷按钮开始投掷. 利用多线程实现自动投掷.最后, ...

  8. ADI Blackfin DSP处理器-BF533的开发详解64:电子相册的设计(含源码)

    硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP++软件 硬件链接 代码实现功能 代码实现了将 SD 卡根目录下的 ...

  9. Android移动应用开发课程设计(含源码)

    这是一个较为简单理解的Android项目,是一个关于医学小知识的APP,运用了Fragment控件和RecyclerView控件,使用Android自带的MySQLite数据库实现数据存储(也可以通过 ...

最新文章

  1. 用无人机打点作画,密集恐惧症患者慎入!
  2. 网页解析之BeautifulSoup
  3. 如何将Windows Server域(AD活动目录)中的用户导出并导入至Outlook2010通讯簿
  4. C语言 变量 函数 (类型、作用域、生命周期、存储位置)
  5. 应用(指定)进程创建的时候创建Application
  6. vc++6.0的应用程序打不开肿么办
  7. 斯坦福大学机器学习公开课视频及课件
  8. [转]spring入门(六)【springMVC中各数据源配置】
  9. java程序设计图形题_面向对象与Java程序设计基础题目:设计一个程序可以一计算平面图形的面积和立体图形的体积。1.使用interface关键...
  10. 工作资讯002---FaaS和PaaS的关系_Iaas_Paas_Saas
  11. Windows+Python3.7下自动生成requirements.txt文件
  12. bat备份mysql数据库
  13. git stash pop 冲突,git stash list 中的记录不会自动删除的解决方法
  14. 苹果手机浏览器字体渐变色无效?
  15. 又一华尔街之狼?从洗碗工到公司董事长成功之路
  16. 工业级POE交换机、企业级交换机、普通交换机之间各区别?
  17. C++多线程/互斥锁/条件变量/信号量思维很重要;设计线程安全队列;1114按序打印;1115交替打印FooBar;1116打印零与奇偶数;1117H2O 生成1195交替打印字符串1226哲学家进餐
  18. python中len 函数_python len
  19. android体感游戏,用安卓手机玩身临其境的AR体感游戏 我看行
  20. 开源的分布式文件系统GlusterFS(Gluster File System)

热门文章

  1. 维表(Dimension Table)与事实表的区别
  2. 2005年2月24日
  3. 搜狗地图:路上的那些事儿(三十九)
  4. 训练集准确率上升,测试集的准确率没有变化!
  5. git push 推送当前分支 与 config中的push default
  6. 员工、老板、投资人,是这么看寒冬裁员的...
  7. 网上开店实名制审批应该与时俱进
  8. 高数基础_第2节_序列极限
  9. 【嵌入式】使用Linux自带的i2c-dev操作EEPROM(Userspace Driver)
  10. 【菜鸡读论文】Research on Micro-Expression Spotting Method Based on Optical Flow Features