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

📄 game.c

📁 手机8032的完整代码。吐血推荐。小做改动就可以生产。
💻 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 + -