📄 ball.c
字号:
#if 0 // #ifdef OSD_GAME_SOUND
vGameDelayMs(10);
vSendUopCmd(UOP_AUDIO_CLIP, SV_ACLIP_FLASH, CLIP_HITWALL, 0);
_bGameSndId = 0xFF;
_bGameSndTimer = 15;
#endif
}
else if (GetBlockYcoor(_NowBallPos.y) < rBlockMap[_bGameGrade].HeightNum)
{
if ( fgBetweenBlockY(_NowBallPos.y)
&& ( fgGetBlockfgPosi(_NowBallPos.x, _NowBallPos.y)
|| fgGetBlockfgPosi(_NowBallPos.x + rBmpSize[GetBmpSizeId(BALL)].width, _NowBallPos.y)) )
{
vShotBlockUp();
_bOreny = BALL_DOWN;
#if 0 // #ifdef OSD_GAME_SOUND
vGameDelayMs(10);
vSendUopCmd(UOP_AUDIO_CLIP, SV_ACLIP_FLASH, CLIP_HITBRICK, 0);
_bGameSndId = 0xFF;
_bGameSndTimer = 15;
#endif
}
}
}
static void vJudgebally(void) large
{
switch(_bOreny)
{
case BALL_DOWN:
vfgJudgeDown();
break;
case BALL_UP:
vfgJudgeUp();
break;
}
}
static void vBallMachine(void) large
{
vGameBallDrawBmp(BALL_EMPTY_BMP, _NowBallPos.x, _NowBallPos.y); // clear the ball
// judge the blocks are all shot
vJudgeballx(); // change the ball x postion an x orentation
vJudgebally(); // change the ball y postion an y orentation
// vShotBlockx(); // the ball is drawn first then clear the ball
// vShotBlocky(); // the clear will break the bar
if (fgJudgeShotAll())
{
// ShowMessage("congratulations!");
_fgGmBallEnb = FALSE;
vChgGameState(BALL_DIALOG_STATE);
vChgGameSubState(BALL_DIALOG_NEXT_STATE);
vBallShowDialog();
#ifdef OSD_GAME_SOUND
vGameDelayMs(10);
vSendUopCmd(UOP_AUDIO_CLIP, SV_ACLIP_FLASH, CLIP_WIN, 0);
_bGameSndId = 0xFF;
_bGameSndTimer = 75;
#endif
}
else if(_fgGmBallEnb)
{
vGameBallDrawBmp(BALL_BMP, _NowBallPos.x, _NowBallPos.y); // draw the ball
}
}
static BOOL fgBallMenuState(void) large
{
BOOL fgRet = TRUE;
switch (_bIRKey)
{
case IR_UP:
{
if (_bGameItem < BALL_MENU_MAX)
{
vHiliBallMenuItem(_bGameItem, FALSE);
_bGameItem++;
vHiliBallMenuItem(_bGameItem, ITEM_HILI);
}
break;
}
case IR_DOWN:
{
if (_bGameItem > 0)
{
vHiliBallMenuItem(_bGameItem, FALSE);
_bGameItem--;
vHiliBallMenuItem(_bGameItem, ITEM_HILI);
}
break;
}
case IR_LEFT:
case IR_PREV:
{
if ((BALL_MENU_GRADE == _bGameItem) && (_bGameGrade > 0))
{
_bGameGrade--;
vHiliBallMenuItem(_bGameItem, TRUE);
}
break;
}
case IR_RIGHT:
case IR_NEXT:
{
if ((BALL_MENU_GRADE == _bGameItem) && (_bGameGrade < GAME_BALL_GRADE_MAX))
{
_bGameGrade++;
vHiliBallMenuItem(_bGameItem, TRUE);
}
break;
}
case IR_PLAY:
case IR_ENTER:
case IR_PLAY_ENTER:
{
switch (_bGameItem)
{
case BALL_MENU_START:
{
vChgGameState(BALL_PLAY_STATE);
vBallShowInfo(BALL_INFO_ALL2);
vGameBallNewTurnInit();
vGameBallOsdRecover();
#ifdef OSD_GAME_SOUND
vGameDelayMs(10);
vSendUopCmd(UOP_AUDIO_CLIP, SV_ACLIP_FLASH, CLIP_START, 0);
_bGameSndId = 0xFF;
_bGameSndTimer = 75;
#endif
break;
}
case BALL_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 fgBallPlayState(void) large
{
BOOL fgRet = TRUE;
switch (_bIRKey)
{
case IR_LEFT:
{
if (_fgGmBallEnb)
{
vGameBallDrawBmp(BAR_EMPTY_BMP, _NowBarPos.x, _NowBarPos.y);
// _NowBarPos.x -= BAR_X_STEP;
_NowBarPos.x -= _sGmBallSpeed[_bBallSpeed].bBarXStep;
if (_NowBarPos.x > 0xf000)
{
_NowBarPos.x = 0;
}
vGameBallDrawBmp(BAR_BMP, _NowBarPos.x, _NowBarPos.y);
}
break;
}
case IR_RIGHT:
{
if (_fgGmBallEnb)
{
vGameBallDrawBmp(BAR_EMPTY_BMP, _NowBarPos.x, _NowBarPos.y);
// _NowBarPos.x += BAR_X_STEP;
_NowBarPos.x += _sGmBallSpeed[_bBallSpeed].bBarXStep;
if (_NowBarPos.x + rBmpSize[GetBmpSizeId(BAR)].width > GM_BALL_MAX_WIDTH)
{
_NowBarPos.x = GM_BALL_MAX_WIDTH - rBmpSize[GetBmpSizeId(BAR)].width;
}
vGameBallDrawBmp(BAR_BMP, _NowBarPos.x, _NowBarPos.y);
}
break;
}
case IR_PAUSE:
case IR_PLAY_PAUSE:
{
if(_fgGmBallEnb)
{
_fgGmBallEnb = FALSE;
vBallShowInfo(BALL_INFO_PAUSE);
}
else
{
_fgGmBallEnb = TRUE;
vBallShowInfo(BALL_INFO_PLAYING);
}
break;
}
case IR_PLAY:
case IR_ENTER:
case IR_PLAY_ENTER:
{
if(!_fgGmBallEnb)
{
_fgGmBallEnb = TRUE;
vBallShowInfo(BALL_INFO_PLAYING);
}
break;
}
case IR_TITLE_MENU:
{
_fgGmBallEnb = FALSE;
vChgGameState(BALL_MENU_STATE);
vGameBallNewTurnInit();
vClrGameWorkArea();
vBallShowInfo(BALL_INFO_ALL1);
vHiliBallMenuItem(_bGameItem, ITEM_HILI);
break;
}
case IR_ROOT_MENU:
{
#ifdef OSD_GAME_MAIN_MENU
vChangeInputState(INPUT_STATE_OSD_GAME_MAIN_MENU, FALSE);
#endif
break;
}
}
return fgRet;
}
static BOOL fgBallDialogState(void) large
{
BOOL fgRet = TRUE;
switch (_bIRKey)
{
case IR_LEFT:
{
if (_bGameItem > 0)
{
vHiliBallDialogItem(_bGameItem, FALSE);
_bGameItem--;
vHiliBallDialogItem(_bGameItem, TRUE);
}
break;
}
case IR_RIGHT:
{
if (_bGameItem < 1)
{
vHiliBallDialogItem(_bGameItem, FALSE);
_bGameItem++;
vHiliBallDialogItem(_bGameItem, TRUE);
}
break;
}
case IR_PLAY:
case IR_ENTER:
case IR_PLAY_ENTER:
{
if (0 == _bGameItem)
{
if(BALL_DIALOG_NEXT_STATE == _bGameSubState)
{
if (_bGameGrade < GAME_BALL_GRADE_MAX)
{
_bGameGrade++;
}
else
{
_bGameGrade = 0;
}
}
vChgGameState(BALL_PLAY_STATE);
vGameBallNewTurnInit();
vGameBallOsdRecover();
vBallShowInfo(BALL_INFO_ALL2);
}
else
{
vChgGameState(BALL_MENU_STATE);
vGameBallNewTurnInit();
vClrGameWorkArea();
vBallShowInfo(BALL_INFO_ALL1);
vHiliBallMenuItem(_bGameItem, ITEM_HILI);
}
}
default:
{
break;
}
}
return fgRet;
}
///////////////////////////////////////////////////////////////////////////////
void vSetBlockfg(BYTE i, BYTE j) large
{
BYTE bTemp;
#if 0
bTemp = bSharedInfo(SI_BALL_SHOT_FG_START + GetFgYcoor(i, j));
bTemp |= (1 << (i % 8));
vSetSharedInfo(SI_BALL_SHOT_FG_START + GetFgYcoor(i, j), bTemp);
#else
bTemp = bSharedInfo(SI_BALL_SHOT_FG_START + i);
bTemp |= (0x01 << (j % 8));
vSetSharedInfo(SI_BALL_SHOT_FG_START + i, bTemp);
#endif
}
void vClrBlockfg(BYTE i, BYTE j) large
{
BYTE bTemp;
#if 0
bTemp = bSharedInfo(SI_BALL_SHOT_FG_START + GetFgYcoor(i, j));
bTemp &= (~(1 << (i % 8)));
vSetSharedInfo(SI_BALL_SHOT_FG_START + GetFgYcoor(i, j), bTemp);
#else
bTemp = bSharedInfo(SI_BALL_SHOT_FG_START + i);
bTemp &= (~(0x01 << (j % 8)));
vSetSharedInfo(SI_BALL_SHOT_FG_START + i, bTemp);
#endif
}
BOOL fgGetBlockfg(BYTE i, BYTE j) large
{
BYTE bTemp;
if( (i < BLOCK_MAP_MAX_WIDTH) && (j < BLOCK_MAP_MAX_HEIGHT) )
{
bTemp = bSharedInfo(SI_BALL_SHOT_FG_START + i);
if (bTemp & (0x01 << (j % 8)))
{
return TRUE;
}
else
{
return FALSE;
}
}
else
{
return FALSE;
}
}
BOOL fgGetBlockfgPosi(WORD bx, WORD by) large
{
BYTE i, j;
i = GetBlockXcoor(bx);
j = GetBlockYcoor(by);
return fgGetBlockfg(i, j);
}
void vGMBallTimer(void) large
{
if ( (_bInputState == INPUT_STATE_OSD_GAME_BREAKOUT)
&& (_bGameState == BALL_PLAY_STATE)
#ifdef OSD_GAME_SOUND
&& (_bGameSndTimer == 0)
#endif
&& _fgGmBallEnb )
{
_bBall20Ms++;
if(_bBall20Ms >= 50)
{
_bBall20Ms = 0;
_bBallSecond++;
if(_bBallSecond >= 60)
{
_bBallSecond = 0;
_bBallMinute++;
}
_fgGmBallButton = TRUE;
vBallShowInfo(BALL_INFO_TIME);
}
// if (_bGmBallTimer < GM_BALL_TIMER_INT)
if (_bGmBallTimer < _sGmBallSpeed[_bBallSpeed].bTimerCount)
{
_bGmBallTimer++;
}
else
{
vBallMachine();
_bGmBallTimer = 0;
}
}
}
///////////////////////////////////////////////////////////////////////////////
void vGameBallInit(void) large
{
vGameBallVarInit();
vGameBallNewTurnInit();
vGameBallShowInit();
}
BOOL fgGmBallState(void) large
{
BOOL fgRet = TRUE;
switch (_bIRKey)
{
case IR_GAME:
{
vGameClose();
return TRUE;
}
default:
{
break;
}
}
switch (_bGameState)
{
case BALL_MENU_STATE:
{
fgRet = fgBallMenuState();
break;
}
case BALL_PLAY_STATE:
{
fgRet = fgBallPlayState();
break;
}
case BALL_DIALOG_STATE:
{
fgRet = fgBallDialogState();
break;
}
default:
{
break;
}
}
_bIRKey = IR_NONE;
return fgRet;
}
void vGmBallExit(void) large
{
vDeleteWB(WB_OSD_GAME);
vOsdSetSt(OSD_ST_NML);
}
///////////////////////////////////////////////////////////////////////////////
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -