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

📄 marioenemysprite.java

📁 一个很好的j2ms的元代码不是很专业的很适合初学者的哦
💻 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 MarioEnemySprite
  extends LPSprite
{
  protected MarioGameManage gm;
  protected int dy;
  protected static LPRect rect1=new LPRect();
  protected static LPRect rect2=new LPRect();
  protected int xSpeed;
  public int state;
  public boolean isCheck;

  public void writeData(DataOutputStream dos) throws IOException
  {
    super.writeData(dos);
    dos.writeInt(dy);
    dos.writeInt(xSpeed);
    dos.writeInt(state);
    dos.writeBoolean(isCheck);
  }
  public void readData(DataInputStream dis) throws IOException
  {
    super.readData(dis);
    dy = dis.readInt();
    xSpeed = dis.readInt();
    state = dis.readInt();
    isCheck = dis.readBoolean();
  }

  public MarioEnemySprite(MarioGameManage gm)
  {
    this.gm=gm;
    isCheck = true;
    rect1.dx = 16;
    rect1.dy = 16;
    rect2.dx = 16;
    rect2.dy = 16;
  }

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

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

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

  protected boolean checkSpriteCollisionVert()
  {
    if(dy>=0)
    {
      int i;
      for(i=gm.brick.length-1;i>=0;--i)
      {
        if(!gm.brick[i].isHidden)
        {
          if(((y+16)<=gm.brick[i].y)&&
             ((y+dy+16)>=gm.brick[i].y)
             &&(x>=gm.brick[i].x-10)&&(x<=gm.brick[i].x+12))
          {
            dy=gm.brick[i].y-(y+16);
            return true;
          }
        }
      }
      for(i=gm.bridge.length-1;i>=0;--i)
      {
        if(!gm.bridge[i].isHidden)
        {
          if(((y+16)<=gm.bridge[i].y)&&
             ((y+dy+16)>=gm.bridge[i].y)
             &&(x>=gm.bridge[i].x-10)&&(x<=gm.bridge[i].x+12))
          {
            dy=gm.bridge[i].y-(y+16);
            return true;
          }
        }
      }
    }
    return false;
  }

  protected boolean checkSpriteCollisionHorn()
  {
    return false;
  }

  public void changeDirection()
  {
  }
  public void changeState()
  {
  }
}



class EnemyTortoise extends MarioEnemySprite
{
  public boolean isPushable;
  protected int originX;
  protected int originY;
  protected boolean isLeft;
  protected int interval;
  public void writeData(DataOutputStream dos) throws IOException
  {
    super.writeData(dos);
    dos.writeInt(originX);
    dos.writeInt(originY);
    dos.writeBoolean(isLeft);
    dos.writeInt(interval);
  }
  public void readData(DataInputStream dis) throws IOException
  {
    super.readData(dis);
    originX = dis.readInt();
    originY = dis.readInt();
    isLeft = dis.readBoolean();
    interval = dis.readInt();
  }

  public EnemyTortoise(int x,int y,MarioGameManage gm)
  {
    super(gm);
    this.x = x;
    this.y = y;
    state = 0;
    xSpeed = -2;
    isPushable = false;
    isCheck = true;
    originX = x;
    originY = y;
  }
  public void action()
  {
    if(!isHidden)
    {
      if(state==0)
      {
        if(x>gm.canvas.width+50||x<-50
           ||y<0||y>gm.canvas.height+30)
        {
          return;
        }
        ++dy;
        y+=8;
        checkSpriteCollisionVert();
        checkTileCollisionVert();

        y+=dy;
        if(!checkTileCollisionHorn())
        {
          x+=xSpeed;
        }
        else
        {
          xSpeed=-xSpeed;
        }
        y-=8;
        ++frameCnt;
        if(frameCnt>1+offset||frameCnt<0+offset)
        {
          frameCnt=0+offset;
        }
        if(xSpeed>0)
        {
          offset=0;
        }
        else
        {
          offset=2;
        }
      }
      else if(state==1)
      {
        ++dy;
        y+=8;
        checkSpriteCollisionVert();
        checkTileCollisionVert();

        y+=dy;
        y-=8;

        if(++timeCnt==200)
        {
          state=0;
          frameCnt=0;
          timeCnt=0;
          isPushable = false;
          isCheck = true;
        }
      }
      else if(state==2)
      {
        ++dy;
        y+=8;
        checkSpriteCollisionVert();
        checkTileCollisionVert();
        y+=dy;
        if(!checkTileCollisionHorn())
        {
          x+=xSpeed;
        }
        else
        {
          xSpeed=-xSpeed;
        }
        y-=8;
      }
      else if(state==3)
      {
        ++dy;
        y+=dy;
        if(y>gm.canvas.height)
        {
          isHidden = true;
        }
      }
    }
  }
  public void reInit(int x,int y)
  {
    super.reInit(x,y);
    state = 0;
    xSpeed = -2;
    isPushable = false;
    isCheck = true;
  }

  public void changeState()
  {
    if(state==0)
    {
      state = 1;
      frameCnt = 4;
      isPushable = true;
      isCheck = false;
    }
    else if(state==1)
    {
      state = 2;
      isPushable = false;
      isCheck = true;
      if(gm.mainSprite.x<x)
      {
        xSpeed = 10;
      }
      else
      {
        xSpeed = -10;
      }
      x+=xSpeed;
    }
    else if(state==2)
    {
      state=1;
      frameCnt=4;
      isPushable=true;
      xSpeed = 2;
      isCheck = false;
    }
  }
  public void changeDirection()
  {
    frameCnt = 5;
    state = 3;
    isCheck = false;
  }
}

class EnemyTortoiseHorn extends EnemyTortoise
{
  public EnemyTortoiseHorn(int x,int y,int interval,MarioGameManage gm)
  {
    super(x,y,gm);
    state = 0;
    this.interval = interval;
  }
  public void reInit(int x,int y)
  {
    super.reInit(x,y);
    state = 0;
  }
  public void action()
  {
    if(!isHidden)
    {
      if(state==0)
      {
        if(isLeft)
        {
          x-=2;
          if(originX-(gm.mainSprite.judgeMap.x+x)>interval)
          {
            isLeft=false;
            offset=0;
          }
        }
        else
        {
          x+=2;
          if((x+gm.mainSprite.judgeMap.x)-originX>interval)
          {
            isLeft=true;
            offset=2;
          }
        }
        ++frameCnt;
        if(frameCnt>1+offset||frameCnt<0+offset)
        {
          frameCnt=0+offset;
        }
      }
      else
      {
        super.action();
      }
    }
  }
}

⌨️ 快捷键说明

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