JAVA编写飞机⼤战---分析过程及源代码(超详细超完整)指针JAVA培训day_10/day_11/day_12
飞机⼤战的需求:
1.游戏可以产⽣: ⼩敌机/⼤敌机/⼩蜜蜂 -> 随机(概率)产⽣
2.跟⿏标相关的操作:
a.⾃⼰的飞机移动
b.点击开始游戏
c.⿏标移出窗⼝,游戏暂停
d.⿏标进⼊窗⼝,游戏继续
3.⼦弹打中⼩敌机: 分数 + 5
4.⼦弹打中⼤敌机: 分数 + 50,奖励(双倍⽕⼒,⽣命值加成) - 接⼝
5.⼦弹打中⼩蜜蜂: 奖励(双倍⽕⼒,⽣命值加成)
API(application programming Interface): 应⽤程序接⼝
帮助⽂档
Scanner
System -> java.lang
Arrays -> java.utils
Math -> java.lang
构造⽅法 ⽅法
1.java.awt javax.swing - 窗⼝化界⾯
Frame -> JFrame : 窗⼝类
DO_NOTHING_ON_CLOSE:关闭时什么都不做
HIDE_ON_CLOSE:关闭时隐藏窗⼝(默认效果)
DISPOSE_ON_CLOSE:关闭时注销窗⼝
EXIT_ON_CLOSE:关闭时退出程序
什么时候使⽤静态常量:
如果是只判断两种情况: boolean
如果是⼀开始就固定好⼏种状态: final
⼀般会使⽤int类型修饰,因为浮点型不能判断两个值是否相等
2.画板类:
Panel -> JPanel -> 解决闪屏问题
原⽣的 JPanel 是不能⾃定义绘画的
只能画按钮,输⼊框...等的⼀些组件
功能增强 -> ⾃定义类继承JPanel
因为⼦类更能⼀定⽐⽗类更强⼤
3.加载图⽚
1)图⽚是存在磁盘中,要将此⽂件加载到JVM内存中
I0 -> 输⼊/输出流
new File("相对路径") - ⼯程下
⽂件必须存在:和类同包下
ImageDemo.class -> 获取类的字节码⽂件对象
Resource()
ResourceAsStream() - 获取资源⽂件流
⽂件必须存在src下:
ClassLoader()
4.程序设计 - 类的设计
对象: ⼩飞机/⼤飞机/⼩蜜蜂/英雄机/⼦弹
⽗类(基类):抽象类
成员变量:
int blood int x int y 图⽚
primal图⽚宽/ ⾼
成员⽅法:
move() -> 抽象⽅法 -> 中⽂
对象对应的类:
⼦类 extends ⽗类:
⼩飞机:
成员变量:
int blood int score int x int y 图⽚
图⽚宽/ ⾼ int speed
成员⽅法:
move()
⼤飞机
成员变量:
int blood int score int x int y 图⽚
图⽚宽/ ⾼ int speed
成员⽅法:
move()
⼩蜜蜂
成员变量:
int blood int x int y 图⽚
图⽚宽/ ⾼ int speed
成员⽅法:
move()
英雄机
成员变量:
int blood int x int y 图⽚
图⽚宽/ ⾼⼦弹
成员⽅法:
move()
⼦弹
成员变量:
int blood int x int y 图⽚
图⽚宽/ ⾼ int speed
成员⽅法:
move()
构造⽅法:
java下载过程5.存很多数据 -> 数组:
1.数组长度不可变的,如果想给数组扩容,就必须使⽤到数组的复制⽅法的复制:
1).最原始的⽅式
2).pyOf()
3).System.arrayCopy()
2.数组只能存放同种类型的数据
基本数据类型:
int[] = {1,2,3,4}
引⽤数据类型
Student[] = new Student[5];
ArrayList: 可变长数组
1.只能存放引⽤数据类型数组
int -> Integer (包装类)
char -> Character
byte -> Byte
long -> Long
2.可以存所有类型,但是建议存同⼀种类型,因为有可能出现类型转换异常泛型:<E> -> E表⽰Object,所有类型
3.构造⽅法:
空参构造⽅法: 没有内容的集合
ArrayList list = new ArrayList();
常⽤⽅法API:
void add(Object obj)
void add(int index, Object obj)
Object get(int index)
Obejct remove(int index)
具体步骤:
1.创建窗⼝对象
2.创建画板对象
3.类的设计 - 确定类中⽬前需要的成员变量和成员⽅法
4.成员⽅法⽬前只有⼀个 - move(), 研究不同类的移动⽅式
5.创建类需要不同的构造⽅法 - 初始化成员变量
a.加载(读取)图⽚ -> static{} -> 静态代码块,需要静态成员变量
b.获取⽗类中的成员变量
1.如果⽗类中的成员变量是protected修饰的
那么⼦类可以直接获取
2.如果⽗类中的成员变量是private修饰的
通过调⽤⽗类的有参构造⽅法super()
6.主程序: 添加定时器
a.⽣成所有飞⾏物
b.所有飞⾏物的移动
c.⽣成很多⼦弹
d.所有⼦弹的移动
input标签不允许输入e.判断所有飞⾏物 和⼦弹的越界
f.判断⼦弹和飞⾏物的碰撞
g.判断飞⾏物和英雄机的碰撞
h.英雄的移动 - ⿏标监听
MouseListener - 接⼝
MouseMotionListener - 接⼝
⿏标适配器 -> new MouseAdapter
i.判断游戏是否结束 -> blood == 0
7.添加⿏标监听 - 接⼝
8.游戏状态的判断 -> 结合⿏标适配器完成
//静态常量 -> 全⼤写
开始状态 -> START
运⾏状态 -> RUNNING
暂停状态 -> PAUSE
死亡状态 -> GAME_OVER
//当前状态 - 会改变 -> 变量
int start = START;
START -> 单击 -> RUNNING
RUNNING -> 移出 -> PAUSE
getBlood == 0 -> GAME_OVER
PAUSE -> 进⼊ -> RUNNING
sql2000企业版GAME_OVER -> 单击START
如果只要两个状态 -> Boolean
使⽤int类型存储 -> 判断值是否相等
9.碰撞
判断⼦弹和飞⾏物的碰撞
⼩蜜蜂/⼤敌机/⼩敌机 -> 向上造型fyings 判断飞⾏物和英雄机的碰撞
10.添加奖励 [双倍⽕⼒/ ⽣命值加成]
11.判断游戏结束 -> hero.blood == 0html标签查询工具>c语言位运算
12.灰烬 -> 和⽗类是不同的类
Window类:实现主⽅法
package planewar;
import javax.swing.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.Timer;
import java.util.TimerTask;
public class Window {
public static void main(String[] args){
JFrame win =new JFrame();
//设置窗⼝⼤⼩
win.setSize(400,600);
//设置居中
win.setLocationRelativeTo(null);
//设置窗⼝置顶
//win.setAlwaysOnTop(true);
//设置title
win.setTitle("飞机⼤战");
/
/关闭窗⼝
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//画板对象
Draw draw =new Draw();
//把画板添加到窗⼝
win.add(draw);
//调⽤action⽅法
draw.action();
//显⽰窗⼝
win.setVisible(true);
}
}
Fly类:所有飞⾏物的⽗类
package planewar;
/*
所有飞⾏物的⽗类
*/
import java.awt.image.BufferedImage;
public abstract class Fly {
protected int blood;
protected int x;
protected int y;
protected BufferedImage image;
protected int imageWidth;
protected int imageHeight;
protected boolean remove;//判断消失
Fly(){
}
Fly(int x,int y, BufferedImage image,int blood){
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论