正文

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,忘记空中是可以移动的,不过移动速度好象```忘记了;

*/

阅读(3951) | 评论(0)


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

评论

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