源码

> [飞机大战游戏源码及图片文件(有超详细的注释呦)]
https://www.aliyundrive.com/s/Qob1UhDgCLo
点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。

游戏介绍

游戏操作比较简单,运行代码后,点击“开始游戏”既可以进入游戏,通过鼠标移动实现我方飞机的移动,我方飞机自动发射子弹,敌方飞机在十二个轨道随机生成,如果我方飞机与之碰撞,则游戏结束;如果我方飞机发射的子弹与敌方飞机相撞,则积分加一,敌方飞机消失。当敌方飞机出现相对应的数量之后,敌方BOSS出现,敌方BOSS可以发射子弹,并在游戏界面最上端来回移动,当我方飞机发射的子弹射中敌方飞机时,敌方BOSS生命值减少,直至生命值为零,则我方胜利!!!

结构介绍

包和类的关系见下图

主要代码实现

  1. 飞机的主窗口类(源码上方链接自取)
package com.sxt;import java.awt.Color;import java.awt.Graphics;
import java.awt.Image;
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;
import java.util.Random;import javax.swing.JFrame;
import javax.swing.WindowConstants;import com.sxt.util.GameUtil;import obj.BgObj;
import obj.BossObj;
import obj.BulletObj;
import obj.EnemyObj;
import obj.ExplodeObj;
import obj.PlaneObj;
import obj.ShellObj;public class GameWin extends JFrame {// 创建背景图的对象,用对象绘制自身BgObj bgObj = new BgObj(GameUtil.bgImg, 0, 0, 2, this);// 创建我方飞机的对象public PlaneObj planeObj = new PlaneObj(GameUtil.PlaneImg, 22, 33, 290, 550, 0, this);// 我方子弹的集合public static List<ShellObj> shellObjList = new ArrayList<ShellObj>();// 我方子弹的集合public static List<BulletObj> bulletObjList = new ArrayList<BulletObj>();// 敌方飞机的集合public static List<EnemyObj> enemyObjsList = new ArrayList<EnemyObj>();EnemyObj enemyObj = new EnemyObj(GameUtil.enemyImg, 49, 39, 0, 0, 5, this);// 爆炸图实体类集合public static List<ExplodeObj> explodeObjList = new ArrayList<ExplodeObj>();// 敌方Boss的对象public BossObj bossObj =null;
//  public BossObj bossObj = new BossObj(GameUtil.bossImg, 56, 100, 220, 50, 5, this);// 随机种子Random random = new Random();// 计数器int paintCount = 1;// 敌方出现飞机数int enemyCount = 0;// 积分计数器public int sorce = 0;// 定义临时图片,防止画面闪烁Image tempImg = null;public void initWin() {// 设置宽高this.setSize(600, 600);this.setSize(600, 600);// 设置标题this.setTitle("飞机大战 ");// 设置窗口居中this.setLocationRelativeTo(null);// 点击关闭按钮关闭程序this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);// 设置窗口是否可见this.setVisible(true);// 点击鼠标按钮开始游戏this.addMouseListener(new MouseAdapter() {public void mouseClicked(MouseEvent e) {if (e.getButton() == 1&&GameUtil.state==0) {System.out.println("游戏开始了");// 改变游戏状态GameUtil.state = 1;repaint();}}});// 添加键盘事件this.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {// 如果空格键被点击if (e.getKeyCode() == 32) {switch (GameUtil.state) {case 1:// 游戏中,点击空格暂停GameUtil.state = 2;
//                      repaint();break;case 2:// 暂停中,点击空格开始GameUtil.state = 1;break;default:break;}}}});// 不断调用paint方法,让画面实现动画效果,让paint方法每隔1秒钟调用一次while (true) {if (GameUtil.state == 1) {repaint();createObj();}try {Thread.sleep(40);} catch (InterruptedException e1) {e1.printStackTrace();}}}// 绘制窗口内容 Graphics是画笔@Overridepublic void paint(Graphics g) {if (tempImg == null) {// 防止重复 初始化图片tempImg = this.createImage(600, 600);}// 新图片的画笔Graphics gImage = tempImg.getGraphics();gImage.fillRect(0, 0, 600, 600);// 绘制背景图bgObj.paintSelf(gImage);// 游戏未开始if (GameUtil.state == 0) {// 绘制字符串GameUtil.drawStr(Color.green, 50, "点击开始游戏", 140, 300, gImage);// 游戏开始时,先引用一下爆炸图gImage.drawImage(GameUtil.explodeImg, planeObj.getX()+9999, planeObj.getY(), this);}// 游戏进行中if (GameUtil.state == 1) {// 绘制我方飞机planeObj.paintSelf(gImage);// 绘制我方子弹for (int i = 0; i < shellObjList.size(); i++) {shellObjList.get(i).paintSelf(gImage);}// 绘制敌方飞机for (int i = 0; i < enemyObjsList.size(); i++) {enemyObjsList.get(i).paintSelf(gImage);}// 绘制敌方子弹for (int i = 0; i < bulletObjList.size(); i++) {bulletObjList.get(i).paintSelf(gImage);}// 绘制爆炸效果图for (int i = 0; i < explodeObjList.size(); i++) {explodeObjList.get(i).paintSelf(gImage);}// 绘制Bossif(bossObj!=null) {bossObj.paintSelf(gImage);}// 移除多余的爆炸图对象if (explodeObjList.size() >= 15) {for (int i = 0; i < 10; i++) {explodeObjList.remove(0);}}}
//       游戏暂停if(GameUtil.state==2) {GameUtil.drawStr(Color.BLUE, 50, "点击空格继续", 180, 300, gImage);}if (GameUtil.state == 3) {// 游戏结束了gImage.drawImage(GameUtil.explodeImg, planeObj.getX() - 10, planeObj.getY() - 30, this);GameUtil.drawStr(Color.RED, 50, "GAME OVER", 180, 300, gImage);}if (GameUtil.state == 4) {gImage.drawImage(GameUtil.explodeImg, bossObj.getX() + 40, bossObj.getY() + 20, this);GameUtil.drawStr(Color.GREEN, 50, "游戏通关", 200, 300, gImage);}// 积分面板GameUtil.drawStr(Color.YELLOW, 20, sorce + "分", 10, 60, gImage);// 将临时图片绘制到窗口g.drawImage(tempImg, 0, 0, null);
//      System.out.println("集合长度"+shellObjList.size()) ;paintCount++;}// 制造游戏物体的方法public void createObj() {if (paintCount % 3== 0) {// 每调用15次paint方法执行下面代码一次ShellObj shellObj = new ShellObj(GameUtil.shellImg, 14, 29, planeObj.getX() + 4, planeObj.getY() - 30, 5,this);shellObjList.add(shellObj);}if (paintCount % 5== 0) {// 每调用15次paint方法执行下面代码一次EnemyObj enemyObj = new EnemyObj(GameUtil.enemyImg, 49, 39, random.nextInt(12) * 50, 0, 5, this);enemyObjsList.add(enemyObj);enemyCount++;}if(enemyCount>50) {if(bossObj==null) {bossObj = new BossObj(GameUtil.bossImg, 56, 100, 220, 50, 5, this);}if (paintCount % 10 == 0) {// 每调用15次paint方法执行下面代码一次bulletObjList.add(new BulletObj(GameUtil.bulletImg, 14, 25, bossObj.getX() + 78,bossObj.getY() + bossObj.getHeight(), 5, this));}}}public static void main(String[] args) {GameWin gameWin = new GameWin();gameWin.initWin();}//@Override
//public void paint(Graphics g) {//  bgObj.paintSelf(g);
//  if(GameUtil.state==0) {//  GameUtil.drawStr(Color.GREEN, 50, "点击开始游戏", 150, 300, g);
//  }
//}
}

2.工具类代码实现

package com.sxt.util;import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;public class GameUtil {//定义游戏的状态   0——未开始  1——游戏中 2——暂停 3——失败 4——胜利public static int state=0;//定义背景图片public static Image bgImg =Toolkit.getDefaultToolkit().getImage("imgs/bg.jpg");//定义我方飞机图片public static Image PlaneImg =Toolkit.getDefaultToolkit().getImage("imgs/plane.png");//定义我方子弹图片public static Image shellImg=Toolkit.getDefaultToolkit().getImage("imgs/shell.png");//定义敌方飞机图片public static Image enemyImg=Toolkit.getDefaultToolkit().getImage("imgs/enemy.png");//定义飞机爆炸图public static Image explodeImg=Toolkit.getDefaultToolkit().getImage("imgs/explode/e6.gif"); //定义Boss图片public static Image bossImg=Toolkit.getDefaultToolkit().getImage("imgs/boss.png");//定义敌方子弹图片public static Image bulletImg=Toolkit.getDefaultToolkit().getImage("imgs/bullet.png");
/*** 绘制字符串的方法* @param color* @param size* @param str* @param x* @param y* @param g*///封装一个回执字符串的方法public  static void drawStr(Color color,int size,String str,int  x ,int y,Graphics g) {g.setColor(color);g.setFont(new Font("宋体",Font.BOLD,size));g.drawString(str,x,y);}}

基于Java的飞机大战的课程设计与实现相关推荐

  1. 基于Java的飞机大战游戏的设计与实现论文

    源码下载 http://www.byamd.xyz/hui-zong-1/ 摘 要 现如今,随着智能手机的兴起与普及,加上4G(the 4th Generation mobile communicat ...

  2. 基于Java的飞机大战游戏的设计与实现(含源文件)

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 基于Java的飞机大战游戏的设计与实现 摘   要 现如今,随着智能手机的兴起与普及,加上4G( ...

  3. 基于Java的飞机大战游戏的设计与实现(论文+源码)

    毕业设计(论文)任务书 第1页 毕业设计(论文)题目:基于Java的飞机大战游戏的设计与实现毕业设计(论文)要求及原始数据(资料):1.综述基于Java的飞机大战游戏的现状:2.深入了解Java的设计 ...

  4. 毕业设计 基于Java的飞机大战游戏的设计与实现

    文章目录 前言 一.项目设计 1. 模块设计 功能需求 游戏状态控制功能模块 游戏难度的调整模块 游戏界面绘画功能模块 玩家游戏控制功能模块 2. 实现效果 二.部分源码 项目源码 前言 今天学长向大 ...

  5. 基于Java的飞机大战游戏的设计与实现

    项目介绍 飞机大战主要需要我方飞机和敌方飞机,还有子弹,特殊nPC,开始背景,结束背景,以及背景音乐.我方飞机可以随意移动,敌方飞机无规律出现.游戏玩家通过鼠标移动控制飞机移动,我方飞机在游戏开始时就 ...

  6. 基于Java的坦克大战游戏的设计与实现(论文+PPT+源码)

    幻灯片1 基于Java的坦克大战游戏的设计与实现 幻灯片2 CONTENTS 1 4 设计工具与相关技术 详细设计 2 5 系统分析 结论 3 总体设计 幻灯片3 PPT模板下载:http://www ...

  7. 基于Java Swing 飞机大战游戏

    一.项目概要: 基于Java Swing飞机大战游戏,打死飞机,可以随机出现加血包.子弹升级包.并支持根据游戏的分数,调整游戏难度. 二.界面展示: 三.主要代码: package com.maoxu ...

  8. python飞机大战概要设计_飞机大战大学课程设计初稿.doc

    毕业设计(论文) 题 目: 基于安卓平台的飞机大战游戏 学 院: 计算机科学学院 专业班级: 计算机科学与技术10级2班 指导教师: 黄国兵 职称:高级工程师 学生姓名: 赵兵 学 号: 410090 ...

  9. 基于Android的飞机大战游戏的设计与实现

    在2007年11月5日谷歌公司发布了一款全新的面向智能移动端设备的操作系统,这就是Android.经历了几年市场的洗礼,Android凭借其优异的性能占据了大部分智能手机市场.根据最新的调查显示,An ...

最新文章

  1. 5招减少网站恶意文件上传
  2. Windows软件调试学习笔记(1)
  3. ES6 Map对象的使用
  4. day1作业:登录接口
  5. ActiveMQ_2安装
  6. PostgreSQL的执行计划分析
  7. AngularJS------报错The selector app-user-item did not match any elements
  8. winform基础,主要控件简单介绍,以及小练习
  9. 55. mysqli 扩展库(2)
  10. 源码编译 Qt 6.2
  11. obs多推流地址_推流篇| 如何在广交会直播中使用OBS推流,播放视频、PPT等
  12. 金庸小说中的八大经典战役回顾
  13. mac 语音召唤siri_在Mac上使用Siri可以做的11件事
  14. java 栈队列区别是什么意思_Java实现数据结构栈stack和队列Queue是什么?
  15. nuvoton uboo2013引导流程 2 - spl
  16. python--dict容器
  17. 硅谷最牛程序员,总是不经意间碾压众人
  18. Word 去除脚注分隔线前的空格
  19. 致那些自嘲码农的苦逼程序员
  20. 【数据恢复】老牌devos勒索病毒之.[geerban@email.tg].Devos

热门文章

  1. 程序设计(二)——伪代码编程
  2. 计算机组成原理课程设计:在复杂模型机上编写机器指令与微程序计算海伦公式
  3. 使用Dhtml和poi导出excle表格出现Error Type:LoadXMl Incorrect Json错误
  4. 海马玩模拟器启动失败,start machine failed! error code = 3和error code=21
  5. VMware虚拟机不能识别U盘 的解决方法
  6. centos7 虚拟机不识别U盘
  7. 深入理解以太坊 P2P 网络设计
  8. 《算法笔记》3.6小节——入门模拟->字符串处理 问题 B: 首字母大写
  9. GraphicsLab Project之基于物理的着色系统(Physical based shading) - 基于图像的光照(Image Based Lighting)(Diffuse篇)
  10. 漫画:博弈论系列 之 红眼睛和蓝眼睛(附:旅客的挽回)