⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bird.java

📁 类似于推箱子的手机游戏源码
💻 JAVA
字号:
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
import java.util.Random;

/**
 *
 * @author TOM
 */
public class Bird {
  private Hunt_Canvas manCanvas;  //游戏画面
  private int[] Locus;        //存储鸟数组
  private Sprite bird;       // 鸟图象
  private Random rnd;           // 随机种子
  private int SWidth, SHeight;  // 设备屏幕的宽度与高度
  private boolean isFly;
  static int t=0;
  private int k;
  private boolean isBird;
  

  public Bird(Hunt_Canvas manCanvas, Image img, int SWidth, int SHeight,int k) {
    this.manCanvas = manCanvas;
    if(k==2)
        bird = new Sprite(img, img.getWidth()/3, img.getHeight());
    if(k==3)
        bird = new Sprite(img, img.getWidth()/6, img.getHeight());
    this.k = k;
    bird.setFrame(0);
    Locus = new int[5];   
    rnd = new Random();
    this.SWidth = SWidth;
    this.SHeight = SHeight;
    isFly=false;
    isBird = true;
  }


  // 初始化运行轨迹随机数组
  public void InitBirdLocus() {
    
    Locus[0] = (rnd.nextInt() & 0x7fffffff) % 4; //鸟类型
    switch (Locus[0]) {
      case 0:
        Locus[1] = -50; //初始X坐标值
        Locus[2] = (rnd.nextInt() & 0x7fffffff) % (SHeight-200); //初始的Y坐标值
        Locus[3] = (rnd.nextInt() & 0x7fffffff) % 5 + 6; //X坐标增量
        Locus[4] = 0; //Y坐标增量
        bird.setTransform(Sprite.TRANS_MIRROR);
        isFly=false;
        break;
      case 1:
        Locus[1] = SWidth + 50;
        Locus[2] = (rnd.nextInt() & 0x7fffffff) % (SHeight-200);
        Locus[3] = ( (rnd.nextInt() & 0x7fffffff) % 5 + 6) * -1;
        Locus[4] = 0;
        bird.setTransform(Sprite.TRANS_NONE);
        isFly=false;
        break;
      case 2:
        Locus[1] = -50;
        Locus[2] = (rnd.nextInt() & 0x7fffffff) % (SHeight-200);
        Locus[3] = (rnd.nextInt() & 0x7fffffff) % 5 + 6; 
        Locus[4] = (rnd.nextInt()) % 7;
        bird.setTransform(Sprite.TRANS_MIRROR);
        isFly=true;
        break;
      case 3:
        Locus[1] = SWidth + 50;
        Locus[2] = (rnd.nextInt() & 0x7fffffff) % (SHeight-200);
        Locus[3] = (rnd.nextInt() & 0x7fffffff) % 5 + 6;
        Locus[4] = (rnd.nextInt()) % 7;
        bird.setTransform(Sprite.TRANS_NONE);
        isFly=true;
        break;
    }
  }
  // 显示
  public void paint(Graphics g) {
    
      bird.setPosition(Locus[1], Locus[2]);
      bird.paint(g);
    if(isBird && bird.getFrame()<=1)
        bird.nextFrame();
      else if(isBird && bird.getFrame()==2)
          bird.setFrame(0);
      else if(!isBird && bird.getFrame()<=4)
             bird.nextFrame();
            else{
                  bird.setFrame(0);      
                  manCanvas.setFlag(k,false);
                  InitBirdLocus();
                  isBird = true;     
            }
          
        
     
      UpdataBirdLocus(); // 更新运行轨迹数组
    
  }
  // 更新运行轨迹数组 
  private void UpdataBirdLocus() {
      if(isBird)
        Locus[1] += Locus[3];
      else{
          Locus[2] += 10;
      if(isFly){
        t++;
        if(t<10){
           Locus[2] += Locus[4]; 
        }
        else{
           Locus[4]*=-1;
           t=0;
        }
      }
      else 
          Locus[2] += Locus[4];
      }
    //超出边界的处理
    if (Locus[1] < -50 || Locus[1] > SWidth + 50 || Locus[2]>SHeight) {
      InitBirdLocus();
      manCanvas.setFlag(k,false);
      isBird = true;
    }
    if (Locus[2] < 0 || Locus[2] > SHeight -200) {
      Locus[4] *= -1;
    }
  }

  public Sprite getBird(){
    return bird;
  }

  public boolean getIsBird(){
         return isBird;
     }
     
     public void setIsBird(boolean f){
         isBird = f;
     }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -