相信很多小伙伴和答主一样,在学完javaSE之后面临以下的灵魂拷问—–
1 知识点零散,如何将串联起来呢?
2.基础的知识点已经学完,对于项目“我”已经跃跃欲试了
3.网上的资源零散,缺少详细又难度适中的项目练手
那么在这个过程中我们的目的便是——
将知识点整合,对于项目有具体而明晰的思路,这有助于为自己以后的学习增加经验与自信心。
闲言少叙,让我们先来一睹飞机大战的真容吧——
核心知识点 | 重要性星级 |
---|---|
面向对象的思想 | * * * * * |
函数化,结构化编程 | * * * * * |
接口,抽象类,静态代码块 | * * * * * |
重写run方法实现多线程 | * * * * * |
Swing图形化界面,以及添加相关鼠标事件 | * * * * |
使用集合存储对象,并使用集合的相关方法 | * * * * * |
英雄机发射子弹,敌机(飞机+小蜜蜂)自上而下产生,命中敌机加分,命中小蜜蜂得双倍火力或者赢得一条命,如果撞上飞机或者小蜜蜂,将减命,双倍火力清零,当生命值为0时,游戏结束
Time(定时器)的全名为java.util.Timer,该类用于线程调度任务在后台线程中执行一次或多次,这个类线程安全:多个线程可以共享一个单独的Timer对象,而不需要外部同步,另外需要注意的是,这个类可以扩展到大量并发计划任务。在内部,它使用二进制堆表示其任务队列,因此计划任务的成本为O(log
n),其中n为并发计划任务的数量,所有的构造函数启动定时器线程。
schedule(TimerTask task, Date firstTime, long period);//从指定的时间开始对指定任务执行重复的固定延迟执行
int interval=10;
Timer time=new Timer();
time.schedule(new TimerTask() {
@Override
public void run() {
if(state==RUNNING){
enterAction();//入场
stepAction();//走一步
shootAction();//英雄机发射子弹
bangAction();//碰撞测试
outOfBoundAction();//越界检测
checkGameoverAction();//检查游戏状态
}
repaint();//重绘,调用paint方法
}
}, interval, interval);
DrawImage方法属于Graphics类,该类是所有图形类的抽象基类,该类下的方法大多为抽象方法,由子类实现。一个Graphics对象封装了java支持的基本渲染操作所需的状态信息,比如坐标,颜色,字体,逻辑像素运算功能
1.绘制当前可用的指定图像的大小。
drawImage(Image img, int x, int y, ImageObserver observer)
2.使用该图形上下文的当前字体和颜色绘制由指定字符串给出的文本drawString(String str, int x, int y)
g.drawImage(ShootGame.background,0,0,null);
g.drawString("life:"+hero.getLife(),x,y);
Random类用于生成一个随机数,线程安全而不加密安全。多线程设计中考虑使用ThreadLocalRandom,如有特殊的安全需求,则要考虑使用SecureRandom获取一个加密安全的伪随机数生成器,供安全敏感的应用程序使用。
1.生成一个介于[0,bound)的int值。
nextInt(int bound)
public static FlyObject nextOne(){
Random random=new Random();
int type=random.nextInt(20);
if(type<3){
return new Bee();
}
return new AirPlane();
}
简单又明确的数学问题,自不多言。
public boolean hit(FlyObject fo) {
int x1=fo.x-this.width/2;
int x2=fo.x+fo.width+this.width/2;
int y1=fo.y-this.height/2;
int y2=fo.y+fo.height+this.height/2;
int cx=this.x+this.width/2;
int cy=this.y+this.height/2;
return cx<x2&&cx>x1&&cy>y1&&cy<y2;
}
如何制作动画效果呢——
使两张图片的切换时间尽可能短,人眼就看不出来了,在人眼中自然生成了动画的效果。
public void step() {
int length=images.length;
image=images[index++/10%length];//两张照片每100毫秒切换一次,使其有喷烟的动画
}
Arrays类包含操作数组的各种方法,只要脑洞足够大,在这个类里面都可以找到方法实现。
当然,更推荐易操作的集合去实现
1.复制指定的数组,并为该数组指定长度
copyOf(int[] original, int newLength)
Arrays.copyOf(bullets, bullets.length + b.length);
instanceof关键字用于比较该对象是否与指定类的实例相同,比较的原理是:如果该对象是这个类及其所有父类,接口的实例化,则返回true,否则返回fause.
if(one instanceof Enemy){
Enemy e=(Enemy)one;
//加分
score+=e.getScore();
}
这种东西大概就是一看全都会,在项目里使用就蒙圈的存在
表是转载自别人的,作者做的表用心
原表链接:https://blog.csdn.net/yan8024/article/details/6426451
链接:https://pan.baidu.com/s/1_MoM2n8mUqR5aBsu5AyHOw
提取码:tfl4
答主刚学完javaSE,对知识的掌握程度略显浅薄,如果对大家有所帮助,也应选择性吸收。如有不恰当的地方,畅所欲言便是,与君共勉。
暮野四合,远方天际薄雾笼罩,隐约间,灯火闪烁,望眼欲穿,却看到了璀璨星辰。