📄 tankdesk.c
字号:
{
WsetObj->itty--;
if (WsetObj->itty < 0)
WsetObj->itty = 2;
WsetObj->itty = WsetObj->itty % 3;
}
if (WsetObj->itset == 2)
{
WsetObj->itle--;
if (WsetObj->itle < 0)
WsetObj->itle = 2;
WsetObj->itle = WsetObj->itle % 3;
}
if (WsetObj->itset == 3 && WsetObj->barr >= 0)
{
if (WsetObj->barr > 0)
WsetObj->barr--;
else if (WsetObj->barr == 0)
WsetObj->barr = 20;
}
}
break;
case KE_PLAY_PRESS:
{
WsetObj->ok = 1;
tSave->GameLevel = WsetObj->itle;
tSave->GameType = WsetObj->itty;
tSave->rank = WsetObj->rank;
tSave->barriesflag = WsetObj->barr;
}
break;
case KE_PLAY_RELEASE:
WindowDestroy(win);
break;
case KE_RETURN_PRESS:
WsetObj->ok = 2;
break;
case KE_RETURN_RELEASE:
WindowDestroy(win);
break;
default:
break;
}
WindowInvalidateWindow(win);
return TRUE;
}
/**************************************************************
Desc : 定义名为SetProcMap的基本类窗口消息映射表,
并生成一个基本类CW_TYPE_Set 供继承
Return:无
Global:无
Author:xiexiuxie
*****************************************************************/
BEGIN_CHILDMESSAGE_MAP(SetProcMap , CW_TYPE_Set)
ON_MESSAGE(WM_PAINT , SetWinPaintProc)
ON_MESSAGE(WM_KEY, SetWinKeyProc)
ON_MESSAGE(WM_CREATE, SetWinCreatProc)
ON_MESSAGE(WM_DESTROY , SetWinDestroyProc)
END_MESSAGE_MAP()
/***************************************************************/
/**************************************************************
Desc : 创建游戏设置 窗口
Param:win 窗口指针
Return:无
Global:无
Author:xiexiuxie
*****************************************************************/
UINT32 ENSET(WINDOW* win)
{
win = WindowCreate(win ,
WS_FULLSCREEN | WS_TICK,
WID_TankGameSet,
0, 0,
320, 240,
0, 0, 0, 0,
SetProcMap,
NULL);
return TRUE;
}
/**************************************************************
Desc : 显示帮助窗口
Param:win 窗口指针,wParam WM_PAINT 消息, lParam没用
Return:无
Global:无
Author:xiexiuxie
*****************************************************************/
UINT32 HelpWinPaintProc(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_HelpPic *WpicObj = (W_HelpPic*)win->Data;
if (!(WIN_NEEDPAIT(win)))
return TRUE;
DrawPic(0, 0, (INT16U)(WpicObj->IconBmp + WpicObj->page)); //显示帮助 图片
WIN_CLEARPAIT(win);
return TRUE;
}
/**************************************************************
Desc : 创建帮助窗口初始化
Param:win 窗口指针,wParam WM_CREAT消息 , lParam没用
Return:无
Global:无
Author:xiexiuxie
*****************************************************************/
UINT32 HelpWinCreatProc(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_HelpPic *WpicObj = NULL;
WpicObj = MallocClass(W_HelpPic);
if (WpicObj)
{
WpicObj->IconBmp = win->BmpID;
WpicObj->page = 0;
win->Data = WpicObj;
}
WindowInvalidateWindow(win);
return TRUE;
}
/**************************************************************
Desc : 删除帮助窗口
Param:win 窗口指针,wParam WM_DESTROY消息, lParam没用
Return:无
Global:无
Author:xiexiuxie
*****************************************************************/
UINT32 HelpWinDestroyProc(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_HelpPic *WpicObj = (W_HelpPic*)win->Data;
FreeClass(WpicObj);
//DspTskUpdateInit( DTSC_TRANSPS);
return WMPROC_UNHANDLE;
}
/**************************************************************
Desc : 帮助窗口的按键处理
Param:win 窗口指针,wParam WM_KEY 消息 、 lParam没用
Return:无
Global:无
Author:xiexiuxie
*****************************************************************/
UINT32 HelpWinKeyProc(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_HelpPic *WpicObj = (W_HelpPic *)win->Data;
UINT16 keyPress = (UINT16)((wParam) >> 16);
UINT16 KEY_EV = (UINT16)(wParam);
if (keyPress)
return FALSE;
switch (KEY_EV)
{
case KE_DN_RELEASE: //变换页数
case KE_PREV_RELEASE:
{
WpicObj->page++;
WpicObj->page = WpicObj->page % 3;
}
break;
case KE_NEXT_RELEASE:
case KE_UP_RELEASE:
{
WpicObj->page--;
if (WpicObj->page < 0)
WpicObj->page = 2;
else
WpicObj->page = WpicObj->page % 3;
}
break;
case KE_RETURN_RELEASE:
case KE_EXIT_RELEASE:
WindowDestroy(win);
default:
break;
}
WindowInvalidateWindow(win);
return TRUE;
}
/**************************************************************
Desc : 定义名为HelpProcMap的基本类窗口消息映射表,
并生成一个基本类CW_TYPE_help 供继承
Return:无
Global:无
Author:xiexiuxie
*****************************************************************/
BEGIN_CHILDMESSAGE_MAP(HelpProcMap , CW_TYPE_help)
ON_MESSAGE(WM_PAINT, HelpWinPaintProc)
ON_MESSAGE(WM_KEY, HelpWinKeyProc)
ON_MESSAGE(WM_CREATE, HelpWinCreatProc)
ON_MESSAGE(WM_DESTROY, HelpWinDestroyProc)
END_MESSAGE_MAP()
/********************************************************************/
/**************************************************************
Desc : 创建帮助窗口
Param:win 窗口指针
Return:无
Global:无
Author:xiexiuxie
*****************************************************************/
UINT32 ENHELP(WINDOW* win)
{
win = WindowCreate(win ,
WS_FULLSCREEN | WS_TICK,
WID_TankGameHelp,
0, 0, 320, 240, 0,
BID_tankhelp0,
0, 0,
HelpProcMap,
NULL);
return 0;
}
/**************************************************************
Desc : 显示分数窗口
Param:win 窗口指针,wParam WM_PAINT消息, lParam没用
Return:无
Global:无
Author:xiexiuxie
*****************************************************************/
UINT32 ScoreWinPaintProc(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
TANK_SAVE *tSave = &gTankConfig;
int i, j = 0;
int h;
char aa[6];
int bb = 0;
W_Scorce *ScorceObj = (W_Scorce *)win->Data;
if (!(WIN_NEEDPAIT(win)))
return TRUE;
ASSERT(tSave);
DrawPic(0, 0, (INT16U)(BID_tankgamehero0));
for (i = 0;i < 10;i++)
{
if (tSave->gamescors[i] <= 0)
j++;
else if (tSave->gamescors[i] > 0)
{
aa[0] = tSave->gamescors[i] / 100000;
aa[1] = (tSave->gamescors[i] % 100000) / 10000;
aa[2] = (tSave->gamescors[i] % 10000) / 1000;
aa[3] = (tSave->gamescors[i] % 1000) / 100;
aa[4] = (tSave->gamescors[i] % 100) / 10;
aa[5] = (tSave->gamescors[i] % 10) % 10;
if (tSave->gamescors[i] >= 40000)
bb = 0;
else if (tSave->gamescors[i] >= 30000)
bb = 1;
else if (tSave->gamescors[i] >= 10000)
bb = 2;
else if (tSave->gamescors[i] >= 5000)
bb = 3;
else if (tSave->gamescors[i] > 0)
bb = 4;
for (h = 0;h < 6;h++)
{
if (i == tSave->sflag)
DrawBmpIdEx((INT16S)(54 + i*15), (INT16S)(78 - h*10), (INT16U)(BID_chara0 + aa[h]), 0, DSPM_Normal);
else
DrawBmpIdEx((INT16S)(52 + i*15), (INT16S)(78 - h*10), (INT16U)(BID_char0 + aa[h]), 0, DSPM_Normal);
}
DrawBmpIdEx((INT16S)(50 + i*15), 125, (INT16U)(BID_tankscoregrade0 + bb), 0, DSPM_Normal);
}
}
if (j == 10)
DrawPic(0, 0, (INT16U)(BID_tankgamehero1));
if (j != 10 && ScorceObj->flag == 1)
DrawPic(287, 157, (INT16U)(BID_tankgamerecorddelete));
if (ScorceObj->flag == 2)
DrawPic(288, 23, (INT16U)(BID_tankgamerecordreturn));
if (j != 10 && (ScorceObj->delete_ok == 1 || ScorceObj->delete_ok == 2))
{
DrawPic(80, 21, (INT16U)(BID_tankgamewarning));
if (ScorceObj->scflag == 1)
{
DrawPic(155, 126, (INT16U)(BID_tankgameyes));
ScorceObj->scflag = 0;
}
else if (ScorceObj->scflag1 == 1)
{
DrawPic(155, 58, (INT16U)(BID_tankgameno));
ScorceObj->scflag1 = 0;
}
}
WIN_CLEARPAIT(win);
return TRUE;
}
/**************************************************************
Desc : 分数显示窗口创建初始化
Param:win 窗口指针,wParam WM_CREAT消息 , lParam没用
Return:无
Global:无
Author:xiexiuxie
*****************************************************************/
UINT32 ScoreWinCreatProc(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_Scorce *ScorceObj = NULL;
ScorceObj = MallocClass(W_Scorce);
if (ScorceObj)
{
ScorceObj->delete_ok = 0;
ScorceObj->flag = 0;
ScorceObj->scflag = 0;
ScorceObj->scflag1 = 0;
win->Data = ScorceObj;
}
WindowInvalidateWindow(win);
return TRUE;
}
/**************************************************************
Desc : 分数显示窗口删除
Param:win 窗口指针,wParam WM_DESTROY消息 , lParam没用
Return:无
Global:无
Author:xiexiuxie
*****************************************************************/
UINT32 ScoreWinDestroyProc(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_Scorce *ScorceObj = (W_Scorce*)win->Data;
FreeClass(ScorceObj);
//DspTskUpdateInit( DTSC_TRANSPS);
return WMPROC_UNHANDLE;
}
/**************************************************************
Desc : 分数显示窗口按键处理
Param:win 窗口指针,wParam WM_KEY消息, lParam没用
Return:无
Global:tSave 存放游戏设置参数
Author:xiexiuxie
*****************************************************************/
UINT32 ScoreWinKeyProc(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_Scorce *ScorceObj = (W_Scorce *)win->Data;
UINT16 keyPress = (UINT16)((wParam) >> 16);
UINT16 KEY_EV = (UINT16)(wParam);
int i;
TANK_SAVE *tSave = &gTankConfig;
if (keyPress)
return FALSE;
ASSERT(tSave);
switch (KEY_EV)
{
case KE_PLAY_PRESS:
{
ScorceObj->delete_ok++;
if (ScorceObj->delete_ok == 1)
ScorceObj->flag = 1;
if (ScorceObj->delete_ok == 2)
ScorceObj->scflag = 1;
}
break;
case KE_PLAY_RELEASE:
{
if (ScorceObj->delete_ok == 1)
ScorceObj->flag = 0;
if (ScorceObj->delete_ok == 2)
{
ScorceObj->delete_ok = 0;
for (i = 0;i < 10;i++)
tSave->gamescors[i] = 0;
}
}
break;
case KE_RETURN_PRESS:
{
if (ScorceObj->delete_ok == 0)
ScorceObj->flag = 2;
if (ScorceObj->delete_ok == 1)
ScorceObj->scflag1 = 1;
}
break;
case KE_RETURN_RELEASE:
{
if (ScorceObj->delete_ok == 0)
{
ScorceObj->flag = 0;
WindowDestroy(win);
}
if (ScorceObj->delete_ok == 1)
ScorceObj->delete_ok = 0;
}
break;
default:
break;
}
WindowInvalidateWindow(win);
return TRUE;
}
/**************************************************************
Desc : 定义名为ScoreProcMap的基本类窗口消息映射表,
并生成一个基本类CW_TYPE_tanksc 供继承
Return:无
Global:无
Author:xiexiuxie
*****************************************************************/
BEGIN_CHILDMESSAGE_MAP(ScoreProcMap , CW_TYPE_tanksc)
ON_MESSAGE(WM_PAINT, ScoreWinPaintProc)
ON_MESSAGE(WM_KEY, ScoreWinKeyProc)
ON_MESSAGE(WM_CREATE, ScoreWinCreatProc)
ON_MESSAGE(WM_DESTROY, ScoreWinDestroyProc)
END_MESSAGE_MAP()
/************************************************************************/
/**************************************************************
Desc : 创建游戏排行窗口
Param:win 窗口指针
Return:无
Global:无
Author:xiexiuxie
*****************************************************************/
UINT32 ENScore(WINDOW* win)
{
win = WindowCreate(win ,
WS_FULLSCREEN | WS_TICK,
WID_TankGameScore,
0, 0, 320, 240,
0,
0, 0, 0,
ScoreProcMap,
NULL);
return 0;
}
/************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -