包含知识点:窗口绘制 画图及双缓冲 碰撞检测 集合类的应用 鼠标键盘监听 碰撞检测

窗口绘制 画图及双缓冲 作用:显示游戏画面

集合类的应用: 用来存取需要画的元素(如飞机、敌机、子弹、飞机技能、爆炸效果等)

鼠标键盘监听:主要用来对游戏的控制(如飞机的移动,游戏的开始与暂停等)

碰撞检测:可判断飞机与敌机,子弹等的碰撞来做进一步的处理

然后来看代码及注释吧

绘制窗口的代码

public class Win extends JFrame {//建一个类继承JFrame来画图Win frame ;//声明对象frame
public void lunch(){this.setSize(123,322);//设置窗口大小this.setLocationRelativeTo(null);//设置窗口为中央位置this.setTitle("设置窗口");//设置窗口标题this.setVisible(true);//使窗口显现
}}

beijinglei

stati表是游戏状态

  //游戏状态 0未开始 1游戏运行 2暂停 3失败 4成功
static    int state=0;
    public void paint(Graphics g){count++;//绘制次数if(offScreenImage==null){//双缓冲图片为空就给图片添加图象offScreenImage=this.createImage(700,900);//创建双缓冲图片的大小}//获得该图片的画布Graphics gImage=offScreenImage.getGraphics();//填充每个画布gImage.fillRect(0,0,700,900);if(state==0){gImage.drawImage(aaa,0,0,null);//改变字体颜色gImage.setColor(Color.WHITE);//改变文字格式gImage.setFont(new Font("仿宋",Font.BOLD,40));//显示文字gImage.drawString("开始游戏",260,450);}if(state==1){objectList.removeAll(removeList);//删除集合removeAll里的烁有元素for (Gameplane object:objectList){object.paintSet(gImage);//用画笔画集合中的所有元素}}if(state==3){//改变字体颜色gImage.setColor(Color.RED);//改变文字格式gImage.setFont(new Font("仿宋",Font.BOLD,40));//显示文字gImage.drawString("游戏结束",260,450);}if(state==4){gImage.drawImage(aaa,0,0,null);//画结束时的画面//改变字体颜色gImage.setColor(Color.GREEN);//改变文字格式gImage.setFont(new Font("仿宋",Font.BOLD,40));//显示文字gImage.drawString("游戏通关",260,450);}//绘画爆炸效果图
//            gImage.drawImage(bbb, b0mb_x, b0mb_y, null);if(state==2){//改变字体颜色gImage.setColor(Color.WHITE);//改变文字格式gImage.setFont(new Font("仿宋",Font.BOLD,40));//显示文字gImage.drawString("游戏暂停",260,450);}//将缓冲区绘制好的图形整个绘制到·画布中g.drawImage(offScreenImage,0,0,null);}

碰撞检测段

/*检测矩形是否相交之后在花括号做具体处理,如将碰撞物移除,划爆炸等
具体在后面的代码里会有解释
*/if(this.getRec().intersects(enemyObj.getRec())){
}public  Rectangle getRec(){//先获得对象(如和飞机、子弹等一样大的矩形)return new Rectangle(x,y,25,25);//定义矩形大小及坐标}
}

鼠标键盘监听主要代码

//键盘按键添加例子this.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {super.keyPressed(e);if(e.getKeyCode()==81){
if(PlaneSkill.skill==20)
{ planeSkill.speed=12;PlaneSkill.skill=0;objectList.add(planeSkill);}}}});AAA //返回键盘值e.getKeyCode()
//鼠标按键添加例子
this.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {super.mouseClicked(e);}
});
//返回鼠标按键值mouseClicked.getButton

主类win的代码

import javax.swing.*;
import java.awt.*;
import java.math.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
public class win extends JFrame {static int score=0;//所得分数int enemyCount=0;//产生的敌机数量//游戏重绘次数int count=1;//游戏状态 0未开始 1游戏运行 2暂停 3失败 4成功static    int state=0;List<Drop> dropList=new ArrayList<>();//被删除物体的集合List<Gameplane> removeList=new ArrayList<>();//敌方战机集合List<EnemyObj> enemyObjs=new ArrayList<>();//技能集合List<PlaneSkill> planeSkills=new ArrayList<>();//我方子弹集合List<Gameplane> objectList=new ArrayList<>();List<BulletObj> bulletObjList=new ArrayList<>();List<BulletObj2> bulletObj2List=new ArrayList<>();//boss的子弹的集合List<BulletObj1> bulletObj1List=new ArrayList<>();//技能集合List<PlaneSkill> planeSkillList=new ArrayList<>();//bossEnemyObj1 enemyObj1=null;//飞机个体
PlaneSkill planeSkill=null;PlaneObj planeobj = new PlaneObj("D:/Plane/Plane/src/image/plane.png", 150, 400, 0, this);//游戏背景BgObj bgobj=new BgObj("D:/Plane/Plane/src/image/bg3.jpg",0,-800,2.0,this);//子弹BulletObj bulletobj=new BulletObj("D:/Plane/Plane/src/image/die04.png",planeobj.x+30,planeobj.y-40,3,this);
BulletObj bulletObj1;/*在学习绘图中,如果需要绘制一张图片,则需要获取这张图片通过Toolkit进行获取在getImage()方法中,需要填写图片的路径*/Image aaa=Toolkit.getDefaultToolkit().getImage("D:/Plane/Plane/src/image/bg3.jpg");//导入图片//游戏失败图片Image ccc=Toolkit.getDefaultToolkit().getImage("D:/Plane/Plane/src/image/bg11.webp");//定义双缓冲图片Image offScreenImage=null;public void lunch(){//将飞机及背景加入到集合中objectList.add(bgobj);objectList.add(planeobj);this.setTitle("飞机大战");
//为窗口添加开始鼠标事件this.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {super.mouseClicked(e);//System.out.println(e.getButton());//鼠标左键为1if(e.getButton()==1&&state==0) {//e.getButton()返回的为按键的数值   如果游戏状态为·0,且按下鼠标左键就会开始游戏state = 1;}
if((e.getButton()==3)&&(state==3||state==4)) {//如果游戏失败或游戏通关·点击鼠标右键就会将游戏状态初始化{win.score=0;//重置游戏分数】‘win.state=0;//重置游戏状态enemyCount=0;count=0;
planeobj.x=150;
planeobj.y=400;planeobj.life=3;planeSkill.skill=0;Drop.num1=0;for (BulletObj bulletObj: bulletObjList )//将屏幕上的我方飞机子弹移除并移除集合{bulletObj.x=-100;removeList.add(bulletobj);}for (BulletObj1 bulletObj1: bulletObj1List )//将屏幕上的敌方飞机子弹移除并移除集合{bulletObj1.x=-100;removeList.add((enemyObj1));}for (EnemyObj enemyObj: enemyObjs )//将屏幕上的敌方飞机移除并移除集合{enemyObj.x=-100;}enemyObj1=null;//使敌方boss为空不出场bulletObj1List.clear();//清空子弹集合objectList.removeAll(removeList);//在·大集合上清除元素}}
repaint();//进入画图方法}});//为游戏添加一个暂停事件this.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {super.keyPressed(e);//空格按下if(e.getKeyCode()==32){switch (state){case 1:state=2;break;case 2:state=1;break;}}}});
//        this.setLocationRelativeTo(null);//使窗口在屏幕中央位置this.setSize(700,900);//设置窗口大小this.setVisible(true);//使窗口显现while(true){if(state==1){createObj();repaint();//调用update()清除当前显示并再调用paint()方法}try{//使循环刷新页面减速Thread.sleep(25);}catch (Exception e){
e.printStackTrace();}}}@Overridepublic void paint(Graphics g){count++;//绘制次数if(offScreenImage==null){//双缓冲图片为空就给图片添加图象offScreenImage=this.createImage(700,900);//创建双缓冲图片的大小}//获得该图片的画布Graphics gImage=offScreenImage.getGraphics();//填充每个画布gImage.fillRect(0,0,700,900);if(state==0){gImage.drawImage(aaa,0,0,null);//改变字体颜色gImage.setColor(Color.WHITE);//改变文字格式gImage.setFont(new Font("仿宋",Font.BOLD,40));//显示文字gImage.drawString("开始游戏",260,450);}if(state==1){objectList.removeAll(removeList);//删除集合removeAll里的烁有元素for (Gameplane object:objectList){object.paintSet(gImage);//用画笔画集合中的所有元素}}if(state==3){//改变字体颜色gImage.setColor(Color.RED);//改变文字格式gImage.setFont(new Font("仿宋",Font.BOLD,40));//显示文字gImage.drawString("游戏结束",260,450);}if(state==4){gImage.drawImage(aaa,0,0,null);//画结束时的画面//改变字体颜色gImage.setColor(Color.GREEN);//改变文字格式gImage.setFont(new Font("仿宋",Font.BOLD,40));//显示文字gImage.drawString("游戏通关",260,450);}//绘画爆炸效果图
//            gImage.drawImage(bbb, b0mb_x, b0mb_y, null);if(state==2){//改变字体颜色gImage.setColor(Color.WHITE);//改变文字格式gImage.setFont(new Font("仿宋",Font.BOLD,40));//显示文字gImage.drawString("游戏暂停",260,450);}//将缓冲区绘制好的图形整个绘制到·画布中g.drawImage(offScreenImage,0,0,null);}// 装填子弹或敌机boolean un=true;public void createObj() {if(Drop.num1>=2&&un) {objectList.remove(planeobj);planeobj = new PlaneObj("D:/Plane/Plane/src/image/plane1.png", 150, 400, 0, this);objectList.add(planeobj);un=false;}if(Drop.num1<2&&!un){objectList.remove(planeobj);planeobj = new PlaneObj("D:/Plane/Plane/src/image/plane.png", 150, 400, 0, this);objectList.add(planeobj);un=true;}if(count%400==0){dropList.add(new Drop("D:/Plane/Plane/src/image/sky.png",4,this));objectList.add(dropList.get(dropList.size()-1));}//控制子弹生成速度if (count % 8 == 0) {if(Drop.num1<2) {bulletObjList.add(new BulletObj("D:/Plane/Plane/src/image/die04.png", planeobj.x + 30, planeobj.y - 35, 8, this));objectList.add(bulletObjList.get(bulletObjList.size() - 1));}else{bulletObjList.add(new BulletObj("D:/Plane/Plane/src/image/die04.png", planeobj.x+10 , planeobj.y - 35, 8, this));objectList.add(bulletObjList.get(bulletObjList.size() - 1));bulletObj2List.add(new BulletObj2("D:/Plane/Plane/src/image/die04.png", planeobj.x+90 , planeobj.y - 35, 8, this));objectList.add(bulletObj2List.get(bulletObj2List.size() - 1));}}if (count % 15 == 0&&enemyObj1==null) {//控制敌方飞机生成int p=(int)(1+Math.random()*5);enemyObjs.add(new EnemyObj("D:/Plane/Plane/src/image/enemy0"+p+".png", 4, this));objectList.add(enemyObjs.get(enemyObjs.size() - 1));enemyCount++;
//            System.out.println(enemyCount);}if (PlaneSkill.skill == 20) {//技能产生planeSkill =(new PlaneSkill("D:/Plane/Plane/src/image/bomb12.png",0,700,0,this));this.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {super.keyPressed(e);if(e.getKeyCode()==81){
if(PlaneSkill.skill==20)
{ planeSkill.speed=12;PlaneSkill.skill=0;objectList.add(planeSkill);}}}});}if (count % 24 == 0 && enemyObj1 != null&&enemyObj1.life>0){//控制boss子弹产生bulletObj1List.add(new BulletObj1("D:/Plane/Plane/src/image/bluecircleimg.png", enemyObj1.x + 111, enemyObj1.y + 206, 10, this));objectList.add(bulletObj1List.get(bulletObj1List.size() - 1));}if (enemyCount >= 80) {if(enemyObj1==null){enemyObj1 = new EnemyObj1("D:/Plane/Plane/src/image/enemy09.png", 0, 50, 3, this);objectList.add(enemyObj1);}}}public static void main(String[] args){win game=new win();game.lunch();}
}

所有物体图象(飞机、敌机、boss、子弹、技能等)的父类GamePlane类

GamePlane是个抽象类主要是规定了物体图像的相关属性(如图象、位置、速度、矩形大小)

import java.awt.*;
public abstract class Gameplane {Image img;//游戏元素的横坐标int x;//游戏元素的纵坐标int y;//游戏元素的宽;int width;//游戏元素的高int height;//游戏元素的速度double speed;//引入主界面win frame;//无参构造方法public Gameplane(){}//构造方法public Gameplane(String img,int x,int y,double speed,win frame){this.img=Toolkit.getDefaultToolkit().getImage(img);this.x=x;this.y=y;this.speed=speed;this.frame=frame;}
//构造方法public Gameplane(String img,win frame){this.img=Toolkit.getDefaultToolkit().getImage(img);this.frame=frame;}//构造方法public Gameplane(String img,int x,int y,int width,int height,double speed){this.img=Toolkit.getDefaultToolkit().getImage(img);this.x=x;this.y=y;this.width=width;this.height=height;this.speed=speed;}//返回图片public Image getImg(){return img;}//用img获取图片
public void setImg(String img){this.img=Toolkit.getDefaultToolkit().getImage(img);
}
//继承元素绘制自己的方法
public abstract  void paintSet(Graphics g);//获取当前元素矩形,是为碰撞检测而写public abstract Rectangle getRec();}

之后的游戏背景类、飞机类、敌机类、子弹类、技能类都是GamePlane的之类,对其进行实例化·

背景类:bgObj类

import java.awt.*;public class BgObj extends Gameplane {public BgObj() {super();}
//构造方法public BgObj(String img, int x, int y, double speed, win frame) {super(img, x, y, speed, frame);}
//画图方法主要是对图像的处理public void paintSet(Graphics g) {
g.drawImage(img,x,y,null);//将背景图像画在画布上
y+=1;//图象y坐标向前移动,即背景后移,由相对位置可得等于飞机在向前移动
if(y>=-10)//图片的循环移动y=-800;
/*在屏幕上显示得分情况+*/g.setFont(new Font("仿宋",Font.BOLD,20));g.setColor(Color.green);
g.drawString("得分:"+this.frame.score,10,50);}
//获取物体矩形的方法public Rectangle getRec() {
return null;//背景不需要碰撞检测所以返回值为空}}

飞机类PlanObj类

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;public class PlaneObj extends Gameplane{int life=3;//设置飞机的生命值public PlaneObj(){super();}public PlaneObj(String img,int x,int y,double speed,win frame){this.img=Toolkit.getDefaultToolkit().getImage(img);this.x=x;this.y=y;this.speed=speed;this.frame=frame;}public PlaneObj(String img, int x, int y, int width,int height,double speed) {super(img, x, y, width,height,speed);}public   void paintSet(Graphics g){g.drawImage(img,x,y,null);//画出飞机图片//飞机随着鼠标的;移动this.frame.addMouseMotionListener(new MouseAdapter() {@Overridepublic void mouseMoved(MouseEvent e){//鼠标监听事件x=e.getX()-52;//e.getX()返回值为鼠标坐标//两个if作用为防止飞机随鼠标移出窗口if(x<=0)x=0;if(x>580)x=600;y=e.getY()-41;//e.getY()返回值为鼠标坐标}});//在画布上显示飞机生命值PH以及飞机吃到的空头数量Numg.setFont(new Font("仿宋",Font.BOLD,20));g.setColor(Color.green);g.drawString("Plane HP:"+this.life,10,130);
g.drawString("Drop Num:"+Drop.num1,10,150);for (BulletObj1 bulletObj1: this.frame.bulletObj1List){//遍历boss的每个子弹if(this.getRec().intersects(bulletObj1.getRec()))//如果boss子弹和我方飞机碰撞结果为true{bulletObj1.x=-100;//将子弹移除窗口this.frame.removeList.add(bulletObj1);//将子弹从画布上删除/*飞机与敌方子弹碰撞后,如果有空投空投数量减一如果空投数为零那么飞机生命减一*/if(Drop.num1>0)Drop.num1--;else
life--;if(life==0)frame.state=3;}
}}//获取当前元素矩形,是为碰撞检测而写public Rectangle getRec(){return new Rectangle(x,y,100,80);//矩形的坐标即飞机坐标,矩形大小和飞机大小一样}}

敌机EnemyObj类

import java.math.*;
import java.awt.*;public class EnemyObj extends Gameplane{int y=40;public EnemyObj(){super();}public EnemyObj(String img,double speed,win frame){this.img= Toolkit.getDefaultToolkit().getImage(img);this.speed=speed;this.frame=frame;}public void setImg(String img){this.img=Toolkit.getDefaultToolkit().getImage(img);}//继承元素绘制自己的方法int x=(int)(Math.random()*5*100);public  void paintSet(Graphics g){g.drawImage(img,x,y,null);y+=speed;if(this.getRec().intersects(this.frame.planeobj.getRec())){//检测矩形是否相交this.x=-100;this.frame.removeList.add(this);if(Drop.num1>0)Drop.num1--;elsethis.frame.planeobj.life--;if(this.frame.planeobj.life<=0)//当飞机生名值为零是游戏状态state变为3游戏结束this.frame.state=3;}}//获取当前元素矩形,是为碰撞检测而写public  Rectangle getRec(){return new Rectangle(x,y,98,70);}}

子弹类

import java.awt.*;public class BulletObj extends Gameplane{public BulletObj(String img,int x,int y,double speed,win frame){this.img=Toolkit.getDefaultToolkit().getImage(img);this.x=x;this.y=y;this.speed=speed;this.frame=frame;}public   void paintSet(Graphics g){
g.drawImage(img,x,y,null);//画图
y-=speed;//子弹移动for (EnemyObj enemyObj:this.frame.enemyObjs){//遍历敌机if(this.getRec().intersects(enemyObj.getRec())){//检测矩形是否相交//画爆炸图for(int i=1;i<=7;i++){this.img=Toolkit.getDefaultToolkit().getImage("D:/Plane/Plane/src/image/explode/"+i+".gif");g.drawImage(img,this.x,this.y-30,null);}this.x=-100;enemyObj.x=-200;this.frame.score++;//分数加1if(PlaneSkill.skill<20)PlaneSkill.skill++;//技能的能量条加一/*移除子弹和敌机*/this.frame.removeList.add(enemyObj);this.frame.removeList.add(this);}}g.setFont(new Font("仿宋",Font.BOLD,30));g.setColor(Color.green);g.drawString("SPR:",10,100);if(PlaneSkill.skill==20)g.setColor(Color.RED);elseg.setColor(Color.YELLOW);System.out.println(PlaneSkill.skill);g.fillRect(80,80,PlaneSkill.skill*10,25);}//获取当前元素矩形,是为碰撞检测而写public  Rectangle getRec(){return new Rectangle(x,y,25,25);//定义矩形大小及坐标}
}

空投类(飞机吃两个及两个以上空头会进入升级形态)

import java.awt.*;public class Drop   extends Gameplane{int speed1=4;static int  num1=0;int y=40;public Drop(){super();}public Drop(String img,double speed,win frame){this.img= Toolkit.getDefaultToolkit().getImage(img);this.speed=speed;this.frame=frame;}public void setImg(String img){this.img=Toolkit.getDefaultToolkit().getImage(img);}//继承元素绘制自己的方法int x=(int)(Math.random()*5*100);//空投随机产生的位置public  void paintSet(Graphics g){g.drawImage(img,x,y,null);y+=speed;/*空投会左右移动,到窗口边缘时会改变速度方向*/if(x<0)speed1=-speed1;if(x>630)speed1=-speed1;
x+=speed1;
//碰撞检测if(this.getRec().intersects(this.frame.planeobj.getRec())){//检测矩形是否相交this.x=-100;this.frame.removeList.add(this);
num1++;}}//获取当前元素矩形,是为碰撞检测而写public  Rectangle getRec(){return new Rectangle(x,y,70,70);}}

下面的几个类和上面写过的几个类相似所以就没给注释

技能类

public class PlaneSkill extends Gameplane {static int skill=0;Image image2;public PlaneSkill() {super();}public PlaneSkill(String img, int x, int y, double speed, win frame) {super(img, x, y, speed, frame);}public void paintSet(Graphics g) {g.drawImage(img, x, y, null);
y-=speed;for ( EnemyObj enemyObj: this.frame.enemyObjs){if(this.getRec().intersects(enemyObj.getRec())) {for(int i=1;i<=7;i++){this.image2=Toolkit.getDefaultToolkit().getImage("D:/Plane/Plane/src/image/explode/"+i+".gif");g.drawImage(image2,enemyObj.x+30,enemyObj.y+30,null);}enemyObj.x = -100;this.frame.removeList.add(enemyObj);if(this.y==-600)this.frame.removeList.add(this);}       }}public Rectangle getRec() {return new Rectangle(x,y,700,103);}
}

敌方boss类

public class EnemyObj1 extends Gameplane {int life=50;Image image1;//另外声明一个接收图像的image1public EnemyObj1() {super();}public EnemyObj1(String img,int x,int y, double speed, win frame) {this.img = Toolkit.getDefaultToolkit().getImage(img);
this.x=x;
this.y=y;this.speed = speed;this.frame = frame;}
int b=0;
//定义表示boss血量的宽高int weight;int height=20;public void paintSet(Graphics g) {g.drawImage(img, x, y, null);if(x>=450)
{
speed=-speed;
}
if(x<0)
{speed=-speed;
}
x+=speed;
if(life<0){speed=0;y-=5 ;
}
for (BulletObj bulletObj:this.frame.bulletObjList){if(this.getRec().intersects(bulletObj.getRec())){for(int i=1;i<8;i++){this.image1=Toolkit.getDefaultToolkit().getImage("D:/Plane/Plane/src/image/explode/"+i+".gif");g.drawImage(image1,bulletObj.x,bulletObj.y-50,null);}bulletObj.x=-100;this.frame.removeList.add(bulletObj);life--;if(life==1)b=this.frame.count;if(life<=0) {if(this.frame.count-b>120)this.frame.state = 4;}}
}for (BulletObj2 bulletObj:this.frame.bulletObj2List){if(this.getRec().intersects(bulletObj.getRec())){for(int i=1;i<8;i++){this.image1=Toolkit.getDefaultToolkit().getImage("D:/Plane/Plane/src/image/explode/"+i+".gif");g.drawImage(image1,bulletObj.x,bulletObj.y-50,null);}bulletObj.x=-100;this.frame.removeList.add(bulletObj);life--;if(life==1)b=this.frame.count;if(life<=0) {if(this.frame.count-b>120)this.frame.state = 4;}}}
weight=life*5;g.setFont(new Font("仿宋",Font.BOLD,30));g.setColor(Color.GREEN);
g.drawString("boss HP",150,50);g.setColor(Color.green);g.fillRect(300,30,weight,height);}//获取当前元素矩形,是为碰撞检测而写public Rectangle getRec() {return new Rectangle(x, y, 248, 200);}

敌方子弹类

import java.awt.*;
public class BulletObj1 extends Gameplane{public BulletObj1(String img,int x,int y,double speed,win frame){this.img= Toolkit.getDefaultToolkit().getImage(img);this.x=x;this.y=y;this.speed=speed;this.frame=frame;}public   void paintSet(Graphics g){g.drawImage(img,x,y,null);y+=speed;}//获取当前元素矩形,是为碰撞检测而写public  Rectangle getRec(){return new Rectangle(x,y,25,25);}
}

飞机升级后新加的子弹类2

import java.awt.*;
public class BulletObj2 extends Gameplane {public BulletObj2(String img,int x,int y,double speed,win frame){this.img= Toolkit.getDefaultToolkit().getImage(img);this.x=x;this.y=y;this.speed=speed;this.frame=frame;}public   void paintSet(Graphics g){g.drawImage(img,x,y,null);//画图y-=speed;//子弹移动for (EnemyObj enemyObj:this.frame.enemyObjs){if(this.getRec().intersects(enemyObj.getRec())){//检测子弹2与敌机的矩形是否相交for(int i=1;i<=7;i++){this.img=Toolkit.getDefaultToolkit().getImage("D:/Plane/Plane/src/image/explode/"+i+".gif");g.drawImage(img,this.x,this.y-30,null);}this.x=-100;enemyObj.x=-200;this.frame.score++;this.frame.removeList.add(enemyObj);this.frame.removeList.add(this);}}}//获取当前元素矩形,是为碰撞检测而写public  Rectangle getRec(){return new Rectangle(x,y,25,25);//定义矩形大小及坐标}
}

到此代码部分就写完了

成品展示

Java飞机大战教程(大一课程设计)相关推荐

  1. java飞机大战流程图_JAVA课程设计-飞机大战

    JAVA课程设计-飞机大战 1.团队名称.团队成员介绍 1.1 团队名称:做个飞机哦 1.2团队成员介绍: 余俊良(组长):编写博客.游戏主界面设计与实现.英雄机与子弹类的实现.场景设计 林祥涛:游戏 ...

  2. java飞机大战流程图_JAVA课程设计——飞机大战(团队)

    1.团队名称.团队成员介绍 黄力强(组长) 带带带带...带佬 陈汉煜(组员) 划水.gif 2.Gitee部分 3.项目功能架构图与主要功能流程图 游戏流程图: 面向对象设计 包图: uml(关键类 ...

  3. 飞机大战纯c课程设计报告(里面的本来有图的,但是我就懒得导入)

    源码连接:https://blog.csdn.net/weixin_44688297/article/details/94836698 目录 一.需求分析 2 二.概要设计 3 三.详细设计 5 四. ...

  4. Java学习记录:Java飞机大战进阶版(敌人有子弹、有生命、有boss、有声音、还有大招一键清屏)

    Java飞机大战 序言 一.项目需求分析 二.各个对象类的设计 加载图片类Images 抽象类FlyingObject 天空类Sky 小敌机类Airplane 大敌机类BigAirplane 侦察机类 ...

  5. java质数和合数的程序_《java项目实训》课程设计计算器.doc

    <java项目实训>课程设计计算器.doc 课程设计报告课程名称JAVA项目实训课程设计设计名称基于JAVA计算器的设计与实现学生学号学生姓名学生学号学生姓名学生学号学生姓名学生学号学生姓 ...

  6. c语言大一课程设计,大一课程设计(C语言).doc

    大一课程设计(C语言) 一. 课程设计目的和要求 (一). 课程设计目的 本课程设计是重要的实践性环节之一,是在学生学习完<程序设计语言(C)>课程后进行的一次全面的综合练习.本课程设计的 ...

  7. java万年历课程设计代码,JAVA《万年历系统》课程设计

    JAVA<万年历系统>课程设计 面向对象程序设计面向对象程序设计 课程设计报告课程设计报告 题目题目 万年历系统万年历系统 专业专业 计算机科学与技术计算机科学与技术 班级班级 姓名姓名 ...

  8. pygame飞机大战关于子弹的设计(一)(含源码)

    Exe如下,欢迎试玩! 链接:https://pan.baidu.com/s/1Hw-DP98Jayr-jmE3ZCe9NA 提取码:2xsq 先上图,终极子弹: 我方子弹共有三种模型:基础子弹.双发 ...

  9. JAVA飞机大战游戏附源码

    JAVA飞机大战附源码 java飞机大战 效果图如下 java飞机大战 话不多说 直接上源码 窗体部分 package UI; //自定义窗体 //创建类 继承JFrame //创建构造方法,设置窗体 ...

  10. c++机房管理系统 大一课程设计

    一级标题c++机房管理系统 大一课程设计 项目要求 机房预约系统 1.机房预约系统需求 1.1 系统简介 学校现有几个规格不同的机房,由于使用时经常出现"撞车"现象,现开发一套机房 ...

最新文章

  1. 挣脱浏览器的束缚(7) - CrossSubDomainExecutor
  2. UA MATH574M 统计学习I 监督学习理论下
  3. 对MVC、MVP、MVVM的理解
  4. 【新年礼物】pmcaff会员大放送!
  5. boost::mpl模块实现find_if相关的测试程序
  6. C++:空间坐标映射到球面坐标/全景图
  7. excel打开密码忘记了_Excel工作表保护密码忘记了怎么办?这一招轻松去除密码...
  8. lotus notes 闪退_win7系统Lotus Notes邮箱闪退的解决方法
  9. 【高并发】解密导致并发问题的第三个幕后黑手——有序性问题
  10. 循环日程表(递归、分治)
  11. layui弄一个好看的数据表格样式
  12. python用渐变色画圆_画圆圈和设置渐变色
  13. 新的篇章:来自鲍尔默和艾洛普的公开信
  14. 微信PC端打开网站页面空白
  15. Windows文件类型
  16. 【无标题】STM32F407VGT6文件系统挂载TF卡学习笔记CUBEMXKEIL5
  17. 高性能变频调速控制操作实训系统
  18. 单N沟道低压MOS场效应管
  19. Tomcat7+maven启动时提示A child container failed during start的两种可能的解决方案
  20. PCI EXPRESS体系结构导读(读书笔记2)

热门文章

  1. SimpleFOC(八)—— 理论+实践 深度分析SVPWM
  2. 顾樵数学物理方法_圣彼得堡国立大学硕士研究生:物理与天文学
  3. Arcgis实现路线等线方向箭头表示
  4. HTTP 的概念、原理、工作机制、数据格式和REST(HenCoder学习总结,待整理中...)
  5. Pandas + Jinja,轻松创建一个 PDF 报表
  6. MySQL Workbench 6.3CE 汉化及使用教程(转载)
  7. 计算机网络——数据包抓取与分析
  8. java 录音解析文字_教你一键把录音转成文字,五种超实用方法随你挑!
  9. Jenkins详细教程
  10. 近世代数-群论基础二