📄 boxman.c
字号:
_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 + -