正文

J2ME 准备做个是XX就下一百层1(代码混乱)2006-09-23 14:44:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/sword2008/18695.html

分享到:

import javax.microedition.midlet.MIDlet;import javax.microedition.lcdui.*;import javax.microedition.lcdui.game.*;import java.util.*;import java.io.*; //简单的动画canvas by sword2008@程序之巢 //我原本的图片有张超过了200k,传不上来。 public class test2 extends MIDlet{ private Display display;  public test2(){   }  public void startApp(){  new test(Display.getDisplay(this)).start();}  public void pauseApp(){ }  public void destroyApp(boolean unkowmn){ }   class test extends GameCanvas implements Runnable{////////////////////////////////////// private Display display; private long frameDelay; private boolean sleeping; private Random rand; private Sprite ken,ken2,ken3; private int XSpeed,YSpeed,treeYSpeed=-3; private Sprite tree[]=new Sprite[5]; private TiledLayer backgroundLayer,backgroundLayer2; private char sp; private boolean leftB=true,rightB=true,upB=true,downB=true,fireB=false; private boolean treeUp1=true,treeUp2=true,treeUp3=true,treeUp4=true,treeUp5=true; private boolean kenB=true;//kenB是否在空中////////////////////////////////////////System.out.println("go well!");//试验憾数int layerMap[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16  };//////////////////////////////////////int layerMap2[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16  }; ////////////////////////////////////// int up[]={12,13,14,15}; int down[]={0,1,2,3}; int left[]={4,5,6,7}; int right[]={8,9,10,11};////////////////////////////////////// public test(Display d){ super(true); display=d;  frameDelay=80;   }//========================================== public void start(){ display.setCurrent(this); XSpeed=YSpeed=0; rand=new Random(); try{ ken= new Sprite(Image.createImage("/057-Snake03.png"),64,64);  ken2=new Sprite(Image.createImage("/056-Snake02.png"),48,48); ken3=new Sprite(Image.createImage("/015-Warrior03.png"),32,48); ken2.setPosition(40,50);  for(int i=0;i<5;i++)  tree[i]=new Sprite(Image.createImage("/007-Swamp01.png"),65,32);   backgroundLayer=new TiledLayer(4,4,Image.createImage("/003-Forest01.png"),64,152);  backgroundLayer2=new TiledLayer(4,4,Image.createImage("/001-Sky01.PNG"),120,120);} catch(Exception e){System.out.println(e.toString());}//------------------------------------------ sleeping=false;//============================== for(int i=0;i<layerMap.length;i++) {int column=i%4; int row=(i-column)/4; backgroundLayer.setCell(column,row,layerMap[i]); } for(int i=0;i<layerMap2.length;i++) {int column=i%4; int row=(i-column)/4; backgroundLayer2.setCell(column,row,layerMap2[i]); }//============================== Thread t=new Thread(this);  t.start();    }//------------------------------------------ public void run(){ Graphics g=getGraphics(); while(!sleeping){ update(); draw(g); try{Thread.sleep(frameDelay);} catch(Exception e){}   }   }private void draw(Graphics g){ g.setColor(0x000000); g.fillRect(0,0,getWidth(),getHeight());//   if(!fireB){ backgroundLayer.paint(g); ken2.paint(g); ken3.paint(g);  ken.paint(g);} else{ backgroundLayer2.paint(g); ken2.paint(g); ken3.paint(g);  ken.paint(g);}  treeMove();//板运动涵数 flushGraphics();   }//===============/////////////////////////////////////////////////////////////////////////////////////////public void treeMove(){  Graphics g=getGraphics(); if (!treeUp1) {tree[0].setPosition(Math.abs(rand.nextInt())%5*40,this.getHeight()); treeUp1=!treeUp1; } tree[0].move(0,treeYSpeed);  tree[0].paint(g); if (!treeUp2) {tree[1].setPosition(Math.abs(rand.nextInt())%5*40,this.getHeight()+20); treeUp2=!treeUp2; } tree[1].move(0,treeYSpeed);  tree[1].paint(g); if (!treeUp3) {tree[2].setPosition(Math.abs(rand.nextInt())%5*40,this.getHeight()+40); treeUp3=!treeUp3; } tree[2].move(0,treeYSpeed);  tree[2].paint(g); if (!treeUp4) {tree[3].setPosition(Math.abs(rand.nextInt())%5*40,this.getHeight()+60); treeUp4=!treeUp4; } tree[3].move(0,treeYSpeed);  tree[3].paint(g); if (!treeUp5) {tree[4].setPosition(Math.abs(rand.nextInt())%5*40,this.getHeight()+50); treeUp5=!treeUp5; } tree[4].move(0,treeYSpeed);  tree[4].paint(g); }  ////////////////////////////////////////////////////////////////////////////////////////// //---------------------leftB=true;rightB=true;upB=true;downB=true;public  void go(){ char ch=sp; if((ch=='l')&&(leftB==true))  {ken.setFrameSequence(left);leftB=!leftB;rightB=true;upB=true;downB=true;}  else if((ch=='l')&&(leftB==false)) ken.nextFrame();  else if((ch=='r')&&(rightB==true))  {ken.setFrameSequence(right);rightB=!rightB;leftB=true;upB=true;downB=true;}  else if((ch=='r')&&(rightB==false)) ken.nextFrame();  else if((ch=='u')&&(upB==true))  {ken.setFrameSequence(up);upB=!upB;leftB=true;rightB=true;downB=true;}  else if((ch=='u')&&(upB==false)) ken.nextFrame();  else if((ch=='d')&&(downB==true))  {ken.setFrameSequence(down);downB=!downB;leftB=true;rightB=true;upB=true;} else if((ch=='d')&&(downB==false)) ken.nextFrame();  else ken.nextFrame();}///////////////////////////////////////////////////////////public void treeSleep(int i)//这个涵数我一开始就想错了,留着算了。{ try{Thread.sleep(i);} catch(Exception e){e.toString();} }/////////////////////////////////////////////////////////// //-----------------------public void drup()//跳 {     Graphics g=getGraphics();  fireB=!fireB;  for(int i=1;i<9;i=i+2)  {ken.move(i,-i);  draw(g);} for(int i=1;i<9;i=i+2) {ken.move(i,i); draw(g); } }//====================public void treeCheckBound(Sprite e,int i){ if(e.getY()<-30)  switch(i) {case 0:treeUp1=false;break; case 1:treeUp2=false;break; case 2:treeUp3=false;break; case 3:treeUp4=false;break; case 4:treeUp5=false;break; }   }//====================//////////////////////////////////////////////////public void treecheck(){  treeCheckBound(tree[0],0); treeCheckBound(tree[1],1); treeCheckBound(tree[2],2); treeCheckBound(tree[3],3); treeCheckBound(tree[4],4);   }///////////////////////////////////////////////////*public void move2(){ for(int i=0;i<3;i++)     {if(i==1) ken.prevFrame(); else ken.nextFrame(); }}*///=======================public void Laymove(){if(XSpeed>0&&YSpeed>0) backgroundLayer.move(0,0);}//////////////////////////////////////////////////////////public void kenCollidesWith(){ kenB=false;//没碰到板就为false if(ken.collidesWith(tree[0],true)) {YSpeed=treeYSpeed;kenB=true;} if(ken.collidesWith(tree[1],true)) {YSpeed=treeYSpeed;kenB=true;} if(ken.collidesWith(tree[2],true)) {YSpeed=treeYSpeed;kenB=true;} if(ken.collidesWith(tree[3],true)) {YSpeed=treeYSpeed;kenB=true;} if(ken.collidesWith(tree[4],true)) {YSpeed=treeYSpeed;kenB=true;}  //}//////////////////////////////////////////////////////////public void update(){//-------------------------------------------  int keyState=getKeyStates(); if(kenB){//在空中的话,左右方向不能移动  if((keyState&LEFT_PRESSED)!=0)  {XSpeed-=4;sp='l';go();}  if((keyState&RIGHT_PRESSED)!=0)  {XSpeed+=4;sp='r';go();}  } else {  if((keyState&LEFT_PRESSED)!=0)  {XSpeed-=2;sp='l';go();}  if((keyState&RIGHT_PRESSED)!=0)  {XSpeed+=2;sp='r';go();}  } if((keyState&UP_PRESSED)!=0) {YSpeed-=4;sp='u';go();} if((keyState&DOWN_PRESSED)!=0) {YSpeed+=4;sp='d';go();} if((keyState&FIRE_PRESSED)!=0)  if((keyState&FIRE_PRESSED)!=0) {drup();} XSpeed=Math.min(XSpeed,5); YSpeed=Math.min(YSpeed,5);//-------------------------------------------  YSpeed=4;//一直往下掉 kenCollidesWith();//是否碰到板 treecheck();//板是否到顶 ken.move(XSpeed,YSpeed); backgroundLayer.move(-1,-1); Laymove(); XSpeed=0;YSpeed=0;//初始化速度,不要让他一直保留速度        ken3.move(XSpeed+1,YSpeed);//==============================if(ken.collidesWith(ken2,true)){System.out.println("good");   }//----------------- }  } }/*算法分析(1)分析是在我完成板上浮之后才想到的,以下都是针对对象角色的分析:1,角色是一直向下的,也就是YSpeed一定有个速度,而且不断做检测,如碰到板,就设置YSpeed为零速度。2,空中不可以左右移动;3, 虽然原来的游戏是不容许跳的,我还是写了个,可以删除,只是为了更具娱乐;4, 角色到顶后会减血,并掉下来,目前还没做体力;5, 原版是有钉的,以后补做吧,用1k多一点的图就够了; 纠正部分算法 (2)1, 为零速度并不能表达角色站在板上,因为角色这时候只是呆在那里,所以应该把YSpeed等于这时候的板的向上速度;2, 是变量的应该声明,声明了treeYSpeed,并且如果可以合成涵数的话,最后还是放在一个涵数内,那样维护起来方便,扩展起来也舒服!3, 我突然想起角色图片是16副,有什么问题?没问题,只是,那个涵数,角色向左右上下移动是我想了30分钟才搞出来,汗!4,不知道为什么图片老是显示向下动,原因是我不小心把一个IF DOWN控制语句删除了。5,midlet2.0的碰撞检测问题,只要碰到边就是算碰撞了,而我们要的是碰到板的平面;6,在空中的做个判断,kenB为False就是在空中7,五个板应该够了.8,忘记空中是可以移动的,不过移动速度好象```忘记了; */

阅读(12321) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册