从前看马士兵老师的教程,学过一个坦克大战,不过当时一头雾水,一直想着模仿着写一个飞机大战,放假了终于动手写了,虽然AWT似乎已经不推荐用了,但是懒得研究swing啊,作为javase的练习还是可以的。

有点成型,尚未完成。

构想:

飞机从一开始就一直发射子弹(和微信那个差不多),敌方飞机从“天上”往下降落,但是不会发射子弹。

普通敌方飞机一炸就死。

BOSS敌方飞机则需要较长时间的攻击。

我方飞机一炸就死。

我方飞机可以吃技能,分别是

无敌技能

三射技能

变弱技能

这三个技能不能共存,使用状态模式控制。

首先,实现游戏窗口:继承Frame类

public class GameClient extends Frame

启动窗口的方法:

// 启动窗口

private void launchFrame() {

// 位置,大小,添加按键监听

this.setLocation(GameConstant.FrameData.WIN_X,

GameConstant.FrameData.WIN_Y);

this.setSize(GameConstant.FrameData.WIN_WIDTH,

GameConstant.FrameData.WIN_HEIGHT);

this.setResizable(false);

this.setTitle(GameConstant.GameStr.GAME_NAME);

this.setBackground(GameConstant.ColorHelper.GAMEBKCOLOR);

this.addWindowListener(new MyWindowAdapter());

this.addKeyListener(new KeyMonitor());

setVisible(true);

new Thread(paintThread).start();

new Thread(attack).start();

new Thread(fire).start();

new Thread(bossAttackThread).start();

}

四个线程是分别控制游戏的线程,暂时不理。

GameConstant这个类是用来放一些静态变量的,可以自己控制调试,游戏速度,角色大小等。

import java.awt.Color;

public class GameConstant {

// 游戏窗口的静态变量

public static class FrameData {

public static final int WIN_WIDTH = 400;

public static final int WIN_HEIGHT = 600;

public static final int WIN_X = 350;

public static final int WIN_Y = 50;

}

// 颜色

public static class ColorHelper {

public static final Color MAIN_PALNE_COLOR = Color.BLUE;

public static final Color PCNORMALCOLOR = Color.RED;

public static final Color BOSSCOLOR = Color.YELLOW;

public static final Color MISSLECOLOR = Color.BLACK;

public static final Color GAMEBKCOLOR = Color.WHITE;

}

// 游戏相关的静态变量

public static class GameStr {

public static final String GAME_NAME = "beatPlane";

}

// 子弹静态变量

public static class BulletData {

public static final int RADIUS = 10;

public static final int SPEED = 3;

public static final int ATTACKVALUE = 1;

}

// 我方飞机静态变量

public static class MainPlaneData {

public static final int RADIUS = 20;

public static final int FIRST_X = 175;

public static final int FIRST_Y = 550;

public static final int SPEED = 5;

}

// 普通敌方飞机的静态变量

public static class NormalPcPlaneData {

public static final int RADIUS = 20;

public static final int INIT_SPEED = 1;

public static final int BLOOD = 1;

}

// 敌方飞机BOSS的静态变量

public static class BossPcPlaneData {

public static final int RADIUS = 40;

public static final int INIT_SPEED = 1;

public static final int BLOOD = 10;

}

}

这里的

MyWindowAdapter很简单,为了控制右上角点击xx时候的动作,默认当然是退出游戏。

public class MyWindowAdapter extends WindowAdapter{

public void windowClosing(WindowEvent arg0) {

System.exit(0);

}

}

按键监听的

KeyMonitor,因为是按键主要是操作我方的飞机,所以这里采用了回调的方法,对我方飞机进行操作,可以暂时不理会。

// 按键监听

private class KeyMonitor extends KeyAdapter {

public void keyPressed(KeyEvent keyEvent) {

mainPlane.onkeyPressed(keyEvent);

}

}

在launchFrame方法执行之后,启动了四个线程: new Thread(paintThread).start();

new Thread(attack).start();

new Thread(fire).start();

new Thread(bossAttackThread).start();

先看paintThread:

// 不断刷新画面的线程

private class PaintThread implements Runnable {

public void run() {

while (true) {

// 每隔15ms,调用父类的repaint()方法

repaint();

try {

Thread.sleep(15);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

为什么调用父类的repaint方法呢?

就要看这个update方法了:

// 重写update方法,在父类repaint()方法调用的时候会调用这个方法

public void update(Graphics g) {

if (offScreanImage == null) {

offScreanImage = this.createImage(GameConstant.FrameData.WIN_WIDTH,

GameConstant.FrameData.WIN_HEIGHT);

}

Graphics gOffScrean = offScreanImage.getGraphics();

Color preColor = gOffScrean.getColor();

gOffScrean.setColor(GameConstant.ColorHelper.GAMEBKCOLOR);

gOffScrean.fillRect(0, 0, GameConstant.FrameData.WIN_WIDTH,

GameConstant.FrameData.WIN_HEIGHT);

gOffScrean.setColor(preColor);

paint(gOffScrean);

g.drawImage(offScreanImage, 0, 0, null);

}

If this component is not a lightweight component, the AWT calls the update method in response to a call to repaint. You can assume that the background is not cleared.

简单理解,这个update就是用来刷新界面的,我其实也不是特别理解。

先到这里吧。

java程序之飞机大战_java写飞机大战一相关推荐

  1. java做飞机大战_Java+swing版飞机大战

    Java小游戏实训--飞机大战 一.实验目的 使用Java+swing实现飞机大战小游戏 二.实验要求 1.掌握Java的基本语法. 2.掌握面向对象的编程思想. 3.掌握利用swing布局游戏界面的 ...

  2. 怎么用java做全民飞机大战_Java飞机大战游戏设计与实现

    1 概述 本次Java课程设计是做一个飞机大战的游戏,应用Swing编程,完成一个界面简洁流畅.游戏方式简单,玩起来易于上手的桌面游戏.该飞机大战项目运用的主要技术即是Swing编程中的一些窗口类库. ...

  3. java飞机大战流程图_飞机大战说明文档

    JIANGXI AGRICULTURAL UNIVERSITY精彩内容,尽在百度攻略:https://gl.baidu.com 科技月月评设计报告 精彩内容,尽在百度攻略:https://gl.bai ...

  4. Java窗口游戏开发,飞机大战,打飞机,打大飞机,打无敌飞机妙啊!!!!————————香啊~~~~~~~~~~~~~~~~~

    身无分文宅家,细发日渐稀疏. 双亲日益劳累,奈何无心寻工. 复试遥遥无期,心情惨惨戚戚. 若问此时作甚?抽烟喝酒扣叮.---杂记2020/3/25-2020/4/12 矫情下,莫认真 接下来奉上近日学 ...

  5. javascript打飞机程序8x8x飞机大战js打飞机程序,飞机大战知识点包含了JavaScript面向过程的全部知识点,包括变量、运算符、判断、循环、数组、自定义函数、系统函数、事件等。...

    js打飞机程序,飞机大战知识点包含了JavaScript面向过程的全部知识点,包括变量.运算符.判断.循环.数组.自定义函数.系统函数.事件等. 讲解了JavaScript编程语言制作游戏界面,添加游 ...

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

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

  7. python飞机大战概要设计_飞机大战--毕业论文--初稿.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp学术论文&nbsp>&nbsp毕业论文 飞机大战--毕业论文--初稿.doc55页 本文档一 ...

  8. android飞机大战功能,安卓飞机大战(二) SurfaceView实现自制背景

    用SurfaceView写一个自制的背景图,并且可以移动,加上安卓飞机大战(一)中的BackgroundManager类,可以直接使用 GameView代码: public class GameVie ...

  9. 飞机大战java_java版飞机大战实战项目详细步骤

    本文为大家分享了java版飞机大战实战项目,供大家参考,具体内容如下 分析 飞机大战 首先对这个游戏分析,在屏幕上的物体都是飞行物,我们可以把建一个类,让其他飞行物继承这个类.游戏中应有英雄机(也就是 ...

最新文章

  1. 机器视觉资料汇总(2)
  2. (问题)c语言现代方法2th,自己编写的reminder.c程序 找错/修改/拓展延伸
  3. CSDN绑定GitHub账号
  4. Node.js 开发技能图谱
  5. javascript-复制
  6. 跨过虚拟化技术浪潮,Veeam快步入局云数据管理
  7. jquery 2.0.3代码结构
  8. Tesseract处理背景渐变的图片
  9. excel查找和替换
  10. 布料仿真中常用积分方法
  11. AI口罩“督查官”诞生记
  12. zynq100 linux移植,Linux3.6.7在OK6410平台的移植(四)搭建YAFFS2根文件系统
  13. js获取本周日期和上周日期
  14. 图解FDISK与FORMAT命令分区与格式化
  15. Nebula Graph 招募社区布道师
  16. 热烈祝贺“UTONMOS第一届公会会长圆桌会议”圆满举行
  17. 你的typora图床配置了吗?人家都开始收费了
  18. 我的网名为什么是ma6174????
  19. Havok物理引擎_百度百科
  20. Steam Apex Legends 最简单领取方法,不需要改地区

热门文章

  1. 软件测试中的黑盒测试和白盒测试和灰盒测试
  2. 某Xavier载板硬件方案
  3. 使用itextpdf生成pdf
  4. 我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。 百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
  5. CC2640R2F之配对绑定与解除绑定篇
  6. IPA转APP的方法和APP转IPA的方法
  7. Python 扫雷游戏 完整源代码+图片素材
  8. **caffe_vcpkg+vs2017+win7安装整理**
  9. 2.10 窗口的拆分与隐藏 [原创Excel教程]
  10. exchange 连接远程服务器 拒绝访问