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

📄 role.java

📁 手机ACT游戏全代码(包括代码和jar和jad)
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import javax.microedition.lcdui.*;


public class Role {
       public Role(Engine GE) {
       engine = GE;
       }
       Engine engine;
       int x; /*主角的位置,我们时刻需要知道主角处于地图的什么位置*/
       int y;
       int w;//主角站立下的碰撞矩形
       int h;
       int px;//用于主角碰撞的区域
       int py;
       int pw;
       int ph;
       int HP; /*生命值*/
       int SP; /*能量值*/
       final int maxHp = 100; /*主角的生命最大值,主角生命的固定上限*/
       boolean isLeft; /*主角的移动方向*/
       int actionIndex; //表示主角的哪个动作(站立、行走、攻击……)
       int frameIndex; //当前处于该动作下的第几帧
       byte curStatus; /*主角的状态表示,如同程序基本状态一样*/

       //以下是主角的基本状态,可自由设定,只为表示主角的一些基本动作,可酌情添加
       static final byte STATE_STAND = 0; /*站立*/
       static final byte STATE_RUN = 1; /*行走*/
       static final byte STATE_UP = 2; /*上跳*/
       static final byte STATE_DOWN = 3; /*下落*/
       static final byte STATE_DECLINE = 4; /*掉落*/
       static final byte STATE_ASSAULT = 5; /*攻击*/
       static final byte STATE_GAMEOVER = 7; /*结束*/
       static final byte STATE_DEAD = 8; /*死亡*/
       static final byte STATE_END = 9; /*游戏结束*/
       static final byte STATE_DECLINE_AFTER = 10; /*根据需要,设定了下落到地面,地面浮起灰尘的状态*/
       static final byte STATE_INJURE = 11; /*受伤*/
       static final byte STATE_ATTACK_ONE = 6; /*攻击*/
       static final byte STATE_ATTACK_TWO = 12; /*攻击*/
       static final byte STATE_ATTACK_THREE = 13; /*攻击*/
       static final byte STATE_ATTACK_FOUR = 14; /*攻击*/
       static final byte STATE_ATTACK_FIVE = 15; /*攻击*/
       static final byte STATE_ATTACK_SIX = 16; /*攻击*/
       static final byte STATE_ATTACK_SEVEN = 17; /*攻击*/


       boolean isDead;//标记主角是否死亡

       static final byte STEP = 6;//主角每次移动步长位6像素

       int leftStep = 0;

       /**
        * 初始化主角的信息
        * 包括初始的位置 方向等
        */
       protected void init() {
              isLeft = false; //初始化主角的方向(面向)
              SP = 100; //初始化主角的能量值
              HP = maxHp; // 初始化主角生命值
              x = 30; //初始化主角位置
              y = 10*Map.cellHeight;
              setStatus(STATE_STAND); //初始化主角的状态,这里同样需要用一个统一的函数来改变主角的状态,以方便主角在切换状态时需要初始化一些数据(例如初始帧等等)。
              isDead = false;
       }

       /**
        * 主角在各状态的帧的切换
        * 移动
        * 碰撞
        *逻辑处理部分
        */
       protected void roleLogic() {
              if(isDead) return;
              switch (curStatus)
              {
                     case STATE_STAND: /*站立状态下的逻辑*/
                            changeRoleFrameIndex( -1);
                            roleMove(0,2);
                            break;
                     case STATE_RUN: /*行走状态下的逻辑*/
                            changeRoleFrameIndex(-1);
                            roleMove(6, 5);
                            break;
                     case STATE_UP:
                            changeRoleFrameIndex( -1);
                            if (isLeft)
                                   x -= leftStep;
                            else
                                   x += leftStep;
                            roleMove(0, -8);
                            if (frameIndex >= 7)
                            { //第四帧以后为下落状态的动画
                                    setStatus(STATE_DOWN);
                             }
                            break;
                     case STATE_DOWN:
                            if (isLeft)
                                   x -= leftStep;
                            else
                                   x += leftStep;
                            frameIndex = 7;
                            roleMove(0,8);
                            break;
                     case STATE_DECLINE:
                             frameIndex = 7;
                            roleMove(0,8);
                            break;
                     case STATE_DECLINE_AFTER:
                            changeRoleFrameIndex(STATE_STAND);
                            break;
                     case STATE_ATTACK_ONE:
                            checkRoleAttack();
                            if (++ iCount > 3) setStatus(STATE_STAND);
                            changeRoleFrameIndex(-1);

                            break;
                     case STATE_ATTACK_TWO:
                            changeRoleFrameIndex(-1);
                            break;
                     case STATE_ATTACK_THREE:
                            changeRoleFrameIndex(-1);
                            break;
                     case STATE_ATTACK_FOUR:
                            checkRoleAttack();
                             if (++ iCount > 5)
                                    setStatus(STATE_STAND);
                            changeRoleFrameIndex(-1);
                            break;
                     case STATE_ATTACK_FIVE:
                            checkRoleAttack();
                            if (++ iCount > 5)
                                    setStatus(STATE_STAND);
                            changeRoleFrameIndex(-1);
                            break;
                     case STATE_ATTACK_SIX:
                            changeRoleFrameIndex(-1);
                            break;
                     case STATE_ATTACK_SEVEN:
                           changeRoleFrameIndex(-1);
                            break;
                     case STATE_INJURE:
                            changeRoleFrameIndex(STATE_STAND);
                            break;
                     case STATE_DEAD:
                            changeRoleFrameIndex(STATE_END);
                            break;
                     case STATE_END:
                            frameIndex = Data.frameItemIndex[0][actionIndex].length -1;
                            engine.isPass = false;
                            if(GameMIDlet.canvas.iGameState == GameCanvas.GS_GAME)
                                   GameMIDlet.canvas.setGameState(GameCanvas.GS_GAME_END);
                            break;


              }

              if(x > 550){//过关条件
                     engine.isPass = true;
                     if(GameMIDlet.canvas.iGameState == GameCanvas.GS_GAME)
                                   GameMIDlet.canvas.setGameState(GameCanvas.GS_GAME_END);
              }
       }

       /**
        * 显示主角
        * 根据主角的位置x,y
        * actionIndex
        * frameIndex
        * @param g Graphics
        */
       protected void drawRole(Graphics g) {
              if(isDead) return;
              //这里注意:主角对应在动画数据中的编号为0
              Tools.drawNpcItemData(g,0,actionIndex,frameIndex,x,y,!isLeft);
       }



       /**
        * 根据按键控制主角状态切换
        * @param keyCode int
        */
       int iCount  = 0;
       protected final void controlRole(int keyCode) {
            switch (curStatus) {

                 case STATE_STAND:
                      if (keyCode == GameCanvas.LEFT) {//方向左键
                             isLeft = true;//方向向左

                             setStatus(STATE_RUN);//切换为行走状态

                      }
                      else if (keyCode == GameCanvas.RIGHT) {
                             isLeft = false;
                              setStatus(STATE_RUN);
                      }
                      else if (keyCode == GameCanvas.UP) {
                           setStatus(STATE_UP);
                      }
                      else if(keyCode == GameCanvas.FIRE){
                           setStatus(STATE_ATTACK_FIVE);//这里选取第5种攻击动作,动画数据中已经含有7种攻击动画,后续攻击动画与之类似。
                           iCount = 0;
                      }

                      break;
                 case STATE_RUN:
                      break;
                 case STATE_UP:
                 case STATE_DOWN:
                      if(keyCode == GameCanvas.LEFT){
                           leftStep = STEP;
                           isLeft = true;
                      }
                      else if (keyCode == GameCanvas.RIGHT) {
                           leftStep = STEP;
                           isLeft = false;
                      }

                      break;
               case STATE_ATTACK_FIVE:
                      if(keyCode == GameCanvas.FIRE){
                             iCount = 0;
                      }
                      break;

            }
       }
       /**
        * 释放按键时的操作
        */
       protected final void controlReleased()
       {
              leftStep = 0;
              switch (curStatus)
              {
                     case STATE_RUN:
                            setStatus(STATE_STAND);
                            break;
                     case STATE_UP:
                     case STATE_DOWN:
                            break;
              }
       }



       protected void setStatus(byte status) {
              if(curStatus == status){
                     return;
              }
              aniIndex = 0;
              frameIndex = 0;
              switch (status)
              {
                     case STATE_STAND:
                            actionIndex = 0;
                            break;
                     case STATE_RUN:
                            actionIndex = 2;
                            break;
                     case STATE_UP:
                            actionIndex = 4;
                            break;
                     case STATE_DOWN:
                     case STATE_DECLINE:
                            aniIndex = 7;
                            actionIndex = 4;
                            break;
                     case STATE_DECLINE_AFTER:
                            aniIndex = 8;
                            actionIndex = 4;
                            break;

⌨️ 快捷键说明

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