java Swing游戏总结
一句话归结,这类游戏就是一副可以与人交互的与人交互的、能够根据状态控制画面的动态画面。然后我将它划作三个大块(以下就以设计游戏为例):静态,动态和可控制的动态。以下就根据这三步分析
静的
设计实体----根据共同属性和方法抽类,设计接口和父类
abstract class FlyingObject{width,height,x,y,image}
interface Award{life,doubleFire,getType()}
interface Enemy{getScore(int speed);}
Airplane extends FlyingObject implements Enemy
Hero extends ...
Bee extends... implements Award
Bullet
ShootGame extends JPanel--入口
初始化实体--位置,图片
paint(g){
paintHero(g);
paintAirplane(g);
paintBee(g);
paintScore(g);
paintState(g);
...
}
动的
Timer timer;
实体进入(出现):
Hero hero=new Hero(x,y,image)
Airplane airplane;
Bee bee;
实体的行为:
hero--射击,随鼠标移动,
airplane,Bee--下落,speed,(xspeed)
bullet---向上移动,speed
因实体行为引发的事件:
shootBy(Bullet bullet);//敌机被子弹击中
hit(FlyingObject obj);//英雄机和敌机相撞
outBroundsAction();// 从数组中删除越界的飞行物
checkGameover();// 检查游戏是否结束
repaint();
可以控制的动的
状态---START: hero,start.png
RUNNING: 实体的进入,子弹发射,检测碰撞与子弹击中,检测游戏结束....
PAUSE: timer.cancel(),pause.png
GAMEOVER: 清零,初始化
第一步(设计分析要建的类以及相互关系):
FlyingObject-------所有飞行物的父类(抽象类)
{width,height,x,y,image}
Award--------------奖励接口,击中蜜蜂会获得奖励,蜜蜂符合既是飞行物又有奖励,实现该接口
{life,doubleFire,getType()}
Enemy--------------敌人接口,击中敌机会获得分数,敌机符合既是飞行物又是敌人,实现该接口
{getScore(int score)}
Airplane-----------敌机类
extends FlyingObject implements Enemy
Hero---------------英雄机类
extends FlyingObject
Bee----------------蜜蜂类
extends FlyingObject implements Award
Bullet-------------子弹类
extends FlyingObject
class Hero...{
BufferedImage images[]=new BufferedImage[2];//显示喷气效果,需要两张图片切换
int index;//控制两张图片切换频率(index++/10%2==0?),定时器间隔*10切换一次
int life;//生命
int doubleFire;//双倍火力的子弹数量
Hero(){
image = ShootGame.hero0;
width = image.getWidth();
height = image.getHeight();
this.x = 150;
this.y = 400;
# = 3;// 生命
doubleFire = 0;// 火力,等于0表示单倍火力
images[0] = ShootGame.hero0;
images[1] = ShootGame.hero1;
index = 0;
}
}
class Airplane...{
int speed;//下落的速度
Airplane(){
image=ShootGame.airplane;
width=image.getWidth();
height=image.getHeight();
x=(int)(Math.random()*(ShootGame.WIDTH-this.getWidth()));
y=-this.getHeight();
speed=new Random().nextInt(6);//下落速度取0-5的随机数
}
}
class Bee ...{
int xspeed;//蜜蜂的横向移动速度
int yspeed;//蜜蜂的纵向移动速度
int awardType();//蜜蜂的奖励类型
Bee(){
image=ShootGame.bee;
width=image.getWidth();
height=image.getHeight();
x=(int)(Math.random()*(ShootGame.WIDTH-this.getWidth()));
y=-this.getHeight();
this.awardType=(int)(Math.random()*2);
}
int getAwardType(){};//得到蜜蜂的奖励类型
}
class Bullet(){
int xspeed=0;//横向速度
int yspeed=3;//纵向速度
Bullet(int x,int y){//子弹的初始位置是由英雄机的坐标决定的,由英雄机构造子弹
image=ShootGame.bullet;
width=image.getWidth();
height=image.getHeight();
this.x=x;
this.y=y;
}
public Bullet(int x,int y,int xspeed,int yspeed) {//备用,绝招,在屏幕下方出现一排子弹向上移动,速度自定
this(x,y);
this.xspeed=xspeed;
this.yspeed=yspeed;
}
}
第一步到此结束,因为各种游戏的第二步都不甚相同,关键是思想要走到"游戏如何动,怎么动,动了会怎样"那里去,只要有想法,然后一步一步地,将各个类的行为和联系理清,最终连成一条非线性链,那么游戏已经完成一大半。
最后一小步就要考虑"游戏在什么时候该怎么动",设计几种状态,例如出现几率最多的几种:start,running,gameover...开始状态需要初始化一部分实体在窗口,但是窗口应该是静态的,运行状态就是游戏最疯狂的时候,各种实体都动起来,如果检测到游戏已经结束,需要销毁窗口上的东西,重新初始化又进入到开始状态。
可能总结得不完善,也有很多说得本身就不对的地方,只是阐述了一下个人对窗口游戏设计的思想的理解。求勿喷
【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,如涉及作品内容、版权和其它问题,请在30日内与我们联系,我们会予以重改或删除相关文章,以保证您的权益!
Java开发高端课程免费试学
大咖讲师+项目实战全面提升你的职场竞争力
- 海量实战教程
- 1V1答疑解惑
- 行业动态分析
- 大神学习路径图
相关推荐
更多2017-10-24
2017-11-23
达内就业喜报
更多>Java开班时间
-
北京 丨 11月27日
火速抢座 -
上海 丨 11月27日
火速抢座 -
广州 丨 11月27日
火速抢座 -
兰州 丨 11月27日
火速抢座 -
杭州 丨 11月27日
火速抢座 -
南京 丨 11月27日
火速抢座 -
沈阳 丨 11月27日
火速抢座 -
大连 丨 11月27日
火速抢座 -
长春 丨 11月27日
火速抢座 -
哈尔滨 丨 11月27日
火速抢座 -
济南 丨 11月27日
火速抢座 -
青岛 丨 11月27日
火速抢座 -
烟台 丨 11月27日
火速抢座 -
西安 丨 11月27日
火速抢座 -
天津 丨 11月27日
火速抢座 -
石家庄 丨 11月27日
火速抢座 -
保定 丨 11月27日
火速抢座 -
郑州 丨 11月27日
火速抢座 -
合肥 丨 11月27日
火速抢座 -
太原 丨 11月27日
火速抢座 -
苏州 丨 11月27日
火速抢座 -
武汉 丨 11月27日
火速抢座 -
成都 丨 11月27日
火速抢座 -
重庆 丨 11月27日
火速抢座 -
厦门 丨 11月27日
火速抢座 -
福州 丨 11月27日
火速抢座 -
珠海 丨 11月27日
火速抢座 -
南宁 丨 11月27日
火速抢座 -
东莞 丨 11月27日
火速抢座 -
贵阳 丨 11月27日
火速抢座 -
昆明 丨 11月27日
火速抢座 -
洛阳 丨 11月27日
火速抢座 -
临沂 丨 11月27日
火速抢座 -
潍坊 丨 11月27日
火速抢座 -
运城 丨 11月27日
火速抢座 -
呼和浩特丨11月27日
火速抢座 -
长沙 丨 11月27日
火速抢座 -
南昌 丨 11月27日
火速抢座 -
宁波 丨 11月27日
火速抢座 -
深圳 丨 11月27日
火速抢座 -
大庆 丨 11月27日
火速抢座