JAVA学习day46--飞机大战16飞行物入场2
2021/5/20 1:27:05
本文主要是介绍JAVA学习day46--飞机大战16飞行物入场2,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
天空移动
package day19; import java.awt.image.BufferedImage; /** 天空*/ public class Sky extends FlyingObject{ private static BufferedImage image; static{ image = loadImage("background.png"); } private int speed; //移动速度 private int y1; //第二张图的y坐标 /** 构造方法*/ public Sky(){ super(World.WINTH,World.HEIGHT,0,0); speed = 1; y1 = -World.HEIGHT; } /** step*/ public void step(){ y+=speed;//y+(向下) y1+=speed;//y1+(向下) if(y>=World.HEIGHT){//若y>=窗口的高,表示,表示已经移出去了 y-=World.HEIGHT;//则将y修改为负的窗口的高(挪到最上面去) } if(y1>=World.WINTH){//若y1>=窗口的高,表示,表示已经移出去了 y1-=World.HEIGHT;//则将y1修改为负的窗口的高(挪到最上面去) } } /**重写getImage() */ public BufferedImage getImage(){ return image;//直接返回image即可 }; }
主程序
package day19; import javax.swing.JFrame; import javax.swing.JPanel; import java.util.TimerTask; import java.util.Timer; import java.awt.Graphics; import java.util.Random; import java.util.Arrays; /** 整个游戏世界*/ public class World extends JPanel{ public static final int WINTH = 400;//窗口的宽 public static final int HEIGHT = 700;//窗口的高 private Sky sky = new Sky(); private Hero hero = new Hero(); private FlyingObject[] enemies = { new Airplane(), new BigAirplane(), new Bee() };//敌人(小敌机,大敌机,小蜜蜂) private Bullet[] bullets = {};//子弹数组 /** 生成敌人对象*/ public FlyingObject nextOne(){ Random rand = new Random();//随机数对象 int type = rand.nextInt(20);//0到19之间 if(type<5){//0到4,生成小蜜蜂 return new Bee(); }else if(type<12){//5到11,生成小敌机 return new Airplane(); }else{//12到19,生成大敌机 return new BigAirplane(); } } int enterIndex = 0;//敌人入场计数 /** 敌人(小敌机,大敌机,小蜜蜂)入场*/ public void enterAction(){//每10毫秒走一次 enterIndex++;//每10毫秒增1 if(enterIndex%40==0){//每400(40*10)毫秒走一次 FlyingObject obj = nextOne();//获取敌人对象 enemies = Arrays.copyOf(enemies,enemies.length+1);//扩容 enemies[enemies.length-1] = obj;//将敌人添加到末尾 } } int shootIndex =0;//子弹入场计数 /** 子弹入场*/ public void shootAction(){//每10毫秒走一次 shootIndex++;//没10毫秒曾1 if(shootIndex%30==0){//每300毫秒增加一次 Bullet[] bs = hero.shoot();//获取子弹对象 bullets =Arrays.copyOf(bullets,bullets.length+bs.length);//扩容 } } /** 飞行物移动*/ public void stepAction(){//每10毫秒走一次 sky.step();//天空东 for(int i=0;i<enemies.length;i++){//遍历所有敌人 enemies[i].step();//敌人动 } for(int i=0;i<bullets.length;i++){//遍历所有子弹 bullets[i].step();//子弹动 } } /** 启动程序的执行*/ public void action(){ Timer timer = new Timer();//定时器对象 int intervel = 10;//以毫秒为单位 timer.schedule(new TimerTask(){ public void run(){//定时做的事--每10毫秒执行 enterAction();//敌人 shootAction();//子弹入场 stepAction();//飞行物移动 repaint();//重画调用paint } },intervel,intervel);//定时计划 } /** 重写paint()画*/ public void paint(Graphics g){ sky.paintObject(g);//画天空 hero.paintObject(g);//画英雄机 for(int i=0;i<enemies.length;i++){ enemies[i].paintObject(g);//画敌人 } for(int i=0;i<bullets.length;i++){ enemies[i].paintObject(g);//画子弹 } } public static void main(String[] args) { JFrame frame = new JFrame(); World world = new World(); frame.add(world); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);; frame.setSize(WINTH,HEIGHT); frame.setLocationRelativeTo(null); frame.setVisible(true);//设置窗口可见 world.action();//启动程序的执行 } }
这篇关于JAVA学习day46--飞机大战16飞行物入场2的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26JAVA语音识别项目资料的收集与应用
- 2024-11-26Java语音识别项目资料:入门级教程与实战指南
- 2024-11-26SpringAI:Java 开发的智能新利器
- 2024-11-26Java云原生资料:新手入门教程与实战指南
- 2024-11-26JAVA云原生资料入门教程
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程
- 2024-11-26Springboot单体架构搭建资料:新手入门教程