飞机大战脚本组成

1.有一个所有物体的父物体GameObject,然后就是一堆物体继承于他,等到他的属性于函数。
2.窗口组件
3.工具脚本(负责做一些杂事和存放图片)

代码

  1. GameObject
package object;import utils.GameWindow;import java.awt.*;public class GameObject {public Image image;public int x;public int y;public int width;public int height;public double speed;public GameWindow fram;public Image getImage() {return image;}public void setImage(Image image) {this.image = image;}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 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 double getSpeed() {return speed;}public void setSpeed(double speed) {this.speed = speed;}public GameWindow getFram() {return fram;}public void setFram(GameWindow fram) {this.fram = fram;}public GameObject(Image image, int x, int y, int width, int height, double speed, GameWindow fram) {this.image = image;this.x = x;this.y = y;this.width = width;this.height = height;this.speed = speed;this.fram = fram;}public GameObject(Image image, int x, int y, double speed) {this.image = image;this.x = x;this.y = y;this.speed = speed;}public GameObject(int x, int y, int width, int height) {this.x = x;this.y = y;this.width = width;this.height = height;}public GameObject(int x, int y) {this.x = x;this.y = y;}public GameObject() {//无参构造}public void paintSelf(Graphics gImage){gImage.drawImage(image,x,y,null);}public Rectangle getRec(){return new Rectangle(x,y,width,height);}}
  1. 背景
package object;import utils.GameWindow;import java.awt.*;public class bgObj extends GameObject {public bgObj(Image image, int x, int y, int width, int height, double speed, GameWindow fram) {super(image, x, y, width, height, speed, fram);}public bgObj(Image image, int x, int y, double speed) {super(image, x, y, speed);}public bgObj() {super();}@Overridepublic Image getImage() {return super.getImage();}@Overridepublic void paintSelf(Graphics gImage) {super.paintSelf(gImage);//y+=speed;}
}
  1. 玩家
package object;import utils.GameWindow;import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;public class Plane extends GameObject{@Overridepublic Image getImage() {return super.getImage();}public Plane(Image image, int x, int y, int width, int height, double speed, GameWindow fram) {super(image, x, y, width, height, speed, fram);fram.addMouseMotionListener(new MouseAdapter() {@Overridepublic void mouseMoved(MouseEvent e) {//跟随鼠标移动Plane.super.x=e.getX()-11;//鼠标位置减去飞机位置的一半相当于鼠标在飞机中间Plane.super.y=e.getY()-16;}});}public Plane(Image image, int x, int y, double speed) {super(image, x, y, speed);}public Plane() {super();}@Overridepublic void paintSelf(Graphics gImage) {gImage.drawImage(image,x,y,width,height,null);//与敌方boss碰撞死亡if (this.fram.bossObj!=null&&this.getRec().intersects(this.fram.bossObj.getRec())){this.fram.state=3;this.fram.repaint();}}@Overridepublic Rectangle getRec() {return super.getRec();}
}
  1. 子弹
package object;import utils.GameUtils;
import utils.GameWindow;import java.awt.*;public class shellObj extends GameObject{@Overridepublic Image getImage() {return super.getImage();}public shellObj(Image image, int x, int y, int width, int height, double speed, GameWindow fram) {super(image, x, y, width, height, speed, fram);}public shellObj() {super();}@Overridepublic void paintSelf(Graphics gImage) {gImage.drawImage(image,x,y,width,height,null);y-=speed;if (y<0){this.x=100;this.y=-100;GameUtils.removeObjList.add(this);}}@Overridepublic Rectangle getRec() {return super.getRec();}
}
  1. 敌机
package object;import utils.GameUtils;
import utils.GameWindow;import java.awt.*;public class enemyObj extends GameObject{@Overridepublic Image getImage() {return super.getImage();}public enemyObj(Image image, int x, int y, int width, int height, double speed, GameWindow fram) {super(image, x, y, width, height, speed, fram);}public enemyObj() {super();}@Overridepublic void paintSelf(Graphics gImage) {gImage.drawImage(image,x,y,width,height,null);y+=speed;if (this.getRec().intersects(this.fram.planeObj.getRec())){GameWindow.state=3;this.fram.repaint();//重画一帧}for (shellObj item: GameUtils.shellObjList) {if (this.getRec().intersects(item.getRec())){ExplodeObj obj=new ExplodeObj(x,y,40,40);GameUtils.explodeObjList.add(obj);GameUtils.removeObjList.add(obj);item.setX(100);item.setY(-100);this.x=-100;this.y=-100;GameUtils.removeObjList.add(item);GameUtils.removeObjList.add(this);GameWindow.score++;}}if (y>600){this.x=-100;this.y=-100;GameUtils.removeObjList.add(this);}}@Overridepublic Rectangle getRec() {return super.getRec();}
}
  1. 敌方boss
package object;import utils.GameUtils;
import utils.GameWindow;import java.awt.*;public class BossObj extends GameObject{int life=10;@Overridepublic Image getImage() {return super.getImage();}public BossObj(Image image, int x, int y, int width, int height, double speed, GameWindow fram) {super(image, x, y, width, height, speed, fram);}public BossObj() {super();}@Overridepublic void paintSelf(Graphics gImage) {gImage.drawImage(image,x,y,width,height,null);if (x>485||x<-40){speed=-speed;}x+=speed;for (shellObj item: GameUtils.shellObjList) {if (this.getRec().intersects(item.getRec())){item.setX(100);item.setY(-100);GameUtils.removeObjList.add(item);life--;}if (life<=0){GameUtils.removeObjList.add(this);GameWindow.state=4;this.fram.repaint();//重画一帧}}//血条的白色背景gImage.setColor(Color.white);gImage.fillRect(20,40,100,10);//红血条的绘制gImage.setColor(Color.red);gImage.fillRect(20,40,life*100/10,10);}@Overridepublic Rectangle getRec() {return super.getRec();}
}
  1. 敌方子弹
package object;import utils.GameUtils;
import utils.GameWindow;import java.awt.*;public class BulletObj extends GameObject{@Overridepublic Image getImage() {return super.getImage();}public BulletObj(Image image, int x, int y, int width, int height, double speed, GameWindow fram) {super(image, x, y, width, height, speed, fram);}public BulletObj() {super();}@Overridepublic void paintSelf(Graphics gImage) {gImage.drawImage(image,x,y,width,height,null);y+=speed;if (this.getRec().intersects(this.fram.planeObj.getRec())){this.fram.state=3;this.fram.repaint();}if (y>600){this.x=-300;this.y=-300;GameUtils.removeObjList.add(this);}}@Overridepublic Rectangle getRec() {return super.getRec();}
}
  1. 敌方的爆炸效果
package object;import utils.GameUtils;
import utils.GameWindow;import java.awt.*;public class ExplodeObj extends GameObject {//调用的帧数int count=0;Image explode=Toolkit.getDefaultToolkit().getImage("Images/boom.gif");@Overridepublic Image getImage() {return super.getImage();}public ExplodeObj(Image image, int x, int y, int width, int height, double speed, GameWindow fram) {super(image, x, y, width, height, speed, fram);}public ExplodeObj(int x, int y) {super(x, y);}public ExplodeObj() {super();}public ExplodeObj(int x, int y, int width, int height) {super(x, y, width, height);}@Overridepublic void paintSelf(Graphics gImage) {if (count<16){super.image=explode;gImage.drawImage(image,x,y,width,height,null);//要可以设置大小count++;}//super.paintSelf(gImage);}@Overridepublic Rectangle getRec() {return super.getRec();}
}
  1. 工具类
package utils;import object.*;import javax.tools.Tool;import java.util.*;
import java.awt.*;
import java.util.List;public class GameUtils {//背景图片public static Image bgImage = Toolkit.getDefaultToolkit().getImage("Images/backGroup.jpg");//BOSS图片public static Image bossImage = Toolkit.getDefaultToolkit().getImage("Images/boss.png");//动态爆炸图片public static Image boomImage = Toolkit.getDefaultToolkit().getImage("Images/boom.gif");//我方飞机爆炸图片public static Image boom_2Image = Toolkit.getDefaultToolkit().getImage("Images/boom2.png");//敌方飞机爆炸图片public static Image boom_3Image = Toolkit.getDefaultToolkit().getImage("Images/boom3.png");//己方飞机public static Image planeImage=Toolkit.getDefaultToolkit().getImage("Images/plane2.png");//我方子弹public static Image shellImage=Toolkit.getDefaultToolkit().getImage("Images/shell.png");//敌方飞机public static Image enemyImage=Toolkit.getDefaultToolkit().getImage("Images/enemy.png");//敌方子弹public static Image bulletImage=Toolkit.getDefaultToolkit().getImage("Images/bullet.png");//物体的集合public static List<GameObject> gameObjList=new ArrayList<>();//子弹的集合public static List<shellObj> shellObjList=new ArrayList();//敌方飞机集合public static List<enemyObj> enemyObjList=new ArrayList();//Boss子弹的集合public static List<BulletObj> bulletObjList=new ArrayList();//需要移除的目标的集合public static List<GameObject> removeObjList=new ArrayList<>();//敌机爆炸的集合public static List<ExplodeObj> explodeObjList=new ArrayList<>();//写字public static void DrawWord(Graphics gGrafics,String word,Color color,int size,int x,int y){gGrafics.setColor(color);//设置字体颜色gGrafics.setFont(new Font("仿宋",Font.BOLD,size));gGrafics.drawString(word,x,y);}
}
  1. 窗口类
package utils;import object.*;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;public class GameWindow extends JFrame {//0未开始,1游戏中,2暂停,3通关失败,4,通关成功public static int state=0;//分数public static int score=0;//生成多少飞机后生成bossint num=100;int width=600;int height=600;//画布重画的次数int count=1;//敌机生成数目int enemy_count=0;//开双缓存的图片Image offImage=null;//背景bgObj bgOb =new bgObj(GameUtils.bgImage,0,0,2);//玩家飞机public Plane planeObj =new Plane(GameUtils.planeImage,100,100,30,40,0,this);//Bosspublic BossObj bossObj=null;public void Start(){this.setVisible(true);this.setSize(width,height);//大小this.setLocationRelativeTo(null);//设置在屏幕中间this.setTitle("飞机大战之Boss决战篇");//关掉后清理缓存this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//添加一个监听器MouseAdapter,然后重写他的方法this.addMouseListener(new MouseAdapter(){@Overridepublic void mouseClicked(MouseEvent e) {if (e.getButton()==1&&state==0){state=1;repaint();}}});//添加一个键盘的监听事件this.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {if (e.getKeyCode()==' '){//按下空格就暂停,暂停就相当于不再重画画布switch (state){case 1:state=2;break;case 2:state=1;break;default:}}}});GameUtils.gameObjList.add(bgOb);GameUtils.gameObjList.add(planeObj);while (true){if (state==1||state==0){if (state==1){creatGameObj();}repaint();}try {Thread.sleep(25);//每秒调用40次} catch (InterruptedException ex) {System.out.println("图片解析出错,错误原因:"+ex.getMessage());}}}@Overridepublic void paint(Graphics g) {if (offImage==null){offImage=createImage(width,height) ;}Graphics gGraphic=offImage.getGraphics();//使用两张图片用双缓存来画防止闪烁gGraphic.fillRect(0,0,width,height);//游戏未开始时绘图if (state==0){try {MediaTracker mediaTracker = new MediaTracker(new Container());mediaTracker.addImage(GameUtils.bgImage, 0);mediaTracker.addImage(GameUtils.bossImage, 1);mediaTracker.addImage(GameUtils.boomImage, 2);mediaTracker.waitForAll();gGraphic.drawImage(GameUtils.bgImage,0,0,null);//让图片加载完以后再显示gGraphic.drawImage(GameUtils.bossImage,225,100,150,150,null);//bossgGraphic.drawImage(GameUtils.boomImage,250,380,100,100,null);//爆炸GameUtils.DrawWord(gGraphic,"点击此处游戏开始",Color.blue,35,170,320);//文字标识} catch (InterruptedException ex) {System.out.println("图片解析出错,错误原因:"+ex.getMessage());}}//游戏开始时绘图else if (state==1){GameUtils.gameObjList.addAll(GameUtils.explodeObjList);//将物件集合中所有东西画出for (int i=0;i<GameUtils.gameObjList.size();i++){GameUtils.gameObjList.get(i).paintSelf(gGraphic);}//分数显示GameUtils.DrawWord(gGraphic,"得分: "+score+" 分",Color.green,30,30,100);//文字标识//将所有要移除的物件移除GameUtils.gameObjList.removeAll(GameUtils.removeObjList);}//暂停else if (state==2){//不做任何事就是暂停}//游戏结束else if (state==3){try {//让场景保持不变for (int i=0;i<GameUtils.gameObjList.size();i++){GameUtils.gameObjList.get(i).paintSelf(gGraphic);}//额外画出一些字MediaTracker mediaTracker = new MediaTracker(new Container());mediaTracker.addImage(GameUtils.boom_2Image, 0);mediaTracker.waitForID(0);gGraphic.drawImage(GameUtils.boom_2Image,planeObj.getX()-20, planeObj.getY()-15, null);//爆炸GameUtils.DrawWord(gGraphic,"菜",Color.red,80,270,320);//文字标识} catch (InterruptedException ex) {System.out.println("图片解析出错,错误原因:"+ex.getMessage());}}//游戏通关else if (state==4){try {//先让不该出现的东西消失GameUtils.gameObjList.removeAll(GameUtils.removeObjList);//让场景保持不变for (int i=0;i<GameUtils.gameObjList.size();i++){GameUtils.gameObjList.get(i).paintSelf(gGraphic);}//额外画出一些字MediaTracker mediaTracker = new MediaTracker(new Container());mediaTracker.addImage(GameUtils.boom_3Image, 0);mediaTracker.waitForID(0);gGraphic.drawImage(GameUtils.boom_3Image,bossObj.getX()+30, bossObj.getY(), null);//爆炸GameUtils.DrawWord(gGraphic,"虽然你赢了,但你还是菜",Color.red,30,140,320);//文字标识} catch (InterruptedException ex) {System.out.println("图片解析出错,错误原因:"+ex.getMessage());}}g.drawImage(offImage,0,0,null);count++;}void creatGameObj(){//我方子弹的生成if (count%15==0){GameUtils.shellObjList.add(new shellObj(GameUtils.shellImage,planeObj.getX()+8, planeObj.getY()-16,14,29,5,this));GameUtils.gameObjList.add(GameUtils.shellObjList.get(GameUtils.shellObjList.size()-1));}//敌机的生成if (count%15==0){GameUtils.enemyObjList.add(new enemyObj(GameUtils.enemyImage,(int)(Math.random()*12)*50, 0,49,36,5,this));GameUtils.gameObjList.add(GameUtils.enemyObjList.get(GameUtils.enemyObjList.size()-1));enemy_count++;}//敌方子弹的生成if (bossObj!=null&&count%15==0){GameUtils.bulletObjList.add(new BulletObj(GameUtils.bulletImage,bossObj.getX()+76, bossObj.getY()+85,14,29,5,this));GameUtils.gameObjList.add(GameUtils.bulletObjList.get(GameUtils.bulletObjList.size()-1));}if (enemy_count>num&&bossObj==null){bossObj=new BossObj(GameUtils.bossImage,250,35,155,100,5,this);GameUtils.gameObjList.add(bossObj);}}}
  1. 主程序
import object.*;
import utils.*;
public class PlanWarMain {public static void main(String[] args) {GameWindow gWin=new GameWindow();gWin.Start();}
}

效果图

  • 没有长的可以循环的背景就随便弄了个背景(当然,是懒得做,诶嘿)



java小游戏之飞机大战相关推荐

  1. JAVA小游戏之飞机大战(超详细)

    前言:在一定的java基础上就可以进行飞机大战小游戏的编写了.整个小游戏主要涉及到的基础知识为:类与对象,鼠标事件监听,线程.重绘等. 整体思路框架 设计一个初始界面,在开始后出现自己的战机和敌机且自 ...

  2. Java Swing 经典小游戏《飞机大战》———— (四)碰撞检测 游戏状态与得分 玩家升级

    前期回顾 Java Swing 经典小游戏<飞机大战>---- (一)获取素材,创建窗口,添加滚动背景,双缓冲 Java Swing 经典小游戏<飞机大战>---- (二)玩家 ...

  3. 安卓小游戏:飞机大战

    安卓小游戏:飞机大战 前言 前面写了十二篇自定义view的博客,说实话写的还是有点无聊了,最近调整了一下,觉得还是要对开发有热情,就写了点小游戏,现在抽时间把博客也写一写,希望读者喜欢. 需求 这里就 ...

  4. 微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js)

    微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞 ...

  5. java小游戏:五子棋人机大战

    一.java小游戏:五子棋人机大战 1.绘制窗口 package wuziqi;import javax.swing.*; import java.awt.event.MouseAdapter; im ...

  6. python飞机大战加背景音乐_python实现飞机大战小游戏 python飞机大战中的音频文件怎么改成MP3...

    怎么样用Python写飞机大战游戏 python开发飞机大战外星人游戏怎么弄双人模式新的一年,哪怕仍是一个人,也要活得像一支队伍,为自己的头脑和心灵招兵买马,不气馁,有召唤,爱自由. 主函数 impo ...

  7. Python小游戏之 - 飞机大战 !

    用Python写的"飞机大战"小游戏 源代码如下: # coding=utf-8 import random import os import pygame# 用一个常量来存储屏幕 ...

  8. Java Swing 经典小游戏《飞机大战》———— (一)获取素材,创建窗口,添加滚动背景,双缓冲

    (一)最终效果 1.窗口 2.项目框架 (二)效果实现 1.获取素材 获取步骤省略,大家可自行到我的资源获取,放置在src目录下 2. 创建窗口 WinGame.java import java.aw ...

  9. 用Three.js写h5小游戏-3d飞机大战

    用Three.js写h5小游戏-飞机大战 博主的话 运行图片 目录路径![在这里插入图片描述](https://img-blog.csdnimg.cn/20190829103702978.jpg?x- ...

最新文章

  1. mysql默认无密码的问题
  2. ACM 未解决的问题
  3. 亿级别记录的mongodb分页查询java代码实现
  4. 烟台大学计算机专业最低分,烟台大学计算机科学与技术专业2016年在河南理科高考录取最低分数线...
  5. hive提供oracle接口嘛,Hive是个什么东东
  6. 1047. Student List for Course (25)
  7. mysql的每隔1分钟定时_深入研究MySQL(四)、备份与恢复
  8. 山西计算机应用能力,《山西省计算机应用能力考试练习系统》使用说明
  9. 管理节点连接不上sql节点_华为云IEF智能边缘平台十万边缘节点管理技术深度解读学习笔记...
  10. mysql pt kill脚本_mysql 案例 ~ pt-kill工具的使用
  11. 求n个连续自然数之和为一个非负整数的数组
  12. 瑞星搜狐畅游合作 “云安全”首次嵌入网游客户端
  13. JPG怎么批量转换成PDF
  14. 用MATLAB计算常规矩阵函数 eAt sinA
  15. 低合金Q355D材料中的机械性能名称
  16. 【记录】easyexcel导出后打开文件报已损坏
  17. 有C++/C的java学习
  18. Golang 中 map 探究
  19. 新态势感知系列(1):从态势感知到全方位态势感知
  20. 高手支招 ASP+Access的安全隐患及对策(转)

热门文章

  1. 暑假第十三天之每天一些题系列
  2. 超市收银系统服务器,超市收银系统
  3. CEPH分布式存储介绍与原理架构概述
  4. Celery 动态添加定时任务生产实践
  5. 什么是银行的SWIFT代码
  6. Html快速入门之基本介绍
  7. 非常可乐(HDU-1495)
  8. 熟练掌握R语言的Meta分析全流程和不确定性分析,并结合机器学习等方法讲解Meta分析在文献大数据的延伸应用
  9. 今日任务,摸鱼到下班
  10. echarts_series总结