📄 game.c
字号:
#define _GAME_C_
#pragma NOAREGS
#include "general.h"
#include "osdshow.h"
#ifdef OSD_GAME_MAIN_MENU
///////////////////////////////////////////////////////////////////////////////
// #define _GAME_DEBUG_
// #define _GAME_ASSERT_
// #define _GAME_TEST_
extern void DRS232LogS(char *pcStr);
extern void DRS232LogB(BYTE bV1, BYTE bV2, BYTE bV3, BYTE bV4);
#ifdef _GAME_DEBUG_
#define GAME_DBGLogB(b1, b2, b3, b4) DRS232LogB(b1, b2, b3, b4)
#define GAME_DBGLogW(wTemp) DRS232LogB(0, 0, bHiByte(wTemp), bLoByte(wTemp))
#define GAME_DBGLogDW(dwTemp) DRS232LogB(bHiByte(wHiWord(dwTemp)), bLoByte(wHiWord(dwTemp)), bHiByte(wLoWord(dwTemp)), bLoByte(wLoWord(dwTemp)))
#define GAME_DBGLogS(s) DRS232LogS(s)
#else
#define GAME_DBGLogB(b1, b2, b3, b4)
#define GAME_DBGLogW(wTemp)
#define GAME_DBGLogDW(dwTemp)
#define GAME_DBGLogS(s)
#endif
#ifdef _GAME_ASSERT_
#define GAME_ASSERT(fgAssert) \
do \
{ \
if(!(fgAssert)) \
{ \
DRS232LogS("\nAssert Error!"); \
DRS232LogS(_FILE_); \
DRS232LogB((BYTE)(_LINE_ >> 24), (BYTE)(_LINE_ >> 16), (BYTE)(_LINE_ >> 8), (BYTE)(_LINE_ >> 0)); \
} \
}while(0)
#else
#define GAME_ASSERT(fgAssert)
#endif
///////////////////////////////////////////////////////////////////////////////
static void vGameMenuVarInit(void) large
{
_bGameState = 0;
_bGameSubState = 0;
_bGameItem = 0;
_bGameGrade = 0;
#ifdef OSD_GAME_SOUND
_bGameSndTimer = 0;
_bGameSndId = 0;
#endif
}
static void vGameMenuOsdInit(void) large
{
if(bSharedInfo(SI_TV_SYSTEM) == SV_PAL)
{
vPlayerShowLogo(OSD_GAME_LOGO, GAME_LOGO_PAL_COLOR);
}
else
{
vPlayerShowLogo(OSD_GAME_LOGO, GAME_LOGO_NTSC_COLOR);
}
vOsdSetSt(OSD_ST_BURST);
vOsdShowWb(OSD_WB_DISABLE);
vOsdSetMemBlk(OSD_MEM_BLK_DYNAMIC, OSD_MEM_JPEG_SLIDESHOW);
vCreateWB(WB_OSD_GAME, TRUE);
vSetWBTcColor(WB_OSD_GAME);
vSetTransEn(WB_OSD_GAME, 0);
vEnableWB(WB_OSD_GAME);
vShowGameMainMenu();
vHiliGameMenuItem(_bGameItem, ITEM_HILI);
}
static void vEnterSQGame(void)large
{
#ifdef OSD_GAME_TETRIS
vChangeInputState(INPUT_STATE_OSD_GAME_TETRIS, FALSE);
#endif
}
static void vEnterBMGame(void)large
{
#ifdef OSD_GAME_SOKOBAN
vChangeInputState(INPUT_STATE_OSD_GAME_SOKOBAN, FALSE);
#endif
}
static void vEnterBallGame(void)large
{
#ifdef OSD_GAME_BREAKOUT
vChangeInputState(INPUT_STATE_OSD_GAME_BREAKOUT, FALSE);
#endif
}
///////////////////////////////////////////////////////////////////////////////
BOOL fgIsOsdGamePlay(void) large
{
switch (_bInputState)
{
#ifdef SUPPORT_OSD_GAME
#ifdef OSD_GAME_MAIN_MENU
case INPUT_STATE_OSD_GAME_MAIN_MENU:
#endif
#ifdef OSD_GAME_SOKOBAN
case INPUT_STATE_OSD_GAME_SOKOBAN:
#endif
#ifdef OSD_GAME_TETRIS
case INPUT_STATE_OSD_GAME_TETRIS:
#endif
#ifdef OSD_GAME_BREAKOUT
case INPUT_STATE_OSD_GAME_BREAKOUT:
#endif
{
return TRUE;
}
#endif
default:
{
return FALSE;
}
}
}
void vChgGameState(BYTE bState) large
{
_bGameState = bState;
_bGameSubState = 0;
_bGameItem = 0;
}
void vChgGameSubState(BYTE bSubState) large
{
_bGameSubState = bSubState;
_bGameItem = 0;
}
void vGameClose(void) large
{
vPlayerShowLogo(DEFAULT_MAIN_LOGO, DEFAULT_LOGO_COLOR);
vDeleteWB(WB_OSD_GAME);
vOsdShowWb(OSD_WB_RESTORE);
vSetExitInputState();
}
#ifdef OSD_GAME_SOUND
void vGameDelayMs(BYTE bMsNs) large
{
BYTE i, j;
for (i = 0; i < bMsNs; i++)
{
for (j = 0; j < 250; j++)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
#endif
///////////////////////////////////////////////////////////////////////////////
void vOsdGameTimer(void) large
{
if (fgIsOsdGamePlay())
{
#ifdef OSD_GAME_SOUND
if (_bGameSndTimer != 0)
{
_bGameSndTimer--;
}
#endif
}
}
///////////////////////////////////////////////////////////////////////////////
void vGameMenuEnter(void) large
{
vGameMenuVarInit();
vGameMenuOsdInit();
}
BOOL fgGameMenuState(void) large
{
BOOL fgRet = TRUE;
switch (_bIRKey)
{
case IR_GAME:
{
vGameClose();
break;
}
case IR_UP:
{
if(_bGameItem > 0)
{
vHiliGameMenuItem(_bGameItem, FALSE);
_bGameItem--;
vHiliGameMenuItem(_bGameItem, ITEM_HILI);
}
break;
}
case IR_DOWN:
{
if(_bGameItem < GAME_MENU_ITEM_MAX)
{
vHiliGameMenuItem(_bGameItem, FALSE);
_bGameItem++;
vHiliGameMenuItem(_bGameItem, ITEM_HILI);
}
break;
}
case IR_PLAY:
case IR_ENTER:
case IR_PLAY_ENTER:
{
switch (_bGameItem)
{
case GAME_MENU_BREAKOUT:
{
vEnterBallGame();
break;
}
case GAME_MENU_SOKOBAN:
{
vEnterBMGame();
break;
}
case GAME_MENU_TETRIS:
{
vEnterSQGame();
break;
}
case GAME_MENU_EXIT:
{
vGameClose();
break;
}
default:
{
break;
}
}
}
default:
{
break;
}
}
_bIRKey = IR_NONE;
return fgRet;
}
void vGameMenuExit(void) large
{
vDeleteWB(WB_OSD_GAME);
vOsdSetSt(OSD_ST_NML);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -