正文

J2ME 不断修改2006-11-03 13:56:00

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

分享到:

import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;
import javax.microedition.rms.*;
import java.util.*;
import java.io.*;

//简单的动画canvas by sword2008@程序之巢

//我原本的图片有张超过了200k,传不上来。

public class test2 extends MIDlet{
 private Display display;

 public test2(){
 
 }

 public void startApp(){
 new HCanvas(Display.getDisplay(this)).start();}

 public void pauseApp(){ }

 public void destroyApp(boolean unkowmn){ }

class HCanvas extends GameCanvas implements Runnable{
 private Display display;
 private boolean sleeping;
 private long frameDelay;
 private int inputDelay;
 private Random rand;
 private Image background;
 private Image chickenHead;
 private Sprite chickenSprite;
 private Sprite[] carSprite=new Sprite[4];
 private int[] carYSpeed=new int[4];
 private boolean gameOver;
 private int numLives;
 private int score;
 private Player musicPlayer;
 private Player celebratePlayer;
 private Player squishPlayer;
 private Player gameoverPlayer;
 private int pass,lever,nextlever=1;//增加游戏难度 ,nextlever记录当前的难度,为难度提高+1
 private int []hiScores=new int[5];
 
public HCanvas(Display d){
 super(true);
 display=d;
 
 frameDelay=50;
 inputDelay=0;
    }
///////////////////////////////////////////////////////////////////////////////////
public void start(){
 display.setCurrent(this);

 rand=new Random();
 
 gameOver=false;
 numLives=3;
 score=0;
 lever=0;

//声音文件初始化
/* try{
 InputStream is=getClass().getResourceAsStream("0.mid");
 musicPlayer=Manager.createPlayer(is,"audio/midi");
 musicPlayer.prefetch();

 is=getClass().getResourceAsStream("1.mid");
 celebratePlayer=Manager.createPlayer(is,"audio/midi");//通过道路
 celebratePlayer.prefetch();

 is=getClass().getResourceAsStream("2.mid");
 squishPlayer=Manager.createPlayer(is,"audio/midi");
 squishPlayer.prefetch();

 is=getClass().getResourceAsStream("0.mid");
 gameoverPlayer=Manager.createPlayer(is,"audio/midi");
 gameoverPlayer.prefetch();
    }
 catch(IOException ioe){
 System.out.println(ioe.toString());
     }
 catch(MediaException me){
        }
*/


//动画图片初始化 
 try{
 background=Image.createImage("/001-G_Water01.png");
 chickenHead=Image.createImage("/019-Accessory04.png");
 
 chickenSprite=new Sprite(Image.createImage("/048-Fairy01.png"),22,22);
 chickenSprite.setPosition(0,77);

 carSprite[0]=new Sprite(Image.createImage("/36.png"));
 carSprite[0].setPosition(40,0);
 carYSpeed[0]=0;
 carSprite[1]=new Sprite(Image.createImage("/37.png"));
 carSprite[1].setPosition(75,0);
 carYSpeed[1]=-3;
 carSprite[2]=new Sprite(Image.createImage("/44.png"));
 carSprite[2].setPosition(105,67);
 carYSpeed[2]=-2;
 carSprite[3]=new Sprite(Image.createImage("/040-Item09.png"));
 carSprite[3].setPosition(128,64 );
 carYSpeed[3]=-5;
    }
 catch(IOException e){
 System.out.println("failed loading image!");
       }

 sleeping=false;
 Thread t=new Thread(this);
 t.start();
  
     }
///////////////////////-------------------------------------------------------------
public void checkLever(){
 
 if(lever==nextlever)
{ for(int j=0;j<4;j++)
 carYSpeed[j]=carYSpeed[j]+1;
 nextlever+=1;

   }
///////////////////////-------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////////

public void stop(){
 sleeping=true;
//关闭声音
/* musicPlayer.close();
 celebratePlayer.close();
 gameoverPlayer.close();
 squishPlayer.close();
*/
    }

public void run(){
 Graphics g=getGraphics();
 
 while(!sleeping){
 update();
 draw(g);
 try{
 Thread.sleep(frameDelay);
    }
 catch(InterruptedException id)
 {}
   }
   }
/////////////////////////////////////////////////////////////////////////////////////////
private void update(){
 chickenSprite.nextFrame();//飞啊飞
 if(gameOver){
 int keyState=getKeyStates();
 if((keyState&FIRE_PRESSED)!=0){
//声音也开始了

/* try{
 musicPlayer.setMediaTime(0);
 musicPlayer.start();
    }
 catch(MediaException me){}
*/
 chickenSprite.setPosition(2,77);
 gameOver=false;
 score=0;
 lever=0;
 numLives=3;
          }
 return;
      }
 burnmechine();//是否爆机
 if(++inputDelay>2){
 int keyState=getKeyStates();
 if((keyState&LEFT_PRESSED)!=0){
 chickenSprite.move(-10,0);
 //chickenSprite.nextFrame();
          }
 else if((keyState&RIGHT_PRESSED)!=0){
 chickenSprite.move(10,0);
 //chickenSprite.nextFrame();
          }
 if((keyState&UP_PRESSED)!=0){
 chickenSprite.move(0,-10);
 //chickenSprite.nextFrame();
        }
 else if((keyState&DOWN_PRESSED)!=0){
 chickenSprite.move(0,10);
 //chickenSprite.nextFrame();
        }
 checkBounds(chickenSprite,false);
 
 inputDelay=0;
 
     }
 if(chickenSprite.getX()>100){
 if(pass==5)
 {pass=0;
  lever+=1;
 }
 else pass+=1;//难度增加
 
 checkLever();//游戏难度升级
 
 
 
//通过了的WAV

/* try{
 
 celebratePlayer.start();
    }
 catch(MediaException me){}
*/
 AlertType.WARNING.playSound(display);

 chickenSprite.setPosition(2,77);
 score+=25;
        }
 for(int i=0;i<4;i++){
 carSprite[i].move(0,carYSpeed[i]);
 checkBounds(carSprite[i],true);

 if(chickenSprite.collidesWith(carSprite[i],true)){
 AlertType.ERROR.playSound(display);
 
 if(--numLives==0)
 {
//结束音乐
/* try{
 musicPlayer.stop();
 gameoverPlayer.start();
    }
 catch(MediaException me){}
*/
 gameOver=true;
 }
 else
 {chickenSprite.setPosition(2,77);}
 
 break;
        }
       }
       }
////////////////////////////////////////////////////////////////////////////////////////
private void draw(Graphics g){
 g.drawImage(background,0,0,Graphics.TOP|Graphics.LEFT);
 
 for(int i=0;i<numLives;i++)
 g.drawImage(chickenHead,20-((i+1)*8),0,Graphics.TOP|Graphics.LEFT);
 
 chickenSprite.paint(g);
 
 for(int i=0;i<4;i++)
 carSprite[i].paint(g);

 if(gameOver){
 g.setColor(255,255,255);
 g.setFont(Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_BOLD,Font.SIZE_LARGE));
 g.drawString("game over",90,40,Graphics.TOP|Graphics.HCENTER);
 g.setFont(Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_BOLD,Font.SIZE_MEDIUM));
 g.drawString("你的分数为"+score,50,70,Graphics.TOP|Graphics.HCENTER);
 g.drawString("制作人:剑2008",50,90,Graphics.TOP|Graphics.HCENTER);
 flushGraphics();
 try{
 Thread.sleep(5000);
    }
 catch(InterruptedException id)
 {}
 paintHighScore();//显示分数榜
          }
 g.drawString(""+score+"    难度"+lever,35,0,Graphics.TOP|Graphics.LEFT);

 

 flushGraphics();
           }
private void burnmechine(){
 if(lever>9)//爆机
 {Graphics g=getGraphics();
 g.setColor(255,255,0);
 g.drawString("好强哦,爆机了!",20,55,Graphics.TOP|Graphics.LEFT);
 g.drawString("请联系QQ14923349",20,75,Graphics.TOP|Graphics.LEFT);
 flushGraphics();//不调用这个涵数会首先被图画覆盖,爆机留言显示不出来。
 }
     }

 


private void paintHighScore(){//分数排行榜,RMS
 Graphics g=getGraphics();
 g.setColor(0x000000);
 g.fillRect(0,0,getWidth(),getHeight());
 g.setColor(255,255,0);
 g.drawString("分数龙虎榜",20,0,Graphics.TOP|Graphics.LEFT);
 g.drawString("http://blog.programfan.com",5,20,Graphics.TOP|Graphics.LEFT);
    g.drawString("/blog.asp?author=qq14923349",5,30,Graphics.TOP|Graphics.LEFT);
 g.setColor(255,255,255);

 readHiScores();
 updateHiScore();
 writeHiScores();
 for(int i=0;i<5;i++)
 {
 
  g.drawString("第  "+(i+1)+"名: "+hiScores[i],10,60+i*10,Graphics.TOP|Graphics.LEFT);
      
 }
 
 flushGraphics();
 
 try{
 Thread.sleep(5000);
    }
 catch(InterruptedException id)
 {}

        }

 

 


private void readHiScores()//读出记录
{
 RecordStore rs=null;
 try{
  rs=RecordStore.openRecordStore("HiScores",false);
    }
 catch(Exception e){}
  if( rs!=null ){
 try{
 int len;
 byte[] recordData=new byte[8];
 for(int i=1;i<=rs.getNumRecords();i++)
        {
 if(rs.getRecordSize(i)>recordData.length)
 recordData =new byte[rs.getRecordSize(i)];
 
  len=rs.getRecord(i,recordData,0);
 
  hiScores[i-1]=(Integer.parseInt(new String(recordData,0,len)));
        }
     }
 catch(Exception e){
  System.err.println("Failed reading hi scores!");
     }
  try{
  rs.closeRecordStore();
     }
  catch(Exception e){
   System.err.println("Failed closing hi score record store!");
      }
         }
 else{
 for(int i=0;i<5;i++)
 hiScores[i]=0;
     }
 
}

 

 

 

private void writeHiScores()//添加记录
{ try{//删除前面的记录
 RecordStore.deleteRecordStore("HiScores");
    }
 catch(Exception e){}
 RecordStore rs=null;
 try{
 rs=RecordStore.openRecordStore("HiScores",true);
    }
 catch(Exception e){
 System.err.println("failed!!");
            }
  for(int i=0;i<5;i++)
 {    if(hiScores[i]>(int)score)
  hiScores[i]=(int)score;}
 for(int i=0;i<5;i++)
 {    if(hiScores[i]>(int)score)
  hiScores[i]=(int)score;
 byte[] recordData=Integer.toString(hiScores[i]).getBytes();
  try{
  rs.addRecord(recordData,0,recordData.length);
     }
  catch(Exception e){
  System.err.println("Failed writing hi scores!");
      }
 }
  try{//关闭记录存储
  rs.closeRecordStore();
     }
  catch(Exception e){
   System.err.println("Failed closing hi score record store!");
      }
}

 

 

 

 

 

private void updateHiScore(){
 int i;
 for(i=0;i<5;i++)
 if(score>hiScores[i])
 break;

 if(i<5)
 {
 for(int j=4;j>i;j--)
 {
 hiScores[j]=hiScores[j-1];
 }
 
 hiScores[i]=score;
 }

       }

 

 

 

 

 

private void checkBounds(Sprite sprite,boolean wrap){
 if(wrap){
 if(sprite.getX()<-sprite.getWidth())
 sprite.setPosition(getWidth(),sprite.getY());
 else if(sprite.getX()>getWidth())
 sprite.setPosition(-sprite.getWidth(),sprite.getY());
 if(sprite.getY()<-sprite.getHeight())
 sprite.setPosition(sprite.getX(),getHeight());
 else if(sprite.getY()>getHeight())
 sprite.setPosition(sprite.getX(),-sprite.getHeight());
  }
 else {
 if(sprite.getX()<0)
 sprite.setPosition(0,sprite.getY());
 else if(sprite.getX()>(getWidth()-sprite.getWidth()))
 sprite.setPosition(getWidth()-sprite.getWidth(),sprite.getY());
 if(sprite.getY()<0)
 sprite.setPosition(sprite.getX(),0); 
 else if(sprite.getY()>(getHeight()-sprite.getHeight()))
 sprite.setPosition(sprite.getX(),getHeight()-sprite.getHeight());
      }
          }

 

          }
}

阅读(3006) | 评论(0)


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

评论

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