J2ME期末练习|鸡|

 ===============================结果就只是需要修改下精灵内的帧图片 给按键设置了不超出 纠结了好几天...
package heyway;

import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.util.Random;
import java.io.*;

/**
 * <p>Title: </p>
 *
 * <p>De scription: </p>
 *
 * <p>Copyright: Copyright (c) 2008</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class HeyWayCanvas extends GameCanvas implements Runnable{
    private boolean sleeping;//确定动画是否开始,可以用来暂停一个动画
    private long frameDelay;//控制循环的等待时间
    private int inputDelay;//用来控制按键的灵敏度


    private Image backgroundImage;//背景图像
    private TiledLayer background;//公路背景
    private byte[][] backgroundMap={{1,2,3,4,5,6,7,8,9,1,1,1,1},{1,2,3,4,5,6,7,8,9,1,1,1,1}};//地图数组

    private Image HenHead;//母鸡脑袋图像,用来指示母鸡剩下性命的数量
    private Sprite HenSprite;//一个母鸡精灵
    private Sprite[] carSprite=new Sprite[4];//四个汽车精灵
    private int[] carYSpeed=new int[4];//汽车速度
    private boolean gameOver;//确定游戏是否结束
    private int numLives;//保存剩下母鸡性命的数量
       private int score;//保存游戏玩家的分数
    public HeyWayCanvas() {
        super(true);
        frameDelay=33;//设定每帧的速率
        inputDelay=0;//清除输入延迟
       /** try {
            jbInit();
        }
        catch(Exception e) {
            e.printStackTrace();
        } */
    }

  /** private void jbInit() throws Exception {
        // add the Exit command
        addCommand(new Command("Exit", Command.EXIT, 1));
    }

    protected void paint(Graphics g) {
        /** @todo Add paint codes */
  //  }
  public void start(){

      //初始化主要游戏变量
      gameOver=false;
      numLives=3;
      score=0;

      //初始化图像母鸡和汽车精灵
      try{
          backgroundImage=Image.createImage("/res/Highway.png");
          background=new TiledLayer(12,2,backgroundImage,20,177);
          for(int i=0;i<2;i++)
          {
              for(int j=0;j<12;j++)
              {
                  background.setCell(j,i,backgroundMap[i][j]);
              }
          }
          HenHead=Image.createImage("/res/HenHead.png");

          HenSprite=new Sprite(Image.createImage("/res/Hen.png"),22,22);
          HenSprite.setPosition(2,77);
          carSprite[0]=new Sprite(Image.createImage("/res/Car1.png"));
          carSprite[0].setPosition(27,0);
          carYSpeed[0]=3;
          carSprite[1]=new Sprite(Image.createImage("/res/Car2.png"));
          carSprite[1].setPosition(62,0);
          carYSpeed[1]=1;
          carSprite[2]=new Sprite(Image.createImage("/res/Car3.png"));
                    carSprite[2].setPosition(93,64);
          carYSpeed[2]=-2;
          carSprite[3]=new Sprite(Image.createImage("/res/Car4.png"));
          carSprite[3].setPosition(128,64);
          carYSpeed[3]=-5;

      }
      catch(IOException ex){
System.err.println("Failed loading images!");
      }
      //开始动画线程
      sleeping=false;
      Thread t=new Thread(this);
      t.start();
  }
  public void stop()
  {
      //停止动画
      sleeping=true;
  }
  public void update(){
      //检查游戏是否重新开始
      if(gameOver)
      {
       int   keyState=getKeyStates();
       if((keyState&FIRE_PRESSED)!=0){
               //开始新游戏
              HenSprite.setPosition(2,77);
              gameOver=false;
              score=0;
              numLives=3;

            }
            //当游戏结束时,不必做任何更新
            return;
      }
      if(++inputDelay>2)
      {
          int   keyState=getKeyStates();
       if((keyState&LEFT_PRESSED)!=0){
           HenSprite.move(-6,0);
           HenSprite.nextFrame();
           if(HenSprite.getX()<0){
               HenSprite.setPosition(0,HenSprite.getY());
           }
       }
       else if((keyState&RIGHT_PRESSED)!=0){
           HenSprite.move(6,0);
           HenSprite.nextFrame();
           if(HenSprite.getX()>getWidth()){
             HenSprite.setPosition(getWidth(),HenSprite.getY());
           }
       }
       else if((keyState&UP_PRESSED)!=0){
                  HenSprite.move(0,-6);
                  HenSprite.nextFrame();
                  if(HenSprite.getY()<0){
                     HenSprite.setPosition(HenSprite.getX(),0);
                  }
       }
       else if((keyState&DOWN_PRESSED)!=0){
                  HenSprite.move(0,6);
                  HenSprite.nextFrame();
                  if(HenSprite.getY()>getHeight()-24){
                     HenSprite.setPosition(HenSprite.getX(),getHeight()-24);
                  }
       }

       //重新设置输入延时
       inputDelay=0;
      }
      //判断母鸡是否通过
      if(HenSprite.getX()>154)
      {
        //重新设置母鸡位置并增加分数
        HenSprite.setPosition(2,77);
        score+=25;
      }
       //重设汽车精灵
       for(int i=0;i<4;i++){
           //移动汽车精灵
           carSprite[i].move(0,carYSpeed[i]);
           checkBounds(carSprite[i]);

           //检查母鸡和汽车之间的冲突
           if(HenSprite.collidesWith(carSprite[i],true)){
               //母鸡被汽车撞到时,。。。

               //检查游戏是否结束
               if(--numLives==0){
                   gameOver=true;
               }
               else
               {
                   //重置母鸡的位置
                   HenSprite.setPosition(2,77);

               }
               //不必继续更新汽车精灵
               break;
           }
       }
  }
  private void draw(Graphics g)
  {
      //绘制公路背景
      background.paint(g);
      //绘制剩下的母鸡的性命数量
      for(int i=0;i<numLives;i++)
          g.drawImage(HenHead,180-((i+1)*8),getHeight()-12,Graphics.TOP|Graphics.LEFT);
      //绘制母鸡精灵
      HenSprite.paint(g);
      //绘制汽车精灵
      for(int i=0;i<4;i++){
          carSprite[i].paint(g);
      }
      if(score>0){
          g.setColor(255,255,255);
       //g.drawString("分数:"+score,getWidth()-40,0,Graphics.TOP|Graphics.LEFT);
      }
      if(gameOver){
          //如果游戏结束则结束绘制消息和得分
          g.setColor(255,255,255);
          g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_LARGE));
          g.drawString("游戏结束",90,40,Graphics.TOP|Graphics.HCENTER);
          g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_LARGE));
          g.drawString("你的分数为:"+score,90,70,Graphics.TOP|Graphics.LEFT);
      }
      //将图像显示到屏幕上
      flushGraphics();
  }
  public void checkBounds(Sprite sprite){
      if(sprite.getY()<0)  sprite.setPosition(sprite.getX(),getHeight());
      if(sprite.getY()>getHeight()) sprite.setPosition(sprite.getX(),0);

  }
    public void run(){
Graphics g=getGraphics();

        //主游戏循环
        while(!sleeping){
            update();
            draw(g);
            try{
                Thread.sleep(frameDelay);
            }
            catch(InterruptedException ie){

            }
        }

    }

}
----------------------------------


!.jpg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值