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

📄 boxman.c

📁 手机8032的完整代码。吐血推荐。小做改动就可以生产。
💻 C
📖 第 1 页 / 共 2 页
字号:
    _bNowRebackNo++;
    _bNowRebackedNo--;
    //refresh the reback step number
    //if user reback the stack address minus
    _bLastStepStack--;
    //refresh the reback step
    //Edit2->Text = IntToStr(rRememberStep.bLastStepStack);
    _fgLastStep = TRUE;
    vBoxManShowInfo(BM_INFO_PUSH_STEP | BM_INFO_REBACK_STEP | BM_INFO_REBACKED_STEP);
  }

  vChangDisplay();
}


static BOOL fgBoxManMenuState(void) large
{
  BOOL fgRet = TRUE;

  switch (_bIRKey)
  {
    case IR_UP:
    {
      if (_bGameItem < BM_MENU_MAX)
      {
        vHiliBoxManMenuItem(_bGameItem, FALSE);
        _bGameItem++;
        vHiliBoxManMenuItem(_bGameItem, ITEM_HILI);
      }
      break;
    }
    case IR_DOWN:
    {
      if (_bGameItem > 0)
      {
        vHiliBoxManMenuItem(_bGameItem, FALSE);
        _bGameItem--;
        vHiliBoxManMenuItem(_bGameItem, ITEM_HILI);
      }
      break;
    }
    case IR_LEFT:
    case IR_PREV:
    {
      if ((BM_MENU_GRADE == _bGameItem) && (_bGameGrade > 0))
      {
        _bGameGrade--;
        vBoxManNewTurnInit();
        vBoxManShowMap();
        vHiliBoxManMenuItem(_bGameItem, TRUE);
      }
      break;
    }
    case IR_RIGHT:
    case IR_NEXT:
    {
      if ((BM_MENU_GRADE == _bGameItem) && (_bGameGrade < BM_MAP_MAX))
      {
        _bGameGrade++;
        vBoxManNewTurnInit();
        vBoxManShowMap();
        vHiliBoxManMenuItem(_bGameItem, TRUE);
      }
      break;
    }
    case IR_PLAY:
    case IR_ENTER:
    case IR_PLAY_ENTER:
    {
      switch (_bGameItem)
      {
        case BM_MENU_START:
        {
          _fgAnswer = FALSE;
          vBoxManShowInfo(BM_INFO_ALL2);
          vChgGameState(BM_PLAY_STATE);
        #ifdef OSD_GAME_SOUND
          vGameDelayMs(10);
          vSendUopCmd(UOP_AUDIO_CLIP, SV_ACLIP_FLASH, CLIP_START, 0);
          _bGameSndId = 0xFF;
          _bGameSndTimer = 75;
        #endif
          break;
        }
        case BM_MENU_ANSWER:
        {
          _fgAnswer = TRUE;
          vBoxManShowInfo(BM_INFO_ALL2);
          vChgGameState(BM_PLAY_STATE);
          break;
        }
        case BM_MENU_GRADE:
        {
          break;
        }
        default:
        {
          break;
        }
      }
      break;
    }
    case IR_TITLE_MENU:
    case IR_ROOT_MENU:
    {
    #ifdef OSD_GAME_MAIN_MENU
      vChangeInputState(INPUT_STATE_OSD_GAME_MAIN_MENU, FALSE);
    #endif
      break;
    }
    default:
    {
      break;
    }
  }

  return fgRet;
}


static BOOL fgBOxManPlayState(void) large
{
  BOOL fgRet = TRUE;

  if(_fgAnswer)
  {
    return fgRet;
  }

  switch (_bIRKey)
  {
    case IR_UP:
    {
      vUpClick();
      break;
    }
    case IR_DOWN:
    {
      vDownClick();
      break;
    }
    case IR_LEFT:
    {
      vLeftClick();
      break;
    }
    case IR_RIGHT:
    {
      vRightClick();
      break;
    }
    case IR_RETURN:
    {
      vReback();
      break;
    }
    case IR_REPEAT:
    {
      vGameBoxManOsdRecover();
      break;
    }
    case IR_PREV:
    {
      if (0 == _bGameGrade)
      {
        _bGameGrade = BM_MAP_MAX;
      }
      else
      {
        _bGameGrade--;
      }
      vGameBoxManOsdRecover();
      break;
    }
    case IR_NEXT:
    {
      if (BM_MAP_MAX == _bGameGrade)
      {
        _bGameGrade = 0;
      }
      else
      {
        _bGameGrade++;
      }
      vGameBoxManOsdRecover();
      break;
    }
    case IR_TITLE_MENU:
    {
      vGameBoxManOsdRecover();
      vChgGameState(BM_MENU_STATE);
      vBoxManShowInfo(BM_INFO_ALL1);
      vHiliBoxManMenuItem(_bGameItem, ITEM_HILI);
      break;
    }
    case IR_ROOT_MENU:
    {
    #ifdef OSD_GAME_MAIN_MENU
      vChangeInputState(INPUT_STATE_OSD_GAME_MAIN_MENU, FALSE);
    #endif
      break;
    }
    default:
    {
      break;
    }
  }

  return fgRet;
}


static BOOL fgBoxManDialogState(void) large
{
  BOOL fgRet = TRUE;

  switch (_bIRKey)
  {
    case IR_LEFT:
    {
      if (_bGameItem > 0)
      {
        vHiliBoxManDialogItem(_bGameItem, FALSE);
        _bGameItem--;
        vHiliBoxManDialogItem(_bGameItem, TRUE);
      }
      break;
    }
    case IR_RIGHT:
    {
      if (_bGameItem < 1)
      {
        vHiliBoxManDialogItem(_bGameItem, FALSE);
        _bGameItem++;
        vHiliBoxManDialogItem(_bGameItem, TRUE);
      }
      break;
    }
    case IR_PLAY:
    case IR_ENTER:
    case IR_PLAY_ENTER:
    {
      if (0 == _bGameItem)
      {
        if(BM_DIALOG_NEXT_STATE == _bGameSubState)
        {
          if (_bGameGrade < BM_MAP_NS)
          {
            _bGameGrade++;
          }
          else
          {
            _bGameGrade = 0;
          }
        }
        vChgGameState(BM_PLAY_STATE);
        vBoxManNewTurnInit();
        vBoxManShowMap();
        vBoxManShowInfo(BM_INFO_ALL2);
      }
      else
      {
        vChgGameState(BM_MENU_STATE);
        vBoxManNewTurnInit();
        vBoxManShowMap();
        vBoxManShowInfo(BM_INFO_ALL1);
        vHiliBoxManMenuItem(_bGameItem, ITEM_HILI);
      }
    }
    default:
    {
      break;
    }
  }

  return fgRet;
}

static void vGameBMShowManTimer(void) large
{
  if (_bBMShowTimer != 0)
  {
    _bBMShowTimer--;
    if (_bBMShowTimer == 0)
    {
      _bOren = THINK;
      vDrawMan(bSharedInfo(SI_MAN_X), bSharedInfo(SI_MAN_Y));
      if(_fgBadPosiWarn)
      {
        _fgBadPosiWarn = FALSE;
        vClrBmBadPosiWarn();
      }
    }
  }
}


static void vGameBMShowAswTimer(void) large
{
  if (_bBMShowTimer != 0)
  {
    _bBMShowTimer--;
    if (_bBMShowTimer == 0)
    {
      //get the start postion of the answer table
      _bOren = bAnswerStep[wMapAswStAddr[_bGameGrade] + 1 + _wAswStep];
      vJudgeCanShift(_bOren);
      vChangDisplay();
      _wAswStep++;
    }
  }
  else
  {
    //reset timer
    _bBMShowTimer = ANSWER_SHOW_INT;
  }
}

///////////////////////////////////////////////////////////////////////////////

void vGameBoxManTimer(void) large
{
  if ( (_bInputState == INPUT_STATE_OSD_GAME_SOKOBAN) 
    && (_bGameState == BM_PLAY_STATE)
  #ifdef OSD_GAME_SOUND
    && (_bGameSndTimer == 0)
  #endif
    && (!_fgGameOver) )
  {
    if (_bBmGameTimer != 0)
    {
      _bBmGameTimer--;
      return;
    }
    
    if (_fgAnswer)
    {
      vGameBMShowAswTimer();
    }
    else
    {
      vGameBMShowManTimer();
    }
  }
}

///////////////////////////////////////////////////////////////////////////////

void vGameBoxManStateInit(void) large
{
  vBoxManVarInit();
  vBoxManNewTurnInit();
  vBoxManOsdInit();
}


BOOL fgGameBoxManState(void) large
{
  BOOL fgRet = TRUE;

#ifdef OSD_GAME_SOUND
  if (_bGameSndTimer != 0)
  {
    _bIRKey = IR_NONE;
    return fgRet;
  }
#endif

  switch (_bIRKey)
  {
    case IR_GAME:
    {
      vGameClose();
      return TRUE;
    }
    default:
    {
      break;
    }
  }

  switch (_bGameState)
  {
    case BM_MENU_STATE:
    {
      fgRet = fgBoxManMenuState();
      break;
    }
    case BM_PLAY_STATE:
    {
      fgRet = fgBOxManPlayState();
      break;
    }
    case BM_DIALOG_STATE:
    {
      fgRet = fgBoxManDialogState();
      break;
    }
    default:
    {
      break;
    }
  }

  _bIRKey = IR_NONE;
  return fgRet;
}


void vGameBoxManExit(void) large
{
  vDeleteWB(WB_OSD_GAME);
  vOsdSetSt(OSD_ST_NML);
}

///////////////////////////////////////////////////////////////////////////////
#endif

⌨️ 快捷键说明

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