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

📄 mariobullet.java

📁 j2me 上的 超级马力游戏 代码 超级马力游戏 代码
💻 JAVA
字号:
/**
 * <p>Title: Mario</p>
 * <p>Description:
 * You cannot remove this copyright and notice.
 * You cannot use this file any part without the express permission of the author.
 * All Rights Reserved</p>
 * <p>Copyright: lizhenpeng (c) 2004</p>
 * <p>Company: LP&P</p>
 * @author lizhenpeng
 * @version 1.0.0
 */

package mario;


import lipeng.LPSprite;
import lipeng.LPRect;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;


public class MarioBullet
  extends LPSprite
{
  protected MarioGameManage gm;
  private LPRect rect1=new LPRect();
  private LPRect rect2=new LPRect();
  protected int xSpeed;
  protected int ySpeed;
  protected int dy;
  public void writeData(DataOutputStream dos) throws IOException
  {
    super.writeData(dos);
    dos.writeInt(xSpeed);
    dos.writeInt(ySpeed);
    dos.writeInt(dy);
  }
  public void readData(DataInputStream dis) throws IOException
  {
    super.readData(dis);
    xSpeed = dis.readInt();
    ySpeed = dis.readInt();
    dy = dis.readInt();
  }

  public MarioBullet(MarioGameManage gm)
  {
    isHidden=true;
    rect1.dx = 8;
    rect1.dy = 8;
    rect2.dx = 16;
    rect2.dy = 16;
    this.gm = gm;
  }

  public void initBullet(int x,int y,int xSpeed,int ySpeed)
  {
    this.x=x;
    this.y=y;
    this.frameCnt=2;
    this.isHidden=false;
    this.xSpeed=xSpeed;
    this.ySpeed=ySpeed;
  }

  // protected void
  protected boolean checkTileCollisionHorn()
  {
    int i;
    rect1.x=x+gm.mainSprite.judgeMap.x+xSpeed;
    rect1.y=y+gm.mainSprite.judgeMap.y;

    i=(x+gm.mainSprite.judgeMap.x+xSpeed+4)/gm.mainSprite.judgeMap.tileSize;

    if(i<0||i>gm.mainSprite.judgeMap.w-1)
      return false;
    int yTile1=(y+gm.mainSprite.judgeMap.y)/gm.mainSprite.judgeMap.tileSize;
    if(yTile1<0||yTile1>gm.mainSprite.judgeMap.h-1)
      return false;
    if(((gm.mainSprite.judgeMap.mapArray[yTile1][i]>>8)&0x04)==0x04)
    {
      rect2.x=i*16;
      rect2.y=yTile1*16;
      if(LPRect.IntersectRect(rect1,rect2))
      {
        isHidden = true;
        return true;
      }
    }
    return false;
  }

  protected void checkTileCollisionVert()
  {
    if(this.dy>=0)
    {
      for(int i=(y+gm.mainSprite.judgeMap.y)/
          gm.mainSprite.judgeMap.tileSize;
          i<=(y+gm.mainSprite.judgeMap.y+dy)/gm.mainSprite.judgeMap.tileSize;i++)
      {
        if(i<0||i>gm.mainSprite.judgeMap.h-1)
        {
          continue;
        }
        int xTile1=(x+gm.mainSprite.judgeMap.x+4)/
          gm.mainSprite.judgeMap.tileSize;
        if(xTile1>gm.mainSprite.judgeMap.w-1||xTile1<0)
        {
          return;
        }
        if(((gm.mainSprite.judgeMap.mapArray[i][xTile1]>>8)&0x02)==
           0x02)
        {
          dy=-8;
          return;
        }
      }
    }
  }

  protected void checkSpriteCollisionVert()
  {
    if(dy>=0)
    {
      int i;
      switch(gm.gameState)
      {
        case MarioGameManage.GAMESTATE_GAMELOOP:
          for(i=gm.brick.length-1;i>=0;--i)
          {
            if(!gm.brick[i].isHidden)
            {
              if(((y+8)<=gm.brick[i].y)&&
                 ((y+dy+8)>=gm.brick[i].y)
                 &&(x>=gm.brick[i].x-2)&&(x<=gm.brick[i].x+14))
              {
                //dy=gm.brick[i].y-(y+16);
                dy = -8;
                return;
              }
            }
          }
          break;
      }
    }
  }

  public void action()
  {
    if(isHidden)
    {
      return;
    }
    if(x>gm.canvas.width||x<-32
       ||y>gm.canvas.height||y<-32)
    {
      isHidden=true;
      return;
    }
    dy+=4;
    checkSpriteCollisionVert();
    checkTileCollisionVert();
    y+=dy;
    if(!checkTileCollisionHorn())
    {
      x+=xSpeed;
    }
    ++frameCnt;
    if(frameCnt<2||frameCnt>5)
    {
      frameCnt=2;
    }
  }
}

⌨️ 快捷键说明

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