课程咨询 :13691148991

上海java培训 > 合作企业 > 企业笔试题 > java Swing游戏开发经营分享
  • java Swing游戏开发经营分享

    发布:上海java培训      来源:企业笔试题      时间:2015-11-24

  • 一个月了,老师用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/

上一篇:0基础学Java需要看什么书比较好?

下一篇:EJB原来分享--基于哪些技术实现

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:1.20

 Java--零基础业余班

Java--零基础业余班

开班日期:1.18

Java--大数据全日制班

Java--大数据全日制班

开班日期:1.20

Java--大数据业余制班

Java--大数据业余制班

开班日期:1.18

  • 地址: 上海达内12大校区,就近安排,提供住宿(浦东/徐汇/人广/静安/虹口等)
  • 课程培训电话:13691148991     24小时咨询电话:150-2157-9486
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56