毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 论文 >> 正文

java手机游戏设计源代码 第7页

更新时间:2008-12-30:  来源:毕业论文

java手机游戏设计源代码 第7页
 当sboss飞入屏幕后,将sbz赋值为2,以执行下面
的if(sbz==2)语句。
    在判断语句if(sbz==2)里,将根据玩家的位置自动飞
行。首先,根据玩家飞机的位置对sbmove赋值,当c1在sboos的上、下、左、右时,其对应的值为1、2、3、4在这4个if语句中,要设置标志位(smovebz==0)。设置这个
标志位的目的是防止sboos根据c1的位置不停的改变运行状态,即防止sboos成为跟踪飞机。当sboos根据c1的位置改变一次运行方向后,smovebz赋值为1,即不检测c1
的位置。只有sboss运行到屏幕的边缘时,才将smovebz重新赋值为0,使其可以再次通过c1的位置决定sboos的运行方向。
当玩家子弹击中sboss后,使用sboss.setFrame(1),此时飞机变红,在本次repaint结束前,使用sboss.setFrame(0)使飞机变为本来颜色,而程序设定每1/20秒画一次,由此得到飞机被击中后变色的效果。(参见图4-10)。
    sboos会根据玩家飞机的位置发射子弹,根据游戏设置,当玩家在其上方、左方、右方时,sboss一次发射1发子弹,而玩家飞机在其下方时,sboss一次发射3发子弹。                        
    sboss与cboss共用3发子弹,因为当sboss出现时,离关尾还远,所以,为了提高效率,采用这种方法。
    如果sboos被击落后,使用函数setVisable(false)将bossbullet0、bossbullet1、bossbullet2设置为不见,使用sboss.setImage()函数将sboos的图片设置为爆炸图片。同时,玩家生命标志playerno加1,sbz赋值为-1,使得sboos无法发射子弹,sbpzbz赋值为1,使得玩家的子弹不与sboos进行碰撞检测。
    同时在屏幕中使用drawString()绘制“援军到达”四个字,随着屏幕的运动,爆炸图片逐渐进入屏幕下方,当sboos.getY()>palnepo,通过改变标志位的值使得drawSteing()不在执行,四字消失。
    如果玩家被击落后并没有点“返回“,而此时,背景会一直运动到关尾,考虑到其与关尾BOSS共用3发子弹,如sboos不消失,将会出现子弹乱飞的情况。所以,如果判断语句if((sboss.getY()==getHeight()))为真,则表示离地图的终点只有一个屏幕的距离时,sbz赋值为-1、sbpzbz赋值为1(含义上面已经说明)。同时调用sboss.move(0,-3),使sboos快速飞出屏幕,直到判断语句if(sboss.getY()<-65)为真时,调用下面的函数setVisable(false),使得sboos不可见。
4.5 普通敌人相关属性
    普通敌人是指游戏中不断出现的兰色飞机。
    首先在程序中首先定义了aik、aip两个Random()类对象,ai和aipp两个整型变量。程序中使用switch(ai)语句判断下一次的飞机出现情况,为了达到不重复出现的效果,使用语句ai=aik.nextInt()%4(同样应该在构造函数中放置此语句和aipp=aip.nextInt() % 5,以使每次游戏开始的时候敌人飞机的出现顺序是不固定的),以随机出现0,1,2,3四个整数(代表着飞机的四种出现情况)。
    情况1:使用 aipp=aip.nextInt()%5取得随机数aipp,根据下面三条语句设置飞机的出现位置:j0.setPosition(100-aipp*30,planepoup+24);
           j1.setPosition(100,planepoup);
           j2.setPosition(100+aipp*30,planepoup-24);;
将getHeight()/8赋给整型变量kkk,每次循环kkk-1,当kkk<=1时飞机转向,当aipp>0时,飞机向左下方运行,使用语句setFrame(0)、move(-3,3)达成向左下方运动的效果。当aipp<0时,向右下方运动,实现方法同上。
    情况2:初始位置设置方法同情况1。当kkk〈0时,飞机掉头向上飞,其中setFrame(3),
move(-4,0)。
    情况3:初始位置设置方法同情况1。当kkk〈0时,飞机只向左转。设置情况3的原因是在更多的随机位置出现敌机。
    情况4:初始位置设置方法同情况1。但其中的飞机j1具有跟踪能力,其实现方法如下:使用2个if语句if(j1.getX()<c1.getX())、if(j1.getX()>c1.getX())判断J1在c1的左或右侧,并且实时根据判断情况使用setFrame()和move()改变飞机的形态,使用语句
if((j1.getX()<c1.getX())&&((j1.getX()+48)>c1.getX())&&(j1.getY()<c1.getY()))判断c1是否在j1的下方,当c1在j1的下方时,发射子弹jbullet1。
     以上四种情况的最后,都将使用函数nextInt()产生ai,aipp的值。
     设置整型数组jb[4],对应着4种出现情况的标志位。
     如,执行情况1,首先执行判断语句if(jb[0]==1),在此语句中,首先使用setVisable (true)函数将敌人飞机设置为可见的,并根据上次运行的qipp的值设置敌人飞机的初始位置最后,jb[0]赋值为2。
    接着执行判断语句if(jb[0]==2),在此语句中,首先使用move()函数使飞机向下运动,同时kkk减1,当kkk<=0时,飞机转向,此时,根据aipp的正负判断飞机向哪边转向。当飞机飞出屏幕时,jb[0]赋值为3。
    需要注意的一点是,当取得ai的数值时,一定要写上这条语句:jb[ai]=1;因为当4种情况都出现一便的时候,标志位jb[]里的数值都将变为3,如果不将其重新赋值为1,敌人飞机将只能出现4次。
    其他3种情况也大致如此。
    普通敌人是否发射子弹由以下语句if(((j1.getX()<=c1.getX()-18)||((j2.getX() -6)>=c1.getX()))&(jbz==0)),即c1在j1左侧18象素范围内或j2左侧6象素范围时,j0、j1、j2一起发射子弹,jbz=1,表示在这组子弹消失前敌人不发射子弹。
    如果jpb的值为0,则判断语句if(jpb==0)里的move()语句将一直执行下去。
    之后,还需要对每发子弹于玩家飞机进行碰撞检测,如果碰撞,则将碰撞的这发子弹设置为不可见。
4.6 白云的实现原理
   为了游戏界面更加美观,程序中设定了精灵数组cloud[i]来表示白云,由于白云应该在所有飞机的上方,即cloud[i]应该最早被append()到LayerManager中,或者使用insert (cloud[],0)在索引数值0处插入Layer,本程序采用了第一种方法,即在gameScreen类的构造函数中按游戏设置的顺序使用lm.append()加入到LayerManager之中。
    程序中设定白云数为5。首先设置白云的初始位置,其语句如下:
cloud[0].setPosition(25,planepoup-(65));
cloud[1].setPosition(80,planepoup-(140));
cloud[2].setPosition(112,planepoup-(90));
cloud[3].setPosition(175,planepoup-(200));
cloud[4].setPosition(223,planepoup-(70));
其原理为:将屏幕的X数轴和Y数轴各分成5份,即在X轴的5个范围内每个范围出现一朵白云,Y轴的每个范围内也只能出现一朵。所以的白云的起始位置在每次游戏开始时是固定的。
白云位置设定后,使用move(0,1)使白云移动,由于白云初始位置设定在屏幕的不同区域内,故其移动出屏幕的先后顺序是不同的,使用if(cloud[].getY()>planepo)判断白云是否飞出屏幕。如果为真则使用cloud[].setPosition(cloudposition*40,planepoup)设置白云的位置,其中,cloudposition=aicloud.nextInt()%5,aicloud为Random()类对象。乘以40表示其在X轴出现的范围是多少,cloud[0]、cloud[1]、cloud[2]、cloud[3]、 cloud[4]乘以的值分别为40,30、55、15、22。以达成白云的随机出现效果。
4.7 关尾BOSS及相关属性
    关尾处飞机在屏幕上方横向移动,而背景地图不动,所以使用renderboss()重绘屏幕,其中,paint(g,0,0)表示屏幕绘制点在坐标轴(0,0)处。BOSS生命进度条由以下语句绘制:
g.setColor(255,0,0);
            g.fillRect(2,2,60,5);//生命进度条背静红
            g.setColor(255,255,255);
            g.fillRect(2,2,bosslife,5);//生命进度条前景白
其中bosslife记录着BOSS的生命值,其初始值为0,当玩家每击中一次BOSS,其值加5,,即化出白色进度条,当bosslife==60时,表示过关,除玩家飞机与子弹外的其他Sprite均使用setVisable(false)使其不在显示,同样的pzbz要赋予1,以消除玩家飞机还能与敌人碰撞的BUG。
    如果cboss.getX()<0,则表示其在屏幕左方出界,应改为右飞。同理如果cboss.getX()
>(getWidth()-cboss.getWidth()),则表示其在屏幕右方出界,应改为左飞。
在飞机横向飞行中,使用以下语句判断飞机是否开火:
if(((cboss.getX()<=c1.getX()-10)||(cboss.getX()<=c1.getX()+60))&&(jbsz==0))
当每发一组子弹后,jbsz=1,则飞机无法开火,知道子弹
飞出屏幕,jbsz才重新设定为0。而((cboss.getX()<=
c1.getX()-10)||(cboss.getX()<=c1.getX()+60)表示当
玩家飞机处于BOSS的左右各10个象素的范围内时。BOSS
开火。关尾参见图4-10。
4.8本章小结
第四章中按照相应的步骤描述了所有关键类的具体算
法实现,引用了相关函数进行了具体流程的解释,并对原

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ... 下一页  >> 

java手机游戏设计源代码 第7页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。