首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2ME开发 >

看到网上1个别人没做完的小游戏,我重新写过了1下,原码发出来给大家看看(有点混乱),麻烦给点意见,大家交流1下

2011-12-23 
看到网上1个别人没做完的小游戏,小弟我重新写过了1下,原码发出来给大家看看(有点混乱),麻烦给点意见,大家

看到网上1个别人没做完的小游戏,小弟我重新写过了1下,原码发出来给大家看看(有点混乱),麻烦给点意见,大家交流1下

//=====================主类midlet==============================
/*
  *   MobileGame.java
  *
  *   Created   on   2007年2月19日,   上午8:45
  */

import   javax.microedition.midlet.*;
import   javax.microedition.lcdui.*;
import   javax.microedition.lcdui.game.*;
/**
  *
  *   @author     Victor
  *   @version
  */
public   class   MobileGame   extends   MIDlet   {
        private   Display   display=null;
        private   GameWorld   gameworld=null;
        public   MobileGame(){
          gameworld=new   GameWorld();
       
      display=Display.getDisplay(this);
        }
       
        public   void   startApp()   {
              gameworld.start();
display.setCurrent(gameworld);
        }
       
        public   void   pauseApp()   {
        }
       
        public   void   destroyApp(boolean   unconditional)   {
        }
}
//=====================背景类==============================
import   javax.microedition.lcdui.Image;
import   javax.microedition.lcdui.game.TiledLayer;
import   java.io.IOException;

/**
  *
  *   @author   Victor
  */
public   class   BackGround   extends   TiledLayer   {
    static   public     Image   imgbg=null;
    static   int   map[][]=new   int[][]{{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
        /**   Creates   a   new   instance   of   BackGround   */
        protected   BackGround(int   cols,int   rows,Image   img,int   width,int   height)   {
                super(cols,rows,img,width,height);
               
        }
       
public   static   BackGround   loadImage(){
      try{
  imgbg=Image.createImage( "/CityBackGround.png ");
    System.out.println( "Heightbg   "+imgbg.getHeight()+ "     Widthbg   "+imgbg.getWidth());
  }catch(IOException   imgError){System.out.println( "imgErroe "+imgError);}
  BackGround   background=new   BackGround(4,4,imgbg,60,80);
  for(int   i=0;i <4;i++){
          for(int   j=0;j <4;j++)
  background.setCell(j,i,map[i][j]);
 
  }
  return   background;
}  
}
//======================敌人类==========================
/*
  *   Enemy.java
  *
  *   Created   on   2007年2月20日,   下午3:09
  *
  *   To   change   this   template,   choose   Tools   |   Template   Manager


  *   and   open   the   template   in   the   editor.
  */


import   javax.microedition.lcdui.*;
import   javax.microedition.lcdui.game.Sprite;
import   java.io.IOException;          
import   java.util.Random;
/**
  *
  *   @author   Victor
  */
public   class   Enemy   {
        public   GameWorld   gameworld;
        Sprite   monster;
        private   int[][]   enemys;
        private   Random   rnd;
        private   static   Image   img;
        private   int   total;
    public   static   final   int   ENEMY_LEFT=0;
    public   static   final   int   ENEMY_RIGHT=1;
    public   static   final   int   ENEMY_TOP=3;
    public   static   final   int   ENEMY_BUTTOM=4;
    public   static   final   int   ENEMY_LIFE=0;
    public   static   final   int   ENEMY_X=1;
    public   static   final   int   ENEMY_Y=2;
    public   static   final   int   ENEMY_VX=3;
    public   static   final   int   ENEMY_VY=4;
    /**   Creates   a   new   instance   of   Enemy   */
      protected   Enemy(Image   img,int   width,int   height,int   total)   {
                monster=new   Sprite(img,width,height);
            //     monster.defineReferencePixel(width/2,height/2);
                monster.setRefPixelPosition(width/2,height/2);
                this.total=total;
                rnd=new   Random();
                enemys=new   int[total][5];//产生1片敌人
monster.defineCollisionRectangle(0,0,monster.getWidth(),monster.getHeight());

        }
        static   public   Enemy   createEnemy(GameWorld   world){//产生单个敌人
                try{
                        img=Image.createImage( "/Monster.png ");
                }catch(IOException   e){}    
        Enemy   enemy=new   Enemy(img,24,32,70);//敌人人数确定
                enemy.gameworld=world;
                return   enemy;
        }
       
        public   void   initEnemys(){//初始化ENEMY群
        for(int   i=0;i <enemys.length;i++){
        initEnemy(i);
        }  
        }
       
        private   void   initEnemy(int   i){//初始化ENEMY
        int   direct=(rnd.nextInt()&0x7fffffff)%4;   //确定方向随机


        //System.out.println( "方向值   "+direct);
          enemys[i][ENEMY_LIFE]=1;
          int   worldHeight=gameworld.getHeight();
          int   worldWidth=gameworld.getWidth();
          switch(direct){
                  case   ENEMY_LEFT:
                        //   monster.setFrameSequence(new   int[]{3,4,5});
                      //     monster.nextFrame();
                          enemys[i][ENEMY_X]=-5;
                          enemys[i][ENEMY_Y]=(rnd.nextInt()&0x7fffffff)%worldHeight;
                          enemys[i][ENEMY_VX]   =(rnd.nextInt()&0x7fffffff)%3+1;
                          enemys[i][ENEMY_VY]   =(rnd.nextInt())%3;              
                          break;
                  case   ENEMY_RIGHT:
                            //monster.setFrameSequence(new   int[]{9,10,11});
                        //   monster.nextFrame();
                          enemys[i][ENEMY_X]=worldWidth+5;
                          enemys[i][ENEMY_Y]=(rnd.nextInt()&0x7fffffff)%worldHeight;
                          enemys[i][ENEMY_VX]   =((rnd.nextInt()&0x7fffffff)%3+1)*(-1);
                          enemys[i][ENEMY_VY]   =(rnd.nextInt())%3;              
                          break;
                  case   ENEMY_TOP:
                          //   monster.setFrameSequence(new   int[]{6,7,8});
                      //     monster.nextFrame();
                          enemys[i][ENEMY_X]=(rnd.nextInt()&0x7fffffff)%worldWidth;
                          enemys[i][ENEMY_Y]=-5;
                          enemys[i][ENEMY_VX]   =(rnd.nextInt())%3;      
                          enemys[i][ENEMY_VY]   =((rnd.nextInt()&0x7fffffff)%3+1)*(-1);
                          break;
                  case   ENEMY_BUTTOM:


                        //     monster.setFrameSequence(new   int[]{0,1,2});
                        //   monster.nextFrame();
                          enemys[i][ENEMY_X]=(rnd.nextInt()&0x7fffffff)%worldWidth;
                          enemys[i][ENEMY_Y]=worldHeight+5;
                          enemys[i][ENEMY_VX]   =(rnd.nextInt())%3;      
                          enemys[i][ENEMY_VY]   =((rnd.nextInt()&0x7fffffff)%3+1)*(-1);
                          break;
          }
        }
       
        public   void   updateEnemy(int   i){//更新单一敌人
          enemys[i][ENEMY_X]+=   enemys[i][ENEMY_VX];
          enemys[i][ENEMY_Y]+=   enemys[i][ENEMY_VY];
        if(enemys[i][ENEMY_X] <-5||enemys[i][ENEMY_X]> gameworld.getWidth()){
        enemys[i][ENEMY_VX]*=-1;//X反弹敌人
        }
      if(enemys[i][ENEMY_Y] <-5||enemys[i][ENEMY_Y]> gameworld.background.getHeight()-50){
        enemys[i][ENEMY_VY]*=-1;//Y反弹敌人
        }
        }
       
        public   void   updateEnemys(Man   man,boolean   collision){
        for(int   i=0;i <enemys.length;i++){
        if(enemys[i][ENEMY_LIFE]==0){
      //   System.out.println( "dead   monster ");
        continue;
        }
        if(collision){
      //   System.out.println( "检测碰撞 ");
        if(isCollision(man,i,10)){//range
    //     System.out.println( "碰撞中 ");
        //gameworld.man.setVisible(false);
        gameworld.result();
      enemys[i][ENEMY_LIFE]=0;
      continue;
        }
        }
        this.updateEnemy(i);
        }
        }
       
        public   void   paint(Graphics   g,int   x,int   y){
        for(int   i=0;i <enemys.length;i++){
      if(enemys[i][ENEMY_LIFE]==0){
      continue;
      }
      paintEnemy(g,i,x,y);
        }
                }
       
public   void   paintEnemy(Graphics   g,int   i,int   x,int   y){
//monster.setFrameSequence(new   int[]{6,7,8});
monster.nextFrame();
monster.setPosition(enemys[i][ENEMY_X]+x,enemys[i][ENEMY_Y]+y);


if(monster.getX()> 0&&monster.getX() <260&&monster.getY()> 0&&monster.getY() <260){
monster.paint(g);
}
}
private   boolean   isCollision(Man   man,int   i,int   range){
boolean   result=false;
//man.setRefPixelPosition(man.getWidth()/2,man.getHeight()/2);
//System.out.println(monster.collidesWith(man,false));
//return   monster.collidesWith(man,false);
int   manXc=man.getRefPixelX();
int   manYc=man.getRefPixelY();
monster.setPosition(enemys[i][ENEMY_X],enemys[i][ENEMY_Y]);
int   enemyXc=monster.getRefPixelX();
int   enemyYc=monster.getRefPixelY();
if((manXc-enemyXc)*(manXc-enemyXc)+(manYc-enemyYc)*(manYc-enemyYc) <=range*range)
{
        result=true;
}
return   result;
}
}


[解决办法]
暂停功能最好完善下.
我是指来了电话或短信时的中断和恢复游戏.

你的代码
public void startApp() {
gameworld.start();
display.setCurrent(gameworld);
}

public void pauseApp() {
}
意味着,电话呼入中断游戏后,不做任何事情.gameworld这个线程继续工作.
看看在pauseApp()中加入gameworld.sleep(long millis);或者加入自己写的暂停游戏方法.
而恢复游戏后.程序再次调有一次startApp()中的gameworld.start();
游戏会不会出逻辑错误?

我没细看完呢,只是先说下我个人的看法.一点小建议.
你的这个没注释,不好看啊.
让大家帮你提修改意见,再多加些注释会更好.

热点排行