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

📄 ballshow.c

📁 手机8032的完整代码。吐血推荐。小做改动就可以生产。
💻 C
字号:

#define _BALLSHOW_C_

#pragma NOAREGS

#include "general.h"
#include "osdshow.h"

#ifdef  OSD_GAME_BREAKOUT
///////////////////////////////////////////////////////////////////////////////

extern void DRS232LogS(char *pcStr);
extern void DRS232LogB(BYTE bV1, BYTE bV2, BYTE bV3, BYTE bV4);

///////////////////////////////////////////////////////////////////////////////
static code BYTE bBallBmpId[] =
{
  BMP_BALLBAR,
  BMP_EMPTYBALLBAR,
  BMP_BALL,
  BMP_EMPTYBALL,
  BMP_BLUEBLOCK,
  BMP_BROWNBLOCK,
  BMP_REDBLOCK,
  BMP_GREENBLOCK,
  BMP_YELLOWBLOCK,
  BMP_ROSEBLOCK,
  BMP_EMPTYBLOCK
};

void vGameBallDrawBmp(BYTE bBmpId, WORD wx, WORD wy) large
{
  bBmpId = bBallBmpId[bBmpId];
  _wStartX = wx;
  _wStartY = wy;
  while (bSharedInfo(SI_OSD_CMD_BUF_FULL)); 
  vPasteBmp(WB_OSD_GAME, bBmpId);
}


void vDrawBlockMap(void) large
{
  BYTE i, j;
  BYTE temp;

  for (i = 0; i < rBlockMap[_bGameGrade].HeightNum; i++)
  {
    for (j = 0; j < BLOCK_MAP_MAX_WIDTH; j++)
    {
      switch(rBlockMap[_bGameGrade].BlockMapData[i][j].bType)
      {
        case  GM_BALL_DEST:
          vSetBlockfg(j, i);
          break;
        case  GM_BALL_EMPTY:
          vClrBlockfg(j, i);
          break;
        default:
          break;
      }
      vGameBallDrawBmp(rBlockMap[_bGameGrade].BlockMapData[i][j].bBmpId, GetBlockXpos(j), GetBlockYpos(i));
    }
  }
}


void vClearBlock(BYTE x, BYTE y) large
{
  vClrBlockfg(x, y);
  vGameBallDrawBmp(EMPTY_BLOCK, GetBlockXpos(x), GetBlockYpos(y)); //EMPTY_BLOCK
}


static code WORD _wBallInfoItemMsg[] =
{
  OSD_MSG_NULL,
  OSD_MSG_GRADE,
  OSD_MSG_SCORE,
  OSD_MSG_GAME_TIME,
  OSD_MSG_START,
  OSD_MSG_PLAYING,
  OSD_MSG_PAUSE
};

void vBallShowInfo(BYTE bInfo) large
{
  BYTE i;
  BYTE bItem;
  BYTE bShowStr[6];

  for (i = 0; i < BALL_INFO_NS; i++)
  {
    bItem = 0x01 << i;
    if (bInfo & bItem)
    {
      switch (bItem)
      {
        case BALL_INFO_PANE:
        {
          vDrawGameInfoPane();
          break;
        }
        case BALL_INFO_GRADE:
        case BALL_INFO_SCORE:
        case BALL_INFO_TIME:
        {
          vSetBtnCol(WB_OSD_GAME, GAME_COL_DARK_GRAY, GAME_COL_DARK_CYAN, GAME_COL_BLACK, GAME_COL_WHITE);
          vSetMsgCol4(WB_OSD_GAME, GAME_COL_DARK_CYAN, GAME_COL_DARK_CYAN, GAME_COL_BLACK, GAME_COL_WHITE);
          _wStartX = BALL_INFO_BUTTON_START_X1;
          _wEndX   = BALL_INFO_BUTTON_END_X1;
          _wEndY   = (BALL_INFO_BUTTON_SPACE + BALL_INFO_BUTTON_HEIGHT1) * i;
          _wStartY = _wEndY - BALL_INFO_BUTTON_HEIGHT1;
          if (!_fgGmBallButton)
          {
            vCreateMsgButton(WB_OSD_GAME, i, 4, _wBallInfoItemMsg[i], 8, 4);
            vUnselButton(WB_OSD_GAME, i);
          }
          if(BALL_INFO_GRADE == bItem)
          {
            vHex2Sring((WORD)(_bGameGrade + 1), bShowStr);
            _wStartX = BALL_INFO_VALUE_START_X;
            _wStartY += 4;
            vOsdShowStr(WB_OSD_GAME, bShowStr);
          }
          else if(BALL_INFO_SCORE == bItem)
          {
            vHex2Sring(_wBallScore, bShowStr);
            _wStartX = BALL_INFO_VALUE_START_X;
            _wStartY += 4;
            vOsdShowStr(WB_OSD_GAME, bShowStr);
          }
          else if(BALL_INFO_TIME == bItem)
          {
            bShowStr[0] = 5;
            bShowStr[1] = (_bBallMinute / 10) % 10 + '0';
            bShowStr[2] = _bBallMinute % 10 + '0';
            bShowStr[3] = ':',
            bShowStr[4] = (_bBallSecond / 10) % 10 + '0';
            bShowStr[5] = _bBallSecond % 10 + '0';
            _wStartX = BALL_INFO_TIME_START_X;
            _wStartY += 4;
            vOsdShowStr(WB_OSD_GAME, bShowStr);
          }
          break;
        }
        case BALL_INFO_START:
        case BALL_INFO_PLAYING:
        case BALL_INFO_PAUSE:
        {
          vSetBtnCol(WB_OSD_GAME, GAME_COL_DARK_GRAY, GAME_COL_DARK_CYAN, GAME_COL_BLACK, GAME_COL_WHITE);
          vSetMsgCol4(WB_OSD_GAME, GAME_COL_DARK_CYAN, GAME_COL_DARK_CYAN, GAME_COL_BLACK, GAME_COL_WHITE);
          vSetStartEndXY(BALL_INFO_BUTTON_START_X2, BALL_INFO_BUTTON_START_Y2,
                         BALL_INFO_BUTTON_END_X2, BALL_INFO_BUTTON_END_Y2);
          vCreateMsgButton(WB_OSD_GAME, 6, 4, _wBallInfoItemMsg[i], 0xFFFF, 4);
          vUnselButton(WB_OSD_GAME, 6);
          break;
        }
        default:
        {
          break;
        }
      }
    }
  }
  _fgGmBallButton = FALSE;
}


static code BYTE _bBallMenuItemBn[] =
{
  6, // BALL_MENU_START
  1  // BALL_MENU_GRADE
};

void vHiliBallMenuItem(BYTE bItem, BYTE bState) large
{
  BYTE bShowStr[5];

  if(BALL_MENU_GRADE == bItem)
  {
    if (ITEM_HILI == bState)
    {
      bState = ITEM_SELECT;
    }
  }

  vHiliGameButton(_bBallMenuItemBn[bItem], bState);

  if(BALL_MENU_GRADE == bItem)
  {
    if (ITEM_SELECT == bState)
    {
      vSetMsgCol4(WB_OSD_GAME, GAME_COL_DARK_GRAY, GAME_COL_DARK_GRAY, GAME_COL_BLACK, GAME_COL_WHITE);
    }
    else
    {
      vSetMsgCol4(WB_OSD_GAME, GAME_COL_DARK_CYAN, GAME_COL_DARK_CYAN, GAME_COL_BLACK, GAME_COL_WHITE);
    }
    _wStartX = BALL_INFO_VALUE_START_X;
    _wStartY = BALL_INFO_BUTTON_SPACE + 4;
    vHex2Sring((WORD)(_bGameGrade + 1), bShowStr);
    vOsdShowStr(WB_OSD_GAME, bShowStr);
  }
}


void vBallShowDialog(void) large
{
  switch (_bGameSubState)
  {
    case BALL_DIALOG_AGAIN_STATE:
    {
      vShowGameDialog(OSD_MSG_GAME_AGAIN, TRUE);
      break;
    }
    case BALL_DIALOG_NEXT_STATE:
    {
      vShowGameDialog(OSD_MSG_GAME_NEXT_GRADE, TRUE);
      break;
    }
    default:
    {
      break;
    }
  }
}


void vHiliBallDialogItem(BYTE bItem, BYTE bStste) large
{
  vHiliGameButton(GAME_DIALOG_YES + bItem, bStste);
}

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

⌨️ 快捷键说明

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