java飞机大战:传统与维新の对决(屎山)

2024-01-21 18:40

本文主要是介绍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飞机大战:传统与维新の对决(屎山)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/630488

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定