📄 bmshow.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 + -