GitHub地址:https://github.com/WingedCat/AirWar

珍宝类的创建:

package cn.xpu.hcp.entity;import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.util.Random;import cn.xpu.hcp.game.GameFrame;
import cn.xpu.hcp.tools.Constant;
import cn.xpu.hcp.tools.GameImage;public class Treasure {private static Random r = new Random();int x, y, w, h;GameFrame gf; public int type;//珍宝类型int step = 0;private boolean live = true;private static Image[] imgs = new Image[4];private Image ensureImg;private static int rx;private static int ry;static{//补血imgs[0] = GameImage.getImage("resources/t2.bmp");//子弹升级imgs[1] = GameImage.getImage("resources/t1.bmp");imgs[2] = GameImage.getImage("resources/t3.bmp");imgs[3] = GameImage.getImage("resources/t4.png");rx = r.nextInt(Constant.GAME_WIDTH);ry = r.nextInt(Constant.GAME_HEIGHT);}//指明血块运动的轨迹,由pos中各个点构成private int[][] pos = {{rx, ry}, {rx+10, ry}, {rx+25, ry-25}, {rx+50, ry-100}, {rx+10, ry-30}, {rx+15, ry-10}, {rx-10, ry-20}};public Treasure(GameFrame gf) {x = pos[0][0];y = pos[0][1];int randIndex = r.nextInt(3)%(3) + 1;ensureImg = imgs[randIndex];type=2;this.gf = gf;w = h = ensureImg.getWidth(null);}public Treasure(int randIndex,GameFrame gf) {x = pos[0][0];y = pos[0][1];randIndex = 0;this.gf = gf;ensureImg = imgs[randIndex];type=1;w = h = ensureImg.getWidth(null);}public void draw(Graphics g) {if(!live) {gf.ts.remove(this);return;}g.drawImage(ensureImg, x, y, null);move();}private void move() {step ++;if(step == pos.length){step = 0;}x = pos[step][0];y = pos[step][1];}public Rectangle getRect() {return new Rectangle(x, y, w , h);}public boolean isLive() {return live;}public void setLive(boolean live) {this.live = live;}
}

飞机添加吃珍宝的方法:

public boolean eat(Treasure t) {if(this.isAlive && t.isLive() && this.getRect().intersects(t.getRect())) {if(t.type==1){this.life = 100;}else{this.randIndex = r.nextInt(8)%(6) + 3;}t.setLive(false);return true;}return false;}

我将游戏设计成,吃一个补血珍宝补满血,吃一个升级子弹珍宝升级为中级或高级子弹,吃两个升级子弹珍宝后升级为超级炮弹(限时10秒),随后还原为升级前的子弹类型:
在plane类中添加:

int oldIndex;public long eatStart;public int count=0;//记录吃了多少个升级子弹的珍宝

修改eat()方法:

public boolean eat(Treasure t) {if(this.isAlive && t.isLive() && this.getRect().intersects(t.getRect())) {if(t.type==1){this.life = 100;}else{count++;if(count==2){this.randIndex = r.nextInt(12)%(4) + 9;eatStart = System.currentTimeMillis();}else{this.randIndex = r.nextInt(8)%(6) + 3;oldIndex = randIndex;}}t.setLive(false);return true;}return false;}

添加还原方法:

public void back(){this.randIndex = oldIndex;
}

创建珍宝集合:

public List<Treasure> ts = new LinkedList<Treasure>();

在检测线程中添加代码:

@Overridepublic void run() {while(true){if((System.currentTimeMillis()-gf.myplane.eatStart)/1000>=10){gf.myplane.back();//超级炮弹使用10秒,还原gf.myplane.count = 0;}if(gf.myplane.getLife()<=10&&r.nextInt(40)>=38){Treasure t = new Treasure(0,gf);//生命值小于10时系统随机刷出补血的珍宝gf.ts.add(t);}if((System.currentTimeMillis()-gf.start)/1000>=10){//一分半后,待打完所有普通敌人,boss开始出现if((System.currentTimeMillis()-gf.start)/1000%30==0&&r.nextInt(40)>=38){Treasure t = new Treasure(gf);//30秒一个节点,随机刷出珍宝gf.ts.add(t);}if(gf.es.size()==0){。。。}else{。。。}else{。。。}try {Thread.sleep(40);} catch (InterruptedException e) {e.printStackTrace();}//使CPU歇会}}

绘制珍宝:

for(int i=0;i<ts.size();i++){Treasure t = ts.get(i);t.draw(g);myplane.eat(t);}

九、产生珍宝,用于补血或升级子弹(雷霆战机)相关推荐

  1. (九)通过pygame使游戏人物发射子弹

    python飞机大战系列文章(按顺序) (一)通过pygame 将自己的图像添加到游戏中 (二)通过pygame让游戏人物 动起来 (三)通过pygame处理用户的鼠标键盘操作(事件和监听 (四)详解 ...

  2. 四、子弹类的创建,飞机子弹发射与无用子弹的销毁(雷霆战机)

    GitHub地址:https://github.com/WingedCat/AirWar 子弹类的创建: package cn.xpu.hcp.entity;import java.awt.Graph ...

  3. 七、完善:飞机生命值和子弹杀伤力(雷霆战机)

    GitHub地址:https://github.com/WingedCat/AirWar 在飞机类中新建变量: private int life = 100; 在子弹类中添加变量: private i ...

  4. Oracle 12c系列(九) | 通过unplug与plug方式升级pdb数据库

    对于Oracle数据库升级操作,每个版本之间的升级步骤均相似,首先升级Oracle软件,然后升级数据库内的数据字典表. 在Oracle12c中,当我们通过容器的方式对数据库进行整合后,其升级方式变得更 ...

  5. 机器学习数据挖掘笔记_25(PGM练习九:HMM用于分类)

    前言: 本次实验是用EM来学习HMM中的参数,并用学好了的HMM对一些kinect数据进行动作分类.实验内容请参考coursera课程:Probabilistic Graphical Models 中 ...

  6. 仿《雷霆战机》飞行射击手游开发--子弹、跟踪导弹和激光

    转载请注明:https://my.oschina.net/u/1986600/blog/863445 试玩版下载:https://pan.baidu.com/s/1mhLBNVa (Windows版) ...

  7. Android OTA 升级专栏文章导读

    Android OTA 升级专栏文章导读 文章目录 Android OTA 升级专栏文章导读 1. 快速入口 2. 简要介绍 1. 基础入门:<Android A/B 系统>系列 2. 核 ...

  8. CDH6官方文档中文系列(8)----Cloudera升级指南

    Cloudera升级指南 最近在学习cdh6的官方文档,网上也比较难找到中文的文档. 其实官方英文文档的阅读难度其实并不是很高,所以在这里在学习官方文档的过程中,把它翻译成中文,在翻译的过程中加深学习 ...

  9. 聚焦2020九大科技热点,本周三ELEXCON电子展大幕将启!(含展商名单+会议推荐)...

    本周 科技正在以超乎想象的速度改变世界!近几年,5G.IoT.自动驾驶.AI.大数据.智能制造.卫星互联网等前沿技术迅速发展,全球数字化进程不断加快,正掀起各产业变革新浪潮.与此同时,在中美大国博弈的 ...

最新文章

  1. springboot之定时任务
  2. windows 7 睡眠和休眠的区别
  3. 锅巴H264播放器地址和说明
  4. mysql load 占位符,mysql:用不存在的数据的占位符初始化摘要表
  5. 【Git/Github学习笔记】Git分支管理(一)
  6. 打分框手工输入分值的技术要领
  7. c++代码整洁之道pdf_软件工程-实践者的研究方式的阅读(代码大全后面再说)...
  8. 哪些软件翻译英文文献比较准确呢?
  9. 英特尔显卡不支持自定义分辨率N卡解决办法
  10. Photoshop制作水印简易教程
  11. 淘淘商城---8.8
  12. 【Java 8 新特性】Java 8 Collectors:joining()使用示例
  13. java多线程之Executors
  14. linux运维之批量升级
  15. c语言变量是直接寻址,直接寻址页变量
  16. Linux下默认字体是什么,linux默认字体是什么
  17. POJO有哪些要求?
  18. Ubuntu安装re2c和ninja
  19. Suzy心情很差因为被charge了late fee Day42 | 动态规划之背包问题,416. 分割等和子集
  20. linux命令下载电影,Linux命令行用wget下载精彩电影

热门文章

  1. 一点儿思考-如何做好一件事情
  2. 如何分析两张图片的对应关系?
  3. win10应用 UWP 使用MD5算法
  4. 怎么这么慢!:flask 和 node express 性能测试
  5. 图片找不同v1.1.6
  6. 已知子网掩码,确定ip地址范围
  7. Jackson丨艾美捷Jackson多重标记可同时检测多个目标
  8. spring zipkin mysql_spring cloud zipkin2 + mysql
  9. python求矩形面积_python实验:矩形面积
  10. 视频截图Failed to execute ‘toDataURL‘ on ‘HTMLCanvasElement‘: Tainted canvas处理