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

📄 mariomainsprite.java

📁 手机游戏
💻 JAVA
📖 第 1 页 / 共 3 页
字号:


package mario;

import javax.microedition.lcdui.*;

import lipeng.*;
import java.io.*;

public class MarioMainSprite
  extends LPSprite
{

  public MarioMainSprite(MarioGameManage gm, LPMaps map)
  {
    this.gm = gm;
    this.judgeMap = map;
    mainSpriteState = SMALL_SPRITE;
    this.gm = gm;
  }

//method
  public void action()
  {
    bgdx=0;
    bgdy=0;
    switch(mainSpriteState)
    {
      case GROW_SPRITE:
        if(++growCnt==10)
        {
          mainSpriteState=NORMAL_SPRITE;
          growCnt=0;
        }
        else
        {
          if(growCnt%2==0)
          {
            y+=16;
          }
          else
          {
            y-=16;
          }
        }
        break;
      case BECOME_FIRE:
        if(++becomeCnt==10)
        {
          mainSpriteState=FIRE_SPRITE;
          becomeCnt=0;
        }
        break;
      case DEAD_SPRITE:
        if(deadCnt==0)
        {
          dy=-10;
          frameCnt=10;
        }
        frameCnt=10;
        ++dy;
        y+=dy;
        if(++deadCnt>=20)
        {
          deadCnt=0;
          mainSpriteState=SMALL_SPRITE;
          gm.gameState=MarioGameManage.GAMESTATE_REINIT;
        }
        break;
      case BECOME_SMALL:
        if(++becomeCnt==10)
        {
          mainSpriteState=SMALL_SPRITE;
          becomeCnt=0;
        }
        break;
      default:
      {
        dy+=2;
        checkSpriteCollisionVertical();
        checkTileCollisionVertical();
        mainSpriteDamage();
        y+=dy;

        if(y+this.judgeMap.y<0)
        {
          y=0;
          dy=0;
        }
        if(y<=MarioMIDlet.gameCanvas.height/4
           ||
           ((this.judgeMap.y!=
             this.judgeMap.tileSize*this.judgeMap.h-
             MarioMIDlet.gameCanvas.height)
            &&y>=MarioMIDlet.gameCanvas.height/4)
          )
        {
          this.bgdy=(MarioMIDlet.gameCanvas.height/4-y)>>2;

          if(bgdy-this.judgeMap.y<
             MarioMIDlet.gameCanvas.height-
             this.judgeMap.tileSize*this.judgeMap.h)
          {
            bgdy=MarioMIDlet.gameCanvas.height-
              this.judgeMap.tileSize*this.judgeMap.h+this.judgeMap.y;
          }

          if((this.judgeMap.y<=0)&&y<MarioMIDlet.gameCanvas.height/4)
          {
            this.judgeMap.y=0;
            bgdy=0;
          }
        }
        else
        {
          bgdy=0;
        }

        if((allAction&LPKeyMask.MASK_KEY_LEFT)!=0)
        {
          this.isLeft=true;
          if(--dx<-MOVE_SPEED)
          {
            dx=-MOVE_SPEED;
          }
          if(checkTileCollisionHorizon())
          {
            dx=0;
          }
        }
        else if((allAction&LPKeyMask.MASK_KEY_RIGHT)!=0)
        {
          this.isLeft=false;
          if(++dx>MOVE_SPEED)
          {
            dx=MOVE_SPEED;
          }
          if(checkTileCollisionHorizon())
          {
            dx=0;
          }
        }
        else
        {
          if(dx>0)
          {
            if(checkTileCollisionHorizon())
            {
              dx=0;
            }
            else
            {
              --dx;
            }
          }
          else if(dx<0)
          {
            if(checkTileCollisionHorizon())
            {
              dx=0;
            }
            else
            {
              ++dx;
            }
          }
        }
        if(!checkSpriteCollisionHorizon())
        {
          x+=dx;
          if(dx<0)
          {
            if(distance>=-gm.canvas.width)
            {
              distance+=dx;
            }
          }
          if(distance<0)
          {
            if(dx>0)
            {
              distance+=dx;
            }
          }
        }
        else
        {
          dx=0;
        }

        if(this.x!=MarioMIDlet.gameCanvas.width/4)
        {
          this.bgdx=MarioMIDlet.gameCanvas.width/4-x;
          if(distance<-(gm.canvas.width-MarioMIDlet.gameCanvas.width/4))
          {
            bgdx=0;
          }
        }
        else
        {
          bgdx=0;
        }
        if(judgeMap.x-bgdx<0
           ||
           judgeMap.x-bgdx>
           judgeMap.tileSize*judgeMap.w-MarioMIDlet.gameCanvas.width
          )
        {
          bgdx=0;
        }

        if(mainSpriteState==FIRE_SPRITE)
        {
          if((allAction&LPKeyMask.MASK_KEY_OK_FLAG)!=0)
          {
            fire();
          }
          checkBulletDamage();
        }

        x+=this.bgdx;
        judgeMap.x-=this.bgdx;

        y+=this.bgdy;
        judgeMap.y-=this.bgdy;

        int tmpDy=this.bgdy;
        if(judgeMap.y<0)
        {
          tmpDy=bgdy+judgeMap.y;
          this.bgdy=-judgeMap.y;
          judgeMap.y=0;
          y+=this.bgdy;
        }
        bgdy=tmpDy;

        if(x<0)
        {
          x=0;
        }
        if(this.x>=MarioMIDlet.gameCanvas.width-32)
        {
          this.x=MarioMIDlet.gameCanvas.width-32;
        }
        if(isLeft)
        {
          offset=5;
        }
        else
        {
          offset=0;
        }

        if(dy!=0)
        {
          frameCnt=offset+3;
        }
        else if(((allAction&LPKeyMask.MASK_KEY_LEFT)!=0)
                ||((allAction&LPKeyMask.MASK_KEY_RIGHT)!=0))
        {
          walk();
        }
        else if(dy==0&&(allAction&LPKeyMask.MASK_KEY_UP_FLAG)==0)
        {
          frameCnt=offset;
        }
        if(isProtected)
        {
          isHidden=!isHidden;
          if(protectCnt++==protectInterval)
          {
            protectCnt=0;
            isProtected=false;
            isHidden=false;
          }
        }
        else
        {
          checkEnemyCollision();
        }
        if((allAction&LPKeyMask.MASK_KEY_OK_FLAG)!=0)
        {
          if(mainSpriteState==FIRE_SPRITE)
          {
            frameCnt=offset+1;
          }
          allAction&=~LPKeyMask.MASK_KEY_OK_FLAG;
        }

        checkStaticSpriteCollision();

        if(y>this.judgeMap.tileSize*this.judgeMap.h)
        {
          if(gm.menu.isVolOn)
          {
            gm.beatPlayer.replay();
          }
          gm.gameState=MarioGameManage.GAMESTATE_REINIT;
        }
      }
      break;
    }
  }


  private void spriteDeadAction()
  {
    if(gm.menu.isVolOn)
    {
      gm.beatPlayer.replay();
    }
    if(mainSpriteState==SMALL_SPRITE)
    {
      mainSpriteState=DEAD_SPRITE;
      return;
    }
    else
    {
      mainSpriteState=BECOME_SMALL;
      isProtected=true;
      this.protectCnt=0;
      this.protectInterval=20;
      return;
    }
  }

  private void checkEnemyCollision()
  {
    int i;
    switch(mainSpriteState)
    {
      case SMALL_SPRITE:
        rect1.x = x+2;
        rect1.y = y;
        rect1.dx = 12;
        rect1.dy = 16;
        break;
      case NORMAL_SPRITE:
      case FIRE_SPRITE:
        rect1.x = x+6;
        rect1.y = y+2;
        rect1.dx = 20;
        rect1.dy = 30;
        break;
    }
    rect2.dx = 14;
    rect2.dy = 14;
    for(i=gm.enemy.length-1;i>=0;--i)
    {
      if(!gm.enemy[i].isHidden)
      {
        if(gm.enemy[i].isCheck)
        {
          rect2.x = gm.enemy[i].x;
          rect2.y = gm.enemy[i].y;
          if(LPRect.IntersectRect(rect1,rect2))
          {
            spriteDeadAction();
            return;
          }
        }
      }
    }

    for(i=gm.tortoise.length-1;i>=0;--i)
    {
      if(!gm.tortoise[i].isHidden)
      {
        if(gm.tortoise[i].isCheck)
        {
          rect2.x=gm.tortoise[i].x;
          rect2.y=gm.tortoise[i].y+8;
          if(LPRect.IntersectRect(rect1,rect2))
          {
            if(Math.abs(rect1.y+rect1.dy-(rect2.y))>6)
            {
              spriteDeadAction();
              return;
            }
          }
        }
      }
    }

  }

  private void mainSpriteDamage()
  {
    if(dy>=0)
    {
      int i;
      rect1.y=y;
      rect2.dx=16;
      rect2.dy=16;
      if(mainSpriteState==SMALL_SPRITE)
      {
        rect1.x=x;
        rect1.dx=16;
        rect1.dy=16;
      }
      else
      {
        rect1.x=8;
        rect1.dx=20;
        rect1.dy=32;
      }

      for(i=gm.enemy.length-1;i>=0;--i)
      {
        if(!gm.enemy[i].isHidden)
        {
          if(gm.enemy[i].isCheck)
          {
            if((gm.enemy[i].y>=y+rect1.dy)
               &&(gm.enemy[i].y<=y+dy+rect1.dy)
               &&(x>gm.enemy[i].x-13)&&(x<=gm.enemy[i].x+10))
            {
              gm.enemy[i].changeState();
              if(gm.menu.isVolOn)
              {
                gm.beatPlayer.replay();
              }
            }
          }
        }
      }
      for(i=gm.tortoise.length-1;i>=0;--i)
      {
        if(!gm.tortoise[i].isHidden)
        {
          if((gm.tortoise[i].y+8>=y+rect1.dy)
             &&(gm.tortoise[i].y+8<=y+dy+rect1.dy)
             &&(x>gm.tortoise[i].x-13)&&(x<=gm.tortoise[i].x+10))
          {
            dy=-8;
            gm.tortoise[i].changeState();
            if(gm.menu.isVolOn)
            {
              gm.beatPlayer.replay();
            }
          }
        }
      }
    }
  }

  private boolean checkStaticSpriteCollision()
  {
    int i;
    rect2.dx = 16;
    rect2.dy = 16;
    switch(mainSpriteState)
    {
      case SMALL_SPRITE:
        rect1.x=x+2;
        rect1.y=y;
        rect1.dx=14;
        rect1.dy=16;
        break;
      default:
        rect1.x=x+8;
        rect1.y=y+1;
        rect1.dx=16;
        rect1.dy=31;
        break;
    }

    rect2.dx = 14;
    rect2.dy = 16;

    for(i=gm.mashRooms.length-1;i>=0;--i)
    {
      if(!gm.mashRooms[i].isHidden)
      {
        switch(mainSpriteState)
        {
          case SMALL_SPRITE:
            rect2.x = gm.mashRooms[i].x;
            rect2.y = gm.mashRooms[i].y;
            if(LPRect.IntersectRect(rect1,rect2))
            {
              if(gm.menu.isVolOn)
              {
                gm.beatPlayer.replay();
              }
              if(gm.mashRooms[i].frameCnt==6)
              {
                gm.mashRooms[i].isHidden=true;
                mainSpriteState=GROW_SPRITE;
                growCnt=0;
                return true;
              }
              else if(gm.mashRooms[i].frameCnt==8)
              {
                // add a person
                gm.mashRooms[i].isHidden=true;
                return true;
              }
            }
            break;
          case NORMAL_SPRITE:

⌨️ 快捷键说明

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