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

📄 bmshow.c

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

#define _BMSHOW_C_

#pragma NOAREGS

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

#ifdef  OSD_GAME_SOKOBAN
///////////////////////////////////////////////////////////////////////////////

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

///////////////////////////////////////////////////////////////////////////////

static code BYTE _bBMBmpId[] =
{
  BMP_NLWALL,
  BMP_WALL,
  BMP_SPACE,
  BMP_POINT,
  BMP_BOX,
  BMP_APBOX,
  BMP_THINKMAN,
  BMP_THINKMAN,
  BMP_SPACE
};

void vDrawMap(BYTE bBmpId, BYTE bBmpX, BYTE bBmpY) large
{
  bBmpId = _bBMBmpId[bBmpId];
  _wStartX = GetBMPos(bBmpX) + BOXMAN_MAP_START_X;
  _wStartY = GetBMPos(bBmpY) + BOXMAN_MAP_START_Y;
  vPasteBmp(WB_OSD_GAME, bBmpId);
}


void vDrawBox(BYTE bBoxId) large
{
  BYTE bBmpId;

  if(pMap[_bGameGrade]->bMapData[bSharedInfo(SI_BOX_Y(bBoxId))][bSharedInfo(SI_BOX_X(bBoxId))] == DEST)
  {
    _bfgApBox = SetBoxfg(bBoxId);
    bBmpId = BMP_APBOX;
  }
  else
  {
    _bfgApBox = ClrBoxfg(bBoxId);
    bBmpId = BMP_BOX;
  }

  _wStartX = GetBMPos(bSharedInfo(SI_BOX_X(bBoxId))) + BOXMAN_MAP_START_X;
  _wStartY = GetBMPos(bSharedInfo(SI_BOX_Y(bBoxId))) + BOXMAN_MAP_START_Y;

  vPasteBmp(WB_OSD_GAME, bBmpId);
}


static code BYTE _bManBmpId[] =
{
  BMP_THINKMAN,
  BMP_RIGHTMAN,
  BMP_UPMAN,
  BMP_LEFTMAN,
  BMP_DOWNMAN,
  BMP_THINKMAN
};

void vDrawMan(BYTE bManPosX, BYTE bManPosY) large
{
  _wStartX = GetBMPos(bManPosX) + BOXMAN_MAP_START_X;
  _wStartY = GetBMPos(bManPosY) + BOXMAN_MAP_START_Y;
  vPasteBmp(WB_OSD_GAME, _bManBmpId[_bOren]);
}


void vBoxManShowMap(void) large
{
  BYTE i;
  BYTE j;

  // Clear the Work Area first.
  vClrGameWorkArea();

  // MapData
  for (i = 0; i < pMap[_bGameGrade]->bBmpWidth; i++)
  {
    for (j = 0; j < pMap[_bGameGrade]->bBmpHeight; j++)
    {
      vDrawMap(pMap[_bGameGrade]->bMapData[j][i], i, j);
    }
  }

  // Box
  for(i = 0; i < pMap[_bGameGrade]->bBoxNo; i++)
  {
    vDrawBox(i);
  }

  // Man
  vDrawMap(MAN, pMap[_bGameGrade]->rManPos.x, pMap[_bGameGrade]->rManPos.y);
}


code WORD _wBmInfoItemMsg[] =
{
  OSD_MSG_NULL,
  OSD_MSG_GRADE,
  OSD_MSG_PUSH_STEP,
  OSD_MSG_REBACK_STEP,
  OSD_MSG_REBACKED_STEP,
  OSD_MSG_ANSWER,
  OSD_MSG_START,
  OSD_MSG_PLAYING
};

void vBoxManShowInfo(BYTE bInfo) large
{
  BYTE i;
  BYTE bItem;
  BYTE bShowStr[5];

  for (i = 0; i < BM_INFO_NS; i++)
  {
    bItem = 0x01 << i;
    if (bInfo & bItem)
    {
      switch (bItem)
      {
        case BM_INFO_PANE:
        {
          vDrawGameInfoPane();
          break;
        }
        case BM_INFO_GRADE:
        case BM_INFO_PUSH_STEP:
        case BM_INFO_REBACK_STEP:
        case BM_INFO_REBACKED_STEP:
        case BM_INFO_ANSWER:
        {
          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 = BM_INFO_BUTTON_START_X1;
          _wEndX   = BM_INFO_BUTTON_END_X1;
          _wEndY   = (BM_INFO_BUTTON_SPACE + BM_INFO_BUTTON_HEIGHT1) * i;
          _wStartY = _wEndY - BM_INFO_BUTTON_HEIGHT1;
          vCreateMsgButton(WB_OSD_GAME, i, 4, _wBmInfoItemMsg[i], 8, 4);
          vUnselButton(WB_OSD_GAME, i);
          if(BM_INFO_GRADE == bItem)
          {
            vHex2Sring((WORD)(_bGameGrade + 1), bShowStr);
            _wStartX = BM_INFO_VALUE_START_X;
            _wStartY += 4;
            vOsdShowStr(WB_OSD_GAME, bShowStr);
          }
          else if(BM_INFO_PUSH_STEP == bItem)
          {
            vHex2Sring((WORD)_bPushBoxNo, bShowStr);
            _wStartX = BM_INFO_VALUE_START_X;
            _wStartY += 4;
            vOsdShowStr(WB_OSD_GAME, bShowStr);
          }
          else if(BM_INFO_REBACK_STEP == bItem)
          {
            vHex2Sring((WORD)_bNowRebackedNo, bShowStr);
            _wStartX = BM_INFO_VALUE_START_X;
            _wStartY += 4;
            vOsdShowStr(WB_OSD_GAME, bShowStr);
          }
          else if((WORD)BM_INFO_REBACKED_STEP == bItem)
          {
            vHex2Sring(_bNowRebackNo, bShowStr);
            _wStartX = BM_INFO_VALUE_START_X;
            _wStartY += 4;
            vOsdShowStr(WB_OSD_GAME, bShowStr);
          }
          break;
        }
        case BM_INFO_START:
        case BM_INFO_PLAYING:
        {
          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(BM_INFO_BUTTON_START_X2, BM_INFO_BUTTON_START_Y2,
                         BM_INFO_BUTTON_END_X2, BM_INFO_BUTTON_END_Y2);
          vCreateMsgButton(WB_OSD_GAME, 6, 4, _wBmInfoItemMsg[i], 0xFFFF, 4);
          vUnselButton(WB_OSD_GAME, 6);
          break;
        }
        default:
        {
          break;
        }
      }
    }
  }
}

static code BYTE _bBmMenuItemBn[] =
{
  6,  // BM_MENU_START
  5,  // BM_MENU_ANSWER
  1,  // BM_MENU_GRADE
};


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

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

  vHiliGameButton(_bBmMenuItemBn[bItem], bState);

  if(BM_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 = BM_INFO_VALUE_START_X;
    _wStartY = BM_INFO_BUTTON_SPACE + 4;
    vHex2Sring((WORD)(_bGameGrade + 1), bShowStr);
    vOsdShowStr(WB_OSD_GAME, bShowStr);
  }
}


void vBoxManShowDialog(void) large
{
  switch (_bGameSubState)
  {
    case BM_DIALOG_TRY_STATE:
    {
      vShowGameDialog(OSD_MSG_GAME_TRY, TRUE);
      break;
    }
    case BM_DIALOG_NEXT_STATE:
    {
      vShowGameDialog(OSD_MSG_GAME_NEXT_GRADE, TRUE);
      break;
    }
    default:
    {
      break;
    }
  }
}


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


void vShowBmBadPosiWarn(void) large
{
  vSetStartEndXY(BM_BAD_POSI_START_X, BM_BAD_POSI_START_Y, BM_BAD_POSI_END_X, BM_BAD_POSI_END_Y);
  vRectangle(WB_OSD_GAME, 0, 0, TRUE, GAME_COL_DARK_CYAN);

  vSetMsgCol4(WB_OSD_GAME, GAME_COL_DARK_CYAN, GAME_COL_DARK_CYAN, GAME_COL_BLACK, GAME_COL_WHITE);
  // I don't know why can not use vOsdMsgShow() function--It will cause the system hang up!!
  _wStartX = BM_BAD_POSI_START_X + 8;
  _wStartY = BM_BAD_POSI_START_Y;
  vOsdMsgPaste(WB_OSD_GAME, OSD_MSG_BAD_POSI_WARN1);
  _wStartX = BM_BAD_POSI_START_X + 8;
  _wStartY = BM_BAD_POSI_START_Y + 30;
  vOsdMsgPaste(WB_OSD_GAME, OSD_MSG_BAD_POSI_WARN2);
}


void vClrBmBadPosiWarn(void) large
{
  vSetStartEndXY(BM_BAD_POSI_START_X, BM_BAD_POSI_START_Y, BM_BAD_POSI_END_X, BM_BAD_POSI_END_Y)
  vRectangle(WB_OSD_GAME, 0, 0, TRUE, GAME_COL_BG);
}

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

⌨️ 快捷键说明

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