本文主要是介绍java飞机大战:传统与维新の对决(屎山),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
嘛,众所周知中国的烟草税收是很高的,而在这种高税收的影响下,经过工业革命的影响,电子烟登上了历史的舞台,并且以顶针为首开启了扬雾运动......而传统派的芙蓉王*源对于这种新兴势力的敌对态度,必然会掀起一场战争.......(误)
游戏运行的大致样子
1.开始界面
2.运行时的截图
大致的问题
1.导致删除元素时候自己云里雾里~~~(优化产生了问题)
2.对之前建立的类已然忘记去如何使用~~~
3画面啥的基本上忘记了~~~
4.角色没有换皮啊啊~~~
现在把程序设计的大致思维图奉上~
1.游戏设计玩法的大致思路
2.游戏代码的结构
别的不多说把代码奉上~~~
在软件包utils下的类
1.程序核心GameWin
2.各种元素集合以及引用图片元素的类GameUtils
在软件包obj下的各个类
1.很必要的,影响其他类的类:dzGameObj
2.游戏背景的BgObj
3.与玩家相关的设定
1.玩家:PlaneObj
2.子弹:ShellObj
4.敌人相关的类
小卡拉米的类
1.Enemy1Obj
2.Enemy2Obj
3.Enemy3Obj
boss相关的类
1.boss的设定:BossObj
2.boss的子弹:BossBullet
boss出现时候的警告WaringObj
5.游戏中各种元素的类
补给的设定GiftObj
游戏爆炸的设定ExplodeObj
游戏各种图片素材的素材库.......
嘛,众所周知中国的烟草税收是很高的,而在这种高税收的影响下,经过工业革命的影响,电子烟登上了历史的舞台,并且以顶针为首开启了扬雾运动......而传统派的芙蓉王*源对于这种新兴势力的敌对态度,必然会掀起一场战争.......(误)
哈哈,玩笑就开到这里,其实这个java作业有很多的问题.....比如优化之类的,画面bug之类的,由于这个java作业我分了两次写,第一次建立的很多类,之后时隔了一个多月再次写,已经快把之前写的忘记的差不多啦QwQ。
游戏运行的大致样子
吐槽:啊啊啊,抠图电子烟,芙蓉王,各种小飞机好麻烦啊啊啊啊啊
1.开始界面
2.运行时的截图
大致的问题
1.导致删除元素时候自己云里雾里~~~(优化产生了问题)
但是大致是这边的元素删除有问题,个人感觉已经删了,然并卵~
2.对之前建立的类已然忘记去如何使用~~~
有些类没用过嘞,但是自己又懒的删了~
3画面啥的基本上忘记了~~~
会导致黑屏的问题了,我估计是前面的问题,但是因为前面的问题是老早写的,已然忘记又懒得去找了~~~
4.角色没有换皮啊啊~~~
判断语句换皮会黑屏啊,后面打算建立两个角色的类,但是自己又懒的整了,好麻烦~~~
现在把程序设计的大致思维图奉上~
1.游戏设计玩法的大致思路
2.游戏代码的结构
别的不多说把代码奉上~~~
在软件包utils下的类
1.程序核心GameWin
package utils;import obj.*;import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;import static java.lang.Thread.sleep;public class GameWin extends JFrame
{//角色选择的状态public static int character=0;//游戏的暂停与否//static boolean start=false;public static int state=0;//0为暂停,1为开始,3为失败,4为通关BgObj bgObj=new BgObj(GameUtils.bdImg,0,0,2);Image offScreenImage=null;//飞机设定PlaneObj dzplaneObj=new PlaneObj(GameUtils.dzplImg,88,94,500,500,0,this);PlaneObj wyplaneObj=new PlaneObj(GameUtils.wyplImg,89,104,500,500,0,this);//ShellObj dzshellObj=new ShellObj(GameUtils.yt1Img,7,36, dzplaneObj.getX(), dzplaneObj.getY(), 5,this);
//记录次数int count=1;//获取敌方的boss对象BossObj bossObj=new BossObj(GameUtils.wybosslImg,88,94,180,-100,3,this);WaringObj waringObj=new WaringObj(GameUtils.waringImg,236,234,500,0,0,this);//记录游戏得分public static int score=0;public void launch()//窗口{this.setVisible(true);this.setSize(1280,720);this.setLocationRelativeTo(null);this.setTitle("传统与维新の太空对决");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//所有需要绘制的游戏物体全部放入所有元素集合中进行绘制//GameUtils.gameobjList.add();//这里有大问题
// GameUtils.dzgameobjList.add(bgObj);
// if(character==1)
// {
// GameUtils.wygameobjList.add(bgObj);
// GameUtils.wygameobjList.add(wyplaneObj);
// }
// if(character==2){GameUtils.dzgameobjList.add(bgObj);GameUtils.dzgameobjList.add(dzplaneObj);}//GameUtils.dzgameobjList.add(bgObj);//GameUtils.dzgameobjList.add(dzplaneObj);//暂停的设定//this.addKeyListener();//开始的设定,角色的选择if(state==0){this.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {if (e.getButton() == 1 && state == 0){character = 1;state = 1;repaint();}//可行else{character = 2;state = 1;repaint();}}});/*this.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {if (e.getButton() == 3 && state == 0){character = 2;state = 1;repaint();}}});*/}//键盘暂停的设定this.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {if(e.getKeyCode()==32){if(state==1){state=2;} else if (state==2){state=1;}}}}) ;while(true){createObj();repaint();try{Thread.sleep(25);}catch (Exception e){e.printStackTrace();}}}@Overridepublic void paint(Graphics g){//初始界面以及初始化缓存if(offScreenImage==null){offScreenImage=createImage(1280,720);}Graphics gImage=offScreenImage.getGraphics();gImage.fillRect(0,0,1280,720);if(state==0){gImage.drawImage(GameUtils.bdImg, 0, 0, null);gImage.drawImage(GameUtils.wyImg, 30, 200, null);gImage.drawImage(GameUtils.dzImg, 750, 200, null);gImage.setColor(Color.white);gImage.setFont(new Font("仿宋", Font.BOLD,60));gImage.drawString("请鼠标左键点击或者右键点击来选择你的阵营",20,150);gImage.drawString("左键:芙蓉王*源",30,620);gImage.drawString("右键:尼古丁*真",750,620);}if(state==1){//游戏时间的记录count++;//将爆炸集合添加到所有元素集合中GameUtils.gameobjList.addAll(GameUtils.explodeObjList);//不再单独绘制每个元素,将每个元素打包成集合if(character==1)//有问题{for(int i=0;i<GameUtils.dzgameobjList.size()-1;i++){GameUtils.dzgameobjList.get(i).paintSelf(gImage);}}if(character==2){for(int i=0;i<GameUtils.dzgameobjList.size()-1;i++){GameUtils.dzgameobjList.get(i).paintSelf(gImage);}}for(int i=0;i<GameUtils.gameobjList.size()-1;i++){GameUtils.gameobjList.get(i).paintSelf(gImage);}//敲~~大的毛病~~,缓存图片不起作用~if(state==2){gImage.drawImage(GameUtils.bdImg,0,0,null);//g.drawImage(bgObj.getImg(), 0, 0, null);GameUtils.drawWord(gImage,"游戏暂停",Color.YELLOW,50,220,300);}if(state==3){{gImage.drawImage(GameUtils.bdImg, 0, 0, null);//g.drawImage(offScreenImage, 0, 0, null);//g.drawImage(bgObj.getImg(), 0, 0, null);GameUtils.drawWord(gImage, "游戏失败", Color.RED, 50, 220, 300);}}if(state==4){{gImage.drawImage(GameUtils.bdImg,0,0,null);//g.drawImage(bgObj.getImg(), 0, 0, null);GameUtils.drawWord(gImage,"游戏通关",Color.GREEN,50,220,300);}}//绘制积分面板GameUtils.drawWord(gImage,score+"分",Color.green,40,30,100);//将要移除元素丛所有元素集合中删除GameUtils.gameobjList.removeAll(GameUtils.removeList);}//双缓冲图片绘制在窗口,放这里会导致黑屏问题,好煞笔g.drawImage(offScreenImage, 0, 0, null);System.out.println(GameUtils.dzgameobjList.size());}//批量创建物体void createObj() {//子弹产生速度,图像有问题if (character == 1) {if (count % 15 == 0) {if (PlaneObj.times == 0) {GameUtils.dzshellObjList.add(new ShellObj(GameUtils.wyminImg, 17, 27, wyplaneObj.getX() + 43, wyplaneObj.getY() - 30, 5, this));GameUtils.dzgameobjList.add(GameUtils.dzshellObjList.get(GameUtils.dzshellObjList.size() - 1));}if (PlaneObj.times == 1) {GameUtils.dzshellObjList.add(new ShellObj(GameUtils.wymidImg, 20, 35, wyplaneObj.getX() + 43, wyplaneObj.getY() - 30, 5, this));GameUtils.dzgameobjList.add(GameUtils.dzshellObjList.get(GameUtils.dzshellObjList.size() - 1));}//这个三级强度太低,不行嘞
// if (PlaneObj.times >= 2) {
// GameUtils.dzshellObjList.add(new ShellObj(GameUtils.wymaxImg, 25, 40, wyplaneObj.getX() + 43, wyplaneObj.getY() - 30, 8, this));
// GameUtils.dzgameobjList.add(GameUtils.dzshellObjList.get(GameUtils.dzshellObjList.size() - 1));
// }}if(count%7==0&&PlaneObj.times>=2){{GameUtils.dzshellObjList.add(new ShellObj(GameUtils.wymaxImg, 25, 40, wyplaneObj.getX() + 43, wyplaneObj.getY() - 30, 8, this));GameUtils.dzgameobjList.add(GameUtils.dzshellObjList.get(GameUtils.dzshellObjList.size() - 1));}}//这边两个角色都有的应该可以优化在下面来减少一半的代码量//敌人生成if (count % 25 == 0) {GameUtils.enemy1ObjList.add(new Enemy1Obj(GameUtils.e1Img, 82, 62, (int) (Math.random() * 13) * 90, 0, 7, this));GameUtils.gameobjList.add(GameUtils.enemy1ObjList.get(GameUtils.enemy1ObjList.size() - 1));}if (count % 50 == 0) {GameUtils.enemy2ObjList.add(new Enemy2Obj(GameUtils.e2Img, 100, 76, (int) (Math.random() * 13) * 90, 0, 3, this));GameUtils.gameobjList.add(GameUtils.enemy2ObjList.get(GameUtils.enemy2ObjList.size() - 1));}if (count % 40 == 0) {GameUtils.enemy3ObjList.add(new Enemy3Obj(GameUtils.e3Img, 104, 74, (int) (Math.random() * 13) * 90, 0, 5, this));GameUtils.gameobjList.add(GameUtils.enemy3ObjList.get(GameUtils.enemy3ObjList.size() - 1));}//补给的生成if (count % 150 == 0) {GameUtils.giftObjList.add(new GiftObj(GameUtils.giftImg, 111, 78, (int) (Math.random() * 13) * 90, 0, 3, this));GameUtils.gameobjList.add(GameUtils.giftObjList.get(GameUtils.giftObjList.size() - 1));}//boss的生成if (count == 500 && (!GameUtils.gameobjList.contains(bossObj))) {GameUtils.gameobjList.add(bossObj);}//boss子弹if(count%40==0){if (GameUtils.gameobjList.contains(bossObj)) {GameUtils.bossBulletList.add(new BossBullet(GameUtils.yt1Img, 20, 35, bossObj.getX() + 43, bossObj.getY() - 30, 5, -10, this));GameUtils.gameobjList.add(GameUtils.bossBulletList.get(GameUtils.bossBulletList.size() - 1));if (count % 40 == 0) {GameUtils.bossBulletList.add(new BossBullet(GameUtils.yt5Img, 56, 330, (int) (Math.random() * 13) * 90, -500, 15, this));GameUtils.gameobjList.add(GameUtils.bossBulletList.get(GameUtils.bossBulletList.size() - 1));}}}}if (character == 2) {if (count % 12 == 0) {if (PlaneObj.times == 0) {GameUtils.dzshellObjList.add(new ShellObj(GameUtils.yt1Img, 17, 27, dzplaneObj.getX() + 43, dzplaneObj.getY() - 30, 5, this));GameUtils.dzgameobjList.add(GameUtils.dzshellObjList.get(GameUtils.dzshellObjList.size() - 1));}if (PlaneObj.times == 1) {GameUtils.dzshellObjList.add(new ShellObj(GameUtils.yt1Img, 17, 27, dzplaneObj.getX() + 43, dzplaneObj.getY() - 30, 5, this));GameUtils.dzgameobjList.add(GameUtils.dzshellObjList.get(GameUtils.dzshellObjList.size() - 1));GameUtils.dzshellObjList.add(new ShellObj(GameUtils.yt2Img, 17, 27, dzplaneObj.getX() + 20, dzplaneObj.getY() - 30, 5, this));GameUtils.dzgameobjList.add(GameUtils.dzshellObjList.get(GameUtils.dzshellObjList.size() - 1));}if (PlaneObj.times == 2) {GameUtils.dzshellObjList.add(new ShellObj(GameUtils.yt1Img, 17, 27, dzplaneObj.getX() + 43, dzplaneObj.getY() - 30, 5, this));GameUtils.dzgameobjList.add(GameUtils.dzshellObjList.get(GameUtils.dzshellObjList.size() - 1));}if (PlaneObj.times >= 3) {GameUtils.dzshellObjList.add(new ShellObj(GameUtils.yt1Img, 17, 27, dzplaneObj.getX() + 43, dzplaneObj.getY() - 30, 7, this));GameUtils.dzgameobjList.add(GameUtils.dzshellObjList.get(GameUtils.dzshellObjList.size() - 1));GameUtils.dzshellObjList.add(new ShellObj(GameUtils.yt2Img, 17, 27, dzplaneObj.getX() + 25, dzplaneObj.getY() - 30, 5, 4, this));GameUtils.dzgameobjList.add(GameUtils.dzshellObjList.get(GameUtils.dzshellObjList.size() - 1));GameUtils.dzshellObjList.add(new ShellObj(GameUtils.yt3Img, 17, 27, dzplaneObj.getX() + 50, dzplaneObj.getY() - 30, -5, 4, this));GameUtils.dzgameobjList.add(GameUtils.dzshellObjList.get(GameUtils.dzshellObjList.size() - 1));}}//敌人生成if(count%25==0){GameUtils.enemy1ObjList.add(new Enemy1Obj(GameUtils.e1Img,82,62,(int)(Math.random()*13)*90,0,7,this));GameUtils.gameobjList.add(GameUtils.enemy1ObjList.get(GameUtils.enemy1ObjList.size()-1));}if(count%50==0){GameUtils.enemy2ObjList.add(new Enemy2Obj(GameUtils.e2Img,100,76,(int)(Math.random()*13)*90,0,3,this));GameUtils.gameobjList.add(GameUtils.enemy2ObjList.get(GameUtils.enemy2ObjList.size()-1));}if(count%40==0){GameUtils.enemy3ObjList.add(new Enemy3Obj(GameUtils.e3Img,104,74,(int)(Math.random()*13)*90,0,5,this));GameUtils.gameobjList.add(GameUtils.enemy3ObjList.get(GameUtils.enemy3ObjList.size()-1));}//补给的生成if(count%150==0){GameUtils.giftObjList.add(new GiftObj(GameUtils.giftImg,111,78,(int)(Math.random()*13)*90,0,3,this));GameUtils.gameobjList.add(GameUtils.giftObjList.get(GameUtils.giftObjList.size()-1));}//boss的生成if(count==500&&(!GameUtils.gameobjList.contains(bossObj))){GameUtils.gameobjList.add(bossObj);}//boss子弹生成if(count%55==0){
// if (count == 130 && (!GameUtils.gameobjList.contains(bossObj))) {
// GameUtils.bossObjList.add(new BossObj(GameUtils.wybosslImg, 88, 94, (int) (Math.random() * 13) * 90, -40, 3, this));
// GameUtils.gameobjList.add(GameUtils.bossObjList.get(GameUtils.bossObjList.size() - 1));
// }if (GameUtils.gameobjList.contains(bossObj)){
// GameUtils.dzshellObjList.add(new ShellObj(GameUtils.wymidImg, 20, 35, bossObj.getX() + 43, bossObj.getY() - 100, -5, this));
// GameUtils.gameobjList.add(GameUtils.dzshellObjList.get(GameUtils.dzshellObjList.size() - 1));GameUtils.bossBulletList.add(new BossBullet(GameUtils.wymidImg, 20, 35, bossObj.getX() + 43, bossObj.getY() - 30, 5, this));GameUtils.gameobjList.add(GameUtils.bossBulletList.get(GameUtils.bossBulletList.size() - 1));if(count%20==0){GameUtils.bossBulletList.add(new BossBullet(GameUtils.wybossbuttleImg, 59, 565, (int)(Math.random()*13)*90, -500, 10, this));GameUtils.gameobjList.add(GameUtils.bossBulletList.get(GameUtils.bossBulletList.size() - 1));}}}}//waring出现消失的时间if((count==400)&&(!GameUtils.gameobjList.contains(waringObj))){GameUtils.gameobjList.add(waringObj);}if(count==500){GameUtils.removeList.add(waringObj);}}public static void main(String[] args){GameWin gameWin=new GameWin();gameWin.launch();}
}
2.各种元素集合以及引用图片元素的类GameUtils
package utils;import obj.*;import java.awt.*;
import java.util.ArrayList;
import java.util.List;public class GameUtils {public static Image bdImg = Toolkit.getDefaultToolkit().getImage("imgs/bg.jpg");public static Image dzImg = Toolkit.getDefaultToolkit().getImage("imgs/dz.jpg");public static Image wyImg = Toolkit.getDefaultToolkit().getImage("imgs/fr.jpg");public static Image dzplImg = Toolkit.getDefaultToolkit().getImage("imgs/dzp.png");public static Image wyplImg = Toolkit.getDefaultToolkit().getImage("imgs/wyp.png");public static Image dzbosslImg = Toolkit.getDefaultToolkit().getImage("imgs/dzboss.png");public static Image wybosslImg = Toolkit.getDefaultToolkit().getImage("imgs/wyboss.png");public static Image e1Img = Toolkit.getDefaultToolkit().getImage("imgs/e1.png");public static Image e2Img = Toolkit.getDefaultToolkit().getImage("imgs/e2.png");public static Image e3Img = Toolkit.getDefaultToolkit().getImage("imgs/e3.png");public static Image yt1Img = Toolkit.getDefaultToolkit().getImage("imgs/dzbuttle/1yt.png");public static Image yt2Img = Toolkit.getDefaultToolkit().getImage("imgs/dzbuttle/2yt.png");public static Image yt3Img = Toolkit.getDefaultToolkit().getImage("imgs/dzbuttle/3yt.png");public static Image yt4Img = Toolkit.getDefaultToolkit().getImage("imgs/dzbuttle/4yt.png");public static Image giftImg = Toolkit.getDefaultToolkit().getImage("imgs/gift.png");/*public static Image boom1Img =Toolkit.getDefaultToolkit().getImage("imgs/boom/boom1.gif");public static Image boom2Img =Toolkit.getDefaultToolkit().getImage("imgs/boom/boom2.gif");public static Image boom3Img =Toolkit.getDefaultToolkit().getImage("imgs/boom/boom3.gif");public static Image boom4Img =Toolkit.getDefaultToolkit().getImage("imgs/boom/boom4.gif");public static Image boom5Img =Toolkit.getDefaultToolkit().getImage("imgs/boom/boom5.gif");public static Image boom6Img =Toolkit.getDefaultToolkit().getImage("imgs/boom/boom6.gif");*/
//警告标志public static Image waringImg = Toolkit.getDefaultToolkit().getImage("imgs/waring.png");//目前打算作为丁真boss的攻击方式public static Image yt5Img = Toolkit.getDefaultToolkit().getImage("imgs/dzbuttle/yt5.png");public static Image wymaxImg = Toolkit.getDefaultToolkit().getImage("imgs/wybuttle/wymax.png");public static Image wymidImg = Toolkit.getDefaultToolkit().getImage("imgs/wybuttle/wymid.png");public static Image wyminImg = Toolkit.getDefaultToolkit().getImage("imgs/wybuttle/wymin.png");public static Image wybossbuttleImg = Toolkit.getDefaultToolkit().getImage("imgs/wybuttle/wybossb.png");//飞机子弹集合public static List<ShellObj> dzshellObjList = new ArrayList<>();public static List<ShellObj> wyshellObjList = new ArrayList<>();public static List<EnemyBulletObj> enemyBulletObjList = new ArrayList<>();public static List<BossBullet> bossBulletList = new ArrayList<>();//二级飞机子弹集合//public static List<DoubleShellObj> dzdoubleShellObjList = new ArrayList<>();//public static List<DoubleShellObj> wydoubleShellObjList=new ArrayList<>();//三级飞机子弹集合//public static List<TripleShellObj> dztripleShellObjList = new ArrayList<>();//所有元素的集合public static List<dzGameObj> gameobjList = new ArrayList<>();public static List<dzGameObj> dzgameobjList = new ArrayList<>();public static List<dzGameObj> wygameobjList = new ArrayList<>();//敌人的集合public static List<Enemy1Obj> enemy1ObjList = new ArrayList<>();public static List<Enemy2Obj> enemy2ObjList = new ArrayList<>();public static List<Enemy3Obj> enemy3ObjList = new ArrayList<>();public static List<BossObj> bossObjList = new ArrayList<>();//删除游戏窗口的集合public static List<dzGameObj> removeList = new ArrayList<>();//爆炸集合public static List<ExplodeObj> explodeObjList = new ArrayList<>();public static List<GiftObj> giftObjList = new ArrayList<>();//用来绘制文字的public static void drawWord(Graphics gImage, String str, Color color, int size, int x, int y){gImage.setColor(color);gImage.setFont(new Font("仿宋",Font.BOLD,size));gImage.drawString(str,x,y);}
}
在软件包obj下的各个类
1.很必要的,影响其他类的类:dzGameObj
package obj;import utils.GameWin;import java.awt.*;//父类
public class dzGameObj
{//元素图片Image img;//元素大小int width;int height;int x;int y;double speed;double speedx;double speedy;GameWin frame;//set and getpublic Image getImg() {return img;}public void setImg(Image img) {this.img = img;}public int getWidth() {return width;}public void setWidth(int width) {this.width = width;}public int getHeight() {return height;}public void setHeight(int height) {this.height = height;}public int getX() {return x;}public void setX(int x) {this.x = x;}public int getY() {return y;}public void setY(int y) {this.y = y;}public double getSpeed() {return speed;}public void setSpeedx(double speedx) {this.speed = speedx;}public double getSpeedx() {return speed;}public void setSpeedy(double speedy) {this.speed = speedy;}public double getSpeedy() {return speed;}public void setSpeed(double speed) {this.speed = speed;}public GameWin getFrame() {return frame;}public void setFrame(GameWin frame) {this.frame = frame;}//构造方法public dzGameObj() {}public dzGameObj(Image img, int x, int y, double speed) {this.img = img;this.x = x;this.y = y;this.speed = speed;}public dzGameObj(int x, int y) {this.x = x;this.y = y;}public dzGameObj(Image img, int width, int height, int x, int y, double speed, GameWin frame) {this.img = img;this.width = width;this.height = height;this.x = x;this.y = y;this.speed = speed;this.frame = frame;}public dzGameObj(Image img, int width, int height, int x, int y, double speedx,double speedy, GameWin frame) {this.img = img;this.width = width;this.height = height;this.x = x;this.y = y;this.speedx = speedx;this.speedy=speedy;this.frame = frame;}//绘制元素自身的方法public void paintSelf(Graphics g){g.drawImage(img,x,y,null);}public Rectangle getRec(){return new Rectangle(x,y,width,height);}
}
2.游戏背景的BgObj
package obj;import utils.GameUtils;
import utils.GameWin;import java.awt.*;public class BgObj extends dzGameObj
{public BgObj() {super();}public BgObj(Image img, int width, int height, int x, int y, double speed, GameWin frame) {super(img, width, height, x, y, speed, frame);}/* @Overridepublic Image getImg() {return super.getImg();}*/public BgObj(Image img, int x, int y, double speed) {super(img, x, y, speed);}@Overridepublic void paintSelf(Graphics g) {super.paintSelf(g);y+=speed;if(y>=0){y = 0;GameUtils.removeList.add(this);}}@Overridepublic Rectangle getRec() {return super.getRec();}
}
3.与玩家相关的设定
1.玩家:PlaneObj
package obj;import utils.GameUtils;
import utils.GameWin;import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;public class PlaneObj extends dzGameObj
{public static int HP=6;//记录当前获得补给次数public static int times=0;public static int shellhp=1;@Overridepublic Image getImg() {return super.getImg();}public PlaneObj() {super();}public PlaneObj(Image img, int x, int y, double speed) {super(img, x, y, speed);}public PlaneObj(Image img, int width, int height, int x, int y, double speed, GameWin frame) {super(img, width, height, x, y, speed, frame);//移动设定this.frame.addMouseMotionListener(new MouseAdapter() {@Overridepublic void mouseMoved(MouseEvent e) {PlaneObj.super.x=e.getX()-44;PlaneObj.super.y=e.getY()-50;}});}@Overridepublic void paintSelf(Graphics g) {super.paintSelf(g);//飞机消失的判定if(HP<=0){this.x=-200;this.y=-200;GameUtils.removeList.add(this);GameWin.state=3;}//碰撞设定//敌方飞机与我方飞机的碰撞for (Enemy1Obj enemy1Obj:GameUtils.enemy1ObjList){if(this.getRec().intersects(enemy1Obj.getRec())){//碰撞爆炸动画ExplodeObj explodeObj=new ExplodeObj(x,y);GameUtils.explodeObjList.add(explodeObj);GameUtils.removeList.add(explodeObj);enemy1Obj.setX(-100);enemy1Obj.setX(-100);this.x=-200;this.y=-200;GameUtils.removeList.add(enemy1Obj);//这有bug,得注释GameUtils.removeList.add(this);HP--;}}for (Enemy2Obj enemy2Obj:GameUtils.enemy2ObjList){if(this.getRec().intersects(enemy2Obj.getRec())){//碰撞爆炸动画ExplodeObj explodeObj=new ExplodeObj(x,y);GameUtils.explodeObjList.add(explodeObj);GameUtils.removeList.add(explodeObj);enemy2Obj.setX(-100);enemy2Obj.setX(-100);this.x=-200;this.y=-200;GameUtils.removeList.add(enemy2Obj);GameUtils.removeList.add(this);HP--;}}for (Enemy3Obj enemy3Obj:GameUtils.enemy3ObjList){if(this.getRec().intersects(enemy3Obj.getRec())){//碰撞爆炸动画ExplodeObj explodeObj=new ExplodeObj(x,y);GameUtils.explodeObjList.add(explodeObj);GameUtils.removeList.add(explodeObj);enemy3Obj.setX(-100);enemy3Obj.setX(-100);this.x=-200;this.y=-200;GameUtils.removeList.add(enemy3Obj);GameUtils.removeList.add(this);HP--;}}//我方飞机与补给的碰撞for(GiftObj giftObj: GameUtils.giftObjList){if(this.getRec().intersects(giftObj.getRec())){giftObj.setX(-100);giftObj.setY(-100);GameUtils.removeList.add(giftObj);times++;if (GameWin.character == 1) {if (shellhp <= 3)shellhp++;}}}//飞机碰撞boss子弹后消失for(BossBullet bossBullet:GameUtils.bossBulletList){if(this.getRec().intersects(bossBullet.getRec())){//碰撞爆炸动画ExplodeObj explodeObj=new ExplodeObj(x,y);GameUtils.explodeObjList.add(explodeObj);GameUtils.removeList.add(explodeObj);bossBullet.setY(-100);bossBullet.setX(-100);GameUtils.removeList.add(bossBullet);HP--;}}//白色矩形g.setColor(Color.WHITE);g.fillRect(300,700,500,10);//红色矩形g.setColor(Color.RED);g.fillRect(300,700,HP*500/6,10);}@Overridepublic Rectangle getRec() {return super.getRec();}
}
2.子弹:ShellObj
package obj;import utils.GameUtils;
import utils.GameWin;import java.awt.*;public class ShellObj extends dzGameObj
{public ShellObj() {super();}public ShellObj(Image img, int x, int y, double speed) {super(img, x, y, speed);}public ShellObj(Image img, int width, int height, int x, int y, double speed, GameWin frame) {super(img, width, height, x, y, speed, frame);}public ShellObj(Image img, int width, int height, int x, int y, double speedx, double speedy, GameWin frame) {super(img, width, height, x, y, speedx, speedy, frame);}@Overridepublic void paintSelf(Graphics g) {super.paintSelf(g);//子弹的移动实现y -= speed;//dz子弹升级后的移动实现if (GameWin.character == 2&& PlaneObj.times>=2){y-=speedy;x-=speedx;//x+=speedx;}//wy子弹消失的判定if (GameWin.character == 1) {int zdhp = PlaneObj.shellhp;if (zdhp == 0) {this.setX(-100);this.setY(-100);GameUtils.removeList.add(this);}for (Enemy1Obj enemy1Obj : GameUtils.enemy1ObjList) {if (this.getRec().intersects(enemy1Obj.getRec())) {zdhp--;}}for (Enemy2Obj enemy2Obj : GameUtils.enemy2ObjList) {if (this.getRec().intersects(enemy2Obj.getRec())) {zdhp--;}}for (Enemy3Obj enemy3Obj : GameUtils.enemy3ObjList) {if (this.getRec().intersects(enemy3Obj.getRec())) {zdhp--;}}}if (GameWin.character == 2){int zdhp=1;if (zdhp == 0) {this.setX(-100);this.setY(-100);GameUtils.removeList.add(this);}for (Enemy1Obj enemy1Obj : GameUtils.enemy1ObjList) {if (this.getRec().intersects(enemy1Obj.getRec())) {zdhp--;}}for (Enemy2Obj enemy2Obj : GameUtils.enemy2ObjList) {if (this.getRec().intersects(enemy2Obj.getRec())) {zdhp--;}}for (Enemy3Obj enemy3Obj : GameUtils.enemy3ObjList) {if (this.getRec().intersects(enemy3Obj.getRec())) {zdhp--;}}}if(y<0){GameUtils.removeList.add(this);}}@Overridepublic Rectangle getRec() {return super.getRec();}
}
4.敌人相关的类
小卡拉米的类
1.Enemy1Obj
package obj;import utils.GameUtils;
import utils.GameWin;import java.awt.*;public class Enemy1Obj extends dzGameObj
{public Enemy1Obj() {super();}public Enemy1Obj(Image img, int width, int height, int x, int y, double speed, GameWin frame) {super(img, width, height, x, y, speed, frame);}@Overridepublic void paintSelf(Graphics g) {super.paintSelf(g);y+=speed;for(ShellObj shellObj: GameUtils.dzshellObjList){if(this.getRec().intersects(shellObj.getRec())){//碰撞爆炸动画ExplodeObj explodeObj=new ExplodeObj(x,y);GameUtils.explodeObjList.add(explodeObj);GameUtils.removeList.add(explodeObj);// shellObj.setX(-100);
// shellObj.setY(-100);
// GameUtils.removeList.add(shellObj);this.x=-200;this.y=-200;GameUtils.removeList.add(this);GameWin.score++;}}if(this.y>720){GameUtils.removeList.add(this);}}@Overridepublic Rectangle getRec() {return super.getRec();}public Enemy1Obj(Image img, int x, int y, double speed) {super(img, x, y, speed);}
}
2.Enemy2Obj
package obj;import utils.GameUtils;
import utils.GameWin;import java.awt.*;public class Enemy2Obj extends dzGameObj
{//设定血量int health=9;public Enemy2Obj() {super();}public Enemy2Obj(Image img, int x, int y, double speed) {super(img, x, y, speed);}public Enemy2Obj(Image img, int width, int height, int x, int y, double speed, GameWin frame) {super(img, width, height, x, y, speed, frame);}@Overridepublic void paintSelf(Graphics g) {super.paintSelf(g);y+=speed;//我方飞机子弹击中碰撞判定for(ShellObj shellObj: GameUtils.dzshellObjList){if(this.getRec().intersects(shellObj.getRec())&&health>0){shellObj.setX(-100);shellObj.setY(-100);GameUtils.removeList.add(shellObj);health-=PlaneObj.shellhp;}else if(this.getRec().intersects(shellObj.getRec())&&health<=0){//碰撞爆炸动画ExplodeObj explodeObj=new ExplodeObj(x,y);GameUtils.explodeObjList.add(explodeObj);GameUtils.removeList.add(explodeObj);// shellObj.setX(-100);
// shellObj.setY(-100);
// GameUtils.removeList.add(shellObj);this.x=-200;this.y=-200;GameUtils.removeList.add(this);GameWin.score+=3;}}if(this.y>720){GameUtils.removeList.add(this);}}@Overridepublic Rectangle getRec() {return super.getRec();}
}
3.Enemy3Obj
package obj;import utils.GameUtils;
import utils.GameWin;import java.awt.*;public class Enemy3Obj extends dzGameObj
{ int health=2;public Enemy3Obj() {super();}public Enemy3Obj(Image img, int x, int y, double speed) {super(img, x, y, speed);}public Enemy3Obj(Image img, int width, int height, int x, int y, double speed, GameWin frame) {super(img, width, height, x, y, speed, frame);}@Overridepublic void paintSelf(Graphics g) {super.paintSelf(g);y+=speed;for(ShellObj shellObj: GameUtils.dzshellObjList){if(this.getRec().intersects(shellObj.getRec())&&health>0){shellObj.setX(-100);shellObj.setY(-100);GameUtils.removeList.add(shellObj);health-=PlaneObj.shellhp;}else if(this.getRec().intersects(shellObj.getRec())&&health<=0){//碰撞爆炸动画ExplodeObj explodeObj=new ExplodeObj(x,y);GameUtils.explodeObjList.add(explodeObj);GameUtils.removeList.add(explodeObj);// shellObj.setX(-100);
// shellObj.setY(-100);
// GameUtils.removeList.add(shellObj);this.x=-200;this.y=-200;GameUtils.removeList.add(this);GameWin.score+=2;}}if(this.y>800){GameUtils.removeList.add(this);}}@Overridepublic Rectangle getRec() {return super.getRec();}
}
boss相关的类
1.boss的设定:BossObj
package obj;import utils.GameUtils;
import utils.GameWin;import java.awt.*;public class BossObj extends dzGameObj
{int health=30;public BossObj() {super();}public BossObj(Image img, int x, int y, double speed) {super(img, x, y, speed);}public BossObj(int x, int y) {super(x, y);}public BossObj(Image img, int width, int height, int x, int y, double speed, GameWin frame) {super(img, width, height, x, y, speed, frame);}@Overridepublic void paintSelf(Graphics g) {super.paintSelf(g);if(y<150){y+=speed;}else{x+=speed;if(x<0||x>1280){speed=-speed;}}//我方子弹命中bossfor(ShellObj shellObj: GameUtils.dzshellObjList){if (this.getRec().intersects(shellObj.getRec())){//碰撞爆炸动画ExplodeObj explodeObj = new ExplodeObj(x, y);GameUtils.explodeObjList.add(explodeObj);GameUtils.removeList.add(explodeObj);shellObj.setX(-100);shellObj.setY(-100);GameUtils.removeList.add(shellObj);health--;if(health<=0){this.setX(-100);this.setY(-100);GameUtils.removeList.add(this);GameWin.state=4;}}}//白色矩形g.setColor(Color.WHITE);g.fillRect(300,40,500,10);//红色矩形g.setColor(Color.RED);g.fillRect(300,40,health*500/30,10);}@Overridepublic Rectangle getRec() {return super.getRec();}
}
2.boss的子弹:BossBullet
package obj;import utils.GameUtils;
import utils.GameWin;import java.awt.*;
import java.util.Random;public class BossBullet extends dzGameObj
{public BossBullet() {super();}public BossBullet(Image img, int x, int y, double speed) {super(img, x, y, speed);}public BossBullet(int x, int y) {super(x, y);}public BossBullet(Image img, int width, int height, int x, int y, double speed, GameWin frame) {super(img, width, height, x, y, speed, frame);}public BossBullet(Image img, int width, int height, int x, int y, double speedx, double speedy, GameWin frame) {super(img, width, height, x, y, speedx, speedy, frame);}@Overridepublic void paintSelf(Graphics g) {super.paintSelf(g);y+=speed;//int rand=(int)(Math.random()*5) + 10;if (GameWin.character ==1){int rand=(int)(Math.random()*5) + 10;y-=speedy;if(rand>=5) x-=speedx;if(rand<10) x+=speedx;
// if(GameWin.bossObj.getX()>=640)x-=speedx;
// if(GameWin.bossObj.getX()<640)x+=speedx;//x+=speedx;}if(this.y>800){GameUtils.removeList.add(this);}}@Overridepublic Rectangle getRec() {return super.getRec();}
}
boss出现时候的警告WaringObj
package obj;import utils.GameWin;import java.awt.*;public class WaringObj extends dzGameObj
{public WaringObj() {super();}public WaringObj(Image img, int x, int y, double speed) {super(img, x, y, speed);}public WaringObj(int x, int y) {super(x, y);}public WaringObj(Image img, int width, int height, int x, int y, double speed, GameWin frame) {super(img, width, height, x, y, speed, frame);}public WaringObj(Image img, int width, int height, int x, int y, double speedx, double speedy, GameWin frame) {super(img, width, height, x, y, speedx, speedy, frame);}@Overridepublic void paintSelf(Graphics g) {super.paintSelf(g);}
}
5.游戏中各种元素的类
补给的设定GiftObj
package obj;import utils.GameUtils;
import utils.GameWin;import java.awt.*;public class GiftObj extends dzGameObj
{public GiftObj() {super();}public GiftObj(Image img, int x, int y, double speed) {super(img, x, y, speed);}public GiftObj(int x, int y) {super(x, y);}public GiftObj(Image img, int width, int height, int x, int y, double speed, GameWin frame) {super(img, width, height, x, y, speed, frame);}@Overridepublic void paintSelf(Graphics g) {super.img=GameUtils.giftImg;super.width=111;super.height=78;super.paintSelf(g);y+=speed;if(this.y>800){GameUtils.removeList.add(this);}}@Overridepublic Rectangle getRec() {return super.getRec();}
}
游戏爆炸的设定ExplodeObj
package obj;import java.awt.*;public class ExplodeObj extends dzGameObj
{//定义一个image类型的静态数组来存放爆炸图static Image[] explodePic=new Image[6];//定义变量来存放爆炸图次数int explodeCount=0;//定义一个静态代码块来将爆炸图片放到数组当中static{for(int i=0;i< explodePic.length;i++){explodePic[i]=Toolkit.getDefaultToolkit().getImage("imgs/boom/boom"+(i+1)+".gif");}}@Overridepublic void paintSelf(Graphics g) {if(explodeCount<6){super.img=explodePic[explodeCount];super.paintSelf(g);explodeCount++;}//super.paintSelf(g);}public ExplodeObj(int x, int y) {super(x, y);}
}
游戏各种图片素材的素材库.......
留言:害,java其实自己根本没怎么学过,平时自己基本上只研究研究c++之类的,所以这个java代码写的很烂,加上之后也不打算打开修改这个不完善的代码了,就干脆发出来,看各位是否需要之类的,或者有大佬对我这个屎山进行修改是最好的,如果大佬发现这个代码怎么修完美也希望能告诉鄙人哇~
后记:为什么顶针能射这么多烟弹,问就是顶针电子烟换弹容易,为什么王⚪能最后射这么快,问就是抽了芙蓉王赛过活神仙
还有电子烟boss本人一开始是打算让boss随机射左射右的,但是加了随机数设定和其他各种设定也没搞出想要的结果就干脆让boss只斜射一边了qwq
这篇关于java飞机大战:传统与维新の对决(屎山)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!