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

📄 critter.java

📁 Critter_Crunch_J2ME 游戏源
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
            c.setAnim(Anims.GREEN_EATING);
            //#if DefaultConfiguration || Nokia_6600 || Nokia_6600_Unobfuscated || Nokia_3220 || Nokia_3220_Unobfuscated || Razr
            c.m_timer = (short)((TIME_EAT * count) - TIME_EAT_TO_CHEW);
            //#else
//#             c.m_timer = (short)(TIME_EAT * count);
            //#endif
            c.m_consumed += count;
         }

         while(tmp != null) {
            if( ((tmp.m_state & STATE_CLIMBING) == 0) &&
                ((tmp.m_state & STATE_BEING_EATEN) == 0) ) {
               //Engine.printLine("speed climb on " + toString());
               tmp.stop();
               tmp.m_state &= ~STATE_DESCENDING;
               tmp.m_state |= (STATE_ASCENDING | STATE_CLIMBING);
               tmp.m_speed = (byte)SPEED_CLIMB;
               tmp.m_destination_y -= Level.SQUARE_H * count;
            }

            tmp = Level.boardRetrieve(tmp.m_board_x, tmp.m_board_y + 1);
         }
      }
   }

   // reset the current Critter's movement and timers.
   public void reset() {
      
      stop();
      m_state &= ~(STATE_ASCENDING | 
                   STATE_DESCENDING | 
                   STATE_WESTWARD | 
                   STATE_EASTWARD | 
                   STATE_IMMOBILE |
                   STATE_FLASHING);
      m_timer = 0;
   }
   
   // sentence the Critter TO DEATH.
   public void sentence() { sentence(0); }

   // sentence the Critter TO DEATH.
   public void sentence(int time) {
      
      if(mutable()) {
         m_state &= ~(STATE_EATING | STATE_CHEWING);
         m_state |= (STATE_DYING | STATE_IMMOBILE);
         m_timer = (short)time;

         if(Level.s_state == Level.STATE_ACTIVE) {

            if(m_id == CREATURE_TNT) {
               makeFull();
               Level.s_board_state |= (Level.BOARD_EXPLODE_TNT);
            }

            if((m_state & STATE_TOXIC) == 0) {
               Level.s_combo++;
            }
         }
      }
   }

   // initiate the Critter's explosion death sequence.
   public void explode() {

      m_state &= ~STATE_DYING;
      m_state |= STATE_POPPING;
      //#if Nokia_3100 || Nokia_3100_Unobfuscated
//#       Engine.playSound(Engine.SOUND_POP);
      //#endif
         
      if(m_type == TYPE_CREATURE) {
         // particle pop effect
         if(((m_state & STATE_TOXIC) == 0) &&
            (m_id == CREATURE_GREEN ||
             m_id == CREATURE_ORANGE ||
             m_id == CREATURE_RED ||
             m_id == CREATURE_BLOCKER ||
             m_id == CREATURE_WILDCARD ||
             m_id == CREATURE_BLUE ||
             m_id == CREATURE_PURPLE)) {
            
            if ((m_state & STATE_FINAL_FALL) != 0 && m_timer <= 0 &&
               m_id != CREATURE_BLOCKER && m_id != CREATURE_WILDCARD) {
               // create a fake critter that appears to jump at the player
               int life = Particles.DEATH_CRITTER_LIFE + Engine.getRandom(Particles.DEATH_CRITTER_LIFE);
               
               Particles.create(Particles.TYPE_DEATH_CRITTER, Particles.LAYER_FOREGROUND, life, (m_x<<Engine.FP_SHIFT), (m_y<<Engine.FP_SHIFT), 
                  ((Level.s_player.m_x - m_x)<<Engine.FP_SHIFT)/life, -(life)<<Engine.FP_SHIFT, 0, (life/4)<<Engine.FP_SHIFT, m_id, 0);
               
            } else {
               Particles.create(Particles.TYPE_CREATURE_PUFF, Particles.LAYER_FOREGROUND, (m_x<<Engine.FP_SHIFT), (m_y<<Engine.FP_SHIFT), m_id);
            }
         }
            //Particles.create(Particles.TYPE_CREATURE_POP, Particles.LAYER_FOREGROUND, (m_x<<Engine.FP_SHIFT), (m_y<<Engine.FP_SHIFT), m_id);
            //Particles.create(Particles.TYPE_TNT_POP, Particles.LAYER_FOREGROUND, Engine.toFP(m_x), Engine.toFP(m_y));
         
         
         if((m_state & STATE_TOXIC) != 0) //Particles.create(Particles.TYPE_TOXIC_SPLAT, Particles.LAYER_FOREGROUND, Engine.toFP(m_x), Engine.toFP(m_y));
            Particles.create(Particles.TYPE_CREATURE_POP, Particles.LAYER_FOREGROUND, (m_x<<Engine.FP_SHIFT), (m_y<<Engine.FP_SHIFT), CREATURE_TOXIC);
         if (m_id == CREATURE_TNT) Particles.create(Particles.TYPE_TNT_POP, Particles.LAYER_HUD, (m_x<<Engine.FP_SHIFT), (m_y<<Engine.FP_SHIFT));
      }
      else if(m_type == TYPE_ITEM) {
         if (m_id == ITEM_GEM_TOXIC)
            Particles.create(Particles.TYPE_TOXIC_SPLAT, Particles.LAYER_FOREGROUND, (m_x<<Engine.FP_SHIFT), (m_y<<Engine.FP_SHIFT));
         else
            Particles.create(Particles.TYPE_GEM_SHATTER, Particles.LAYER_FOREGROUND, (m_x<<Engine.FP_SHIFT), (m_y<<Engine.FP_SHIFT), m_id);
      }
      
      m_timer = (short)TIME_EXPLODE;
      if( Level.s_state == Level.STATE_ACTIVE && m_type != TYPE_ITEM && (almostFull() || ((m_state & STATE_TOXIC) != 0) || ( ((m_state & STATE_BONUS) != 0) && !full()))) {
         Level.dropItem(this);
      }
   }

   // check adjacent spots to see which other Critters need to explode.
   public void explodeAll(int type, int delay, boolean verticals) {

      boolean wildcard_type = (m_type == TYPE_CREATURE && m_id == CREATURE_WILDCARD);

      if(mutable() && (m_id == type || wildcard_type)) sentence(delay);
      else return;

      // check left side, right side and top side for adjacent explosions.
      Critter c;

      c = Level.boardRetrieve(m_board_x - 1, m_board_y);
      if(c != null) c.explodeAll((wildcard_type ? c.m_id : m_id), delay + TIME_POP_DELAY, true); 
      c = Level.boardRetrieve(m_board_x + 1, m_board_y);
      if(c != null) c.explodeAll((wildcard_type ? c.m_id : m_id), delay + TIME_POP_DELAY, true); 
      c = Level.boardRetrieve(m_board_x, m_board_y - 1);
      if(c != null && Level.onScreen(c.m_board_x, c.m_board_y)) c.explodeAll((wildcard_type ? c.m_id : m_id), delay + TIME_POP_DELAY, true); 
      c = Level.boardRetrieve(m_board_x, m_board_y + 1);
      if(c != null) c.explodeAll((wildcard_type ? c.m_id : m_id), delay + TIME_POP_DELAY, true); 
      
      /*
      boolean wildcard_type     = (creature() && m_id == CREATURE_WILDCARD);
      boolean wildcard_vertical = (verticals || wildcard_type);
      
      if(mutable() && (m_size == type || wildcard_type)) sentence(delay);
      else return;
      
      // check left side, right side and top side for adjacent explosions.
      Critter c;
      
      c = Level.boardRetrieve(m_board_x - 1, m_board_y);
      if(c != null) c.explodeAll(wildcard_type ? c.m_size : type, delay + TIME_POP_DELAY, wildcard_vertical); 
      c = Level.boardRetrieve(m_board_x + 1, m_board_y);
      if(c != null) c.explodeAll(wildcard_type ? c.m_size : type, delay + TIME_POP_DELAY, wildcard_vertical); 
      c = Level.boardRetrieve(m_board_x, m_board_y - 1);
      if(c != null && (almostFull() || wildcard_vertical || c.almostFull()) && Level.onScreen(c.m_board_x, c.m_board_y)) c.explodeAll(wildcard_type ? c.m_size : type, delay + TIME_POP_DELAY, wildcard_vertical); 
      c = Level.boardRetrieve(m_board_x, m_board_y + 1);
      if(c != null && (almostFull() || wildcard_vertical || c.almostFull())) c.explodeAll(wildcard_type ? c.m_size : type, delay + TIME_POP_DELAY, wildcard_vertical); 
      */
   }
 
   // set the Critter's animation state to the default one while accomodating
   // for modifiers such as full and toxic.
   public void setIdleAnim() {
      
      if(m_type == TYPE_CREATURE) {
         if(almostFull()) setAnim(Anims.GREEN_FULL);
         else setAnim(Anims.GREEN_IDLE);
      }
      else if(m_type == TYPE_ITEM) {
         setAnim(Anims.MELON_IDLE);
      }
   }
   
   // map the Critter type based on its id.
   public void mapSize() {
      
      if(m_type == TYPE_CREATURE) {
         
         /*
         if(m_id == CREATURE_GREEN) {
            m_size = SIZE_SMALL_1;
         }
         else if(m_id == CREATURE_RED ||
            m_id == CREATURE_TOXIC) {
            m_size = SIZE_MEDIUM_1;
         }
         else if(m_id == CREATURE_ORANGE) {
            m_size = SIZE_MEDIUM_2;
         }
         else if(m_id == CREATURE_BLUE || 
            m_id == CREATURE_TNT) {
            m_size = SIZE_BIG_1;
         }
         else if(m_id == CREATURE_PURPLE) {
            m_size = SIZE_BIG_2;
         }
         else if(m_id == CREATURE_BLOCKER ||
            m_id == CREATURE_WILDCARD) {
            m_size = SIZE_INEDIBLE;
         }
         */

         if     (m_id == CREATURE_GREEN)  m_size = SIZE_SMALL;
         else if(m_id == CREATURE_RED)    m_size = SIZE_MEDIUM;
         else if(m_id == CREATURE_ORANGE) m_size = SIZE_MEDIUM;
         else if(m_id == CREATURE_BLUE)   m_size = SIZE_BIG;
         else if(m_id == CREATURE_PURPLE) m_size = SIZE_BIG;
         else                             m_size = SIZE_INEDIBLE;
      }
      else {
         if(m_id == ITEM_PEPPER) m_size = SIZE_ALL;
         else                    m_size = SIZE_INEDIBLE;
      }
   }
   
   // register this Critter as being picked up.
   public void pickup() { pickup(0); }
   
   // register this Critter as having entered Biggs' mouth.
   public void pickup(int snap) {
      
      m_y += snap;
      m_state &= ~STATE_TONGUED;

      if(m_type == TYPE_ITEM) {
         //Level.s_combo = 0;
         Level.s_player.m_state |= Avatar.STATE_EATING;
         //#if DefaultConfiguration || Nokia_6600 || Nokia_6600_Unobfuscated || Nokia_3220 || Nokia_3220_Unobfuscated || Razr
         Level.s_player.setAnim(Anims.BIGGS_CHEWING_LEFT);
         //#endif
         Level.s_player.m_timer = (short)Avatar.TIME_CHEW;
         
         int score = 0;
         
         if(m_id == ITEM_GEM_TOXIC) {
            if(Level.s_type == Level.TYPE_ADVENTURE || Level.s_type == Level.TYPE_TUTORIAL) Level.s_level_bar += Level.TOXIC_HUNGER;
            score = Level.TOXIC_POINTS;
            Level.s_current_score -= score;
            Particles.create(Particles.TYPE_LOSE_POINTS_TEXT, Particles.LAYER_HUD, (m_x<<Engine.FP_SHIFT), (Level.s_player.m_y - Level.GAME_SQUARE_H)<<Engine.FP_SHIFT, -(score));
         }
         //#if DefaultConfiguration || Nokia_6600 || Nokia_6600_Unobfuscated || Nokia_3220 || Nokia_3220_Unobfuscated || Razr
         else if((m_id >= ITEM_GEM_1 && m_id <= ITEM_GEM_9) || m_id == ITEM_COIN) {
         //#else
//#          else if((m_id >= ITEM_GEM_1 && m_id <= ITEM_GEM_3) || m_id == ITEM_COIN) {   
         //#endif
            if(m_consumed != 0) {
               //Engine.printLine("consuming combo " + m_consumed);
               if(Level.s_type == Level.TYPE_ADVENTURE || Level.s_type == Level.TYPE_TUTORIAL) Level.s_level_bar -= m_consumed;
               //#if DefaultConfiguration || Nokia_6600 || Nokia_6600_Unobfuscated || Nokia_3220 || Nokia_3220_Unobfuscated || Razr
               score = m_consumed * m_consumed * (Level.BASE_POINTS + Level.s_number + (Level.s_coin_timer > 0 || m_id == ITEM_COIN ? Level.COIN_POINTS : Level.COMBO_POINTS));
               if(m_id == ITEM_COIN) {
                  Level.s_coin_timer = TIME_COIN_DURATION;
               }
               //#else
//#                score = m_consumed * m_consumed * (Level.BASE_POINTS + Level.s_number + (Level.s_coin_timer > 0 || m_id == ITEM_COIN ? Level.COIN_POINTS : Level.COMBO_POINTS));
//#                if(m_id == ITEM_COIN) {
//#                   Level.s_coin_timer = TIME_COIN_DURATION;
//#                }
               //#endif
               Level.s_current_score += score;
               Particles.create(Particles.TYPE_POINTS_TEXT, Particles.LAYER_HUD, (m_x<<Engine.FP_SHIFT), (Level.s_player.m_y - 30 - m_consumed*2)<<Engine.FP_SHIFT, score);
               
               if (m_id == ITEM_COIN)
                  Particles.create(Particles.TYPE_COIN_TEXT, Particles.LAYER_HUD, Engine.SCREEN_HALF_WIDTH<<Engine.FP_SHIFT, Engine.SCREEN_HALF_HEIGHT<<Engine.FP_SHIFT);
            }
            
            Level.s_total_jewels_caught++;
            Particles.create(Particles.TYPE_GEM_COLLECT, Particles.LAYER_FOREGROUND, (m_x<<Engine.FP_SHIFT), (m_y<<Engine.FP_SHIFT));
         }
         else {
            if(m_id == ITEM_WATERMELON) {
               if(Level.s_player.m_powerup_id == ITEM_SEED) {
                  Level.s_player.m_powerup_ammo += AMMO_MELON;

⌨️ 快捷键说明

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