上海Java培训
达内上海中山公园中心

13691148991

热门课程

java用swing写游戏有哪些共性?

  • 时间:2016-02-23
  • 发布:上海java培训
  • 来源:企业笔试题

java用swing写游戏有哪些共性?

用swing讲过两个游戏,加上有经典案例的电子书,照着书上敲了下代码,通过调试修改,最后总结了下,其实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;

this.life = 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...开始状态需要初始化一部分实体在窗口,但是窗口应该是静态的,运行状态就是游戏最疯狂的时候,各种实体都动起来,如果检测到游戏已经结束,需要销毁窗口上的东西,重新初始化又进入到开始状态。

可能总结得不完善,也有很多说得本身就不对的地方,只是阐述了一下个人对窗口游戏设计的思想的理解。

IT免费课程咨询:http://sh.java.tedu.cn/baidu3/wmkc02/

上一篇:Java API中String和集合框架区别
下一篇:MySQL数据库用户名和密码修改

Java常用异常类及使用场景

好窘!面试中的bug让我瞬间破功

拿这些撼动Java面试官?一招就够格

Java集合框架的问答题,面试足够了

选择城市和中心
贵州省

广西省

海南省