📄 tankdesk.c
字号:
/******************************************************************/
/* Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved. */
/*******************************************************************
File : Desk.c
Desc :完成游戏初始界面的设置,功能设置,
战绩排行和帮助说明设置。
Author : xiexiuxin
Date : 2007-09-06
Notes:
$Log: TankDesk.c,v $
Revision 1.3 2008/06/19 04:42:26 Administrator
代码整理!
Revision 1.2 2008/05/28 12:44:53 HJ
注册表更新
Revision 1.1.1.1 2008/05/07 04:14:50 Administrator
no message
Revision 1.1.1.1 2008/03/06 13:28:25 Lingzhaojun
no message
*********************************************************************/
#include "TankDesk.h"
#include "Tank.h"
#include "system.h"
HTIMER Tankdesktimer;
#define TANKDESKTIMER 50
extern TANK_SAVE gTankConfig;
/**************************************************************
Desc : 显示游戏主窗口
Param:win 窗口指针,wParam WM_PAINT 消息, lParam没用
Return:无
Global:无
Author:xiexiuxie
*****************************************************************/
UINT32 DeskWinPaintProc(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
UINT16 x;
W_DeskPic *WdeskObj = (W_DeskPic*)win->Data;
if (!(WIN_NEEDPAIT(win)))
return TRUE;
switch (WdeskObj->item)
{
case 0: //选中游戏开始
x = 150;
break;
case 1: //选中游戏设置
x = 175;
break;
case 2: //选中游戏排名
x = 200;
break;
case 3: //选中游戏帮助
x = 225;
break;
case 4: //选中游戏离开
x = 250;
break;
default:
break;
}
DrawPicture(WdeskObj->IconBmp);
if (WdeskObj->fag)
{
//DrawPicture(WdeskObj->IconBmp);
gGuiDspTranspColor = COLOR_WHITE;
DrawBmpIdEx(x, 75, (INT16U)(BID_tankfacemenu1_start + WdeskObj->item), 0, DSPM_Transp);//显示选中的菜单
}
WIN_CLEARPAIT(win);
return TRUE;
}
/**************************************************************
Desc : 游戏主窗口创建初始化
Param:win 窗口指针,wParam WM_CREAT 消息, lParam没用
Return:无
Global:无
Author:xiexiuxie
*****************************************************************/
UINT32 DeskWinCreatProc(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_DeskPic *WdeskObj = NULL;
WdeskObj = MallocClass(W_DeskPic);
if (WdeskObj)
{
WdeskObj->IconBmp.BmpID = win->BmpID;
WdeskObj->IconBmp.X = win->x;
WdeskObj->IconBmp.Y = win->y;
WdeskObj->item = 0;
Tankdesktimer = WinStartTimer(win, TANKDESKTIMER);
WdeskObj->fag = 0;
win->Data = WdeskObj;
}
WindowInvalidateWindow(win);
return TRUE;
}
/**************************************************************
Desc : 游戏主窗口 删除
Param:win 窗口指针,wParam WM_DESTROY消息,lParam没用
Return:无
Global:无
Author:xiexiuxie
*****************************************************************/
UINT32 DeskWinDestroyProc(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_DeskPic *WdeskObj = (W_DeskPic*)win->Data;
SetTranspColor(COLOR_TRANSPARE);
RockStopTimer(Tankdesktimer);
FreeClass(WdeskObj);
//DspTskUpdateInit( DTSC_TRANSPS);
return WMPROC_UNHANDLE;
}
/**************************************************************
Desc : 游戏主 窗口 按键处理
Param:win 窗口指针,wParam(WM_KEY消息), lParam没用
Return:无
Global:无
Author:xiexiuxie
*****************************************************************/
UINT32 DeskWinKeyProc(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_DeskPic *WpicObj = (W_DeskPic *)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:
case KE_NEXT_RELEASE:
{
WpicObj->fag = 1;
WpicObj->item++;
WpicObj->item = WpicObj->item % 5;
}
break;
case KE_UP_RELEASE:
//case KE_NEXT_RELEASE:
case KE_PREV_RELEASE:
{
WpicObj->fag = 1;
WpicObj->item--;
if (WpicObj->item < 0)
WpicObj->item = 4;
else
WpicObj->item = WpicObj->item % 5;
}
break;
case KE_PLAY_RELEASE:
WinSendCommand(win, EV_ItemSelect);//主菜单选项被激活
WindowInvalidateWindow(win);
break;
case KE_RETURN_RELEASE:
case KE_EXIT_RELEASE:
WindowDestroy(win);
break;
default:
break;
}
WindowInvalidateWindow(win);
return TRUE;
}
/**************************************************************
Desc : 游戏主 窗口 定时器处理
Param:win 窗口指针,wParam WM_TIMER消息,lParam没用
Return:无
Global:无
Author:xiexiuxie
*****************************************************************/
UINT32 DeskWinTimerProc(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_DeskPic *WdeskObj = win->Data;
WdeskObj->fag = !WdeskObj->fag;//选中主菜单闪烁控制
WindowInvalidateWindow(win);
return TRUE;
}
/**************************************************************
Desc : 游戏主窗口 菜单 选中
Param:win 窗口指针,wParam (EV_ItemSelect消息) , lParam没用
Return:无
Global:无
Author:xiexiuxie
*****************************************************************/
UINT32 SetCommandProc(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
INT16U ID = WM_CMD_GETCWID(wParam);
INT16U Event = WM_CMD_GETEVENT(wParam);
W_DeskPic *WdeskObj = (W_DeskPic *)win->Data;
if (EV_ItemSelect == Event)
{
switch (WdeskObj->item)
{
case 0:
Gamestart(win);//进入游戏窗口
break;
case 1:
ENSET(win);//进入设置窗口
break;
case 2:
ENScore(win);
break;//进入排名窗口
case 3:
ENHELP(win);//进入帮助窗口
break;
case 4:
WindowDestroy(win);
break;
default:
break;
}
}
return TRUE;
}
/**************************************************************
Desc : 定义名为DeskProcMap的基本类窗口消息映射表,
并生成一个基本类CW_TYPE_desk 供继承
Return:无
Global:无
Author:xiexiuxie
*****************************************************************/
BEGIN_CHILDMESSAGE_MAP(DeskProcMap , CW_TYPE_desk)
ON_MESSAGE(WM_PAINT , DeskWinPaintProc)
ON_MESSAGE(WM_KEY, DeskWinKeyProc)
ON_MESSAGE(WM_TIMER, DeskWinTimerProc)
ON_MESSAGE(WM_COMMAND, SetCommandProc)
ON_MESSAGE(WM_CREATE, DeskWinCreatProc)
ON_MESSAGE(WM_DESTROY , DeskWinDestroyProc)
END_MESSAGE_MAP()
/***************************************************************/
/**************************************************************
Desc : 游戏设置 窗口显示
Param:win 窗口指针,wParam WM_PAINT消息 ,lParam没用
Return:无
Global:无
Author:xiexiuxie
*****************************************************************/
UINT32 SetWinPaintProc(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_SetPic *WsetObj = (W_SetPic*)win->Data;
if (!(WIN_NEEDPAIT(win)))
return TRUE;
DrawBmpIdEx(0, 0, (INT16U)BID_tankgameset, 0, DSPM_Normal);
switch (WsetObj->itset)
{
case 0: //音量设置选中
DrawPic(84, 148, (INT16U)(INT16U)BID_tankgameset1);
break;
case 1: //坦克类型选中
DrawPic(131, 149, (INT16U)BID_tanktypechoce);
break;
case 2: //坦克水平选中
DrawPic(178, 149, (INT16U)BID_tankleverchoce);
break;
case 3: //上一页选中
DrawPic(229, 149, (INT16U)BID_tankbarrch1);
break;
default:
break;
}
DrawBmpIdEx(86 , 65, (INT16U)(BID_setchar0 + WsetObj->rank % 10), 0, DSPM_Transp); //音量设置
DrawBmpIdEx(86 , 88, (INT16U)(BID_setchar0 + WsetObj->rank / 10), 0, DSPM_Transp);
DrawBmpIdEx(136, 42, (INT16U)(BID_tankleverchoce00 + WsetObj->itty), 0, DSPM_Normal);//坦克类型设置
DrawBmpIdEx(185, 42, (INT16U)(BID_tanktypechoce00 + WsetObj->itle), 0, DSPM_Normal);//游戏水平设置
DrawBmpIdEx(232 , 65, (INT16U)(BID_setchar0 + (WsetObj->barr + 1) % 10), 0, DSPM_Transp); //音量设置
DrawBmpIdEx(232 , 88, (INT16U)(BID_setchar0 + (WsetObj->barr + 1) / 10), 0, DSPM_Transp);
if (WsetObj->ok == 1)
{
DrawPic(283, 144, (INT16U)BID_tanksetyes1);
WsetObj->ok = 0;
}
if (WsetObj->ok == 2)
{
DrawPic(283, 46, (INT16U)BID_tanksetcancel1);
WsetObj->ok = 0;
}
WIN_CLEARPAIT(win);
return TRUE;
}
/**************************************************************
Desc : 游戏设置窗口创建初始化
Param:win 窗口指针,wParam WM_CREAT消息, lParam没用
Return:无
Global: tSave 存放游戏设置参数
Author:xiexiuxie
*****************************************************************/
UINT32 SetWinCreatProc(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
TANK_SAVE *tSave = &gTankConfig;
W_SetPic *WsetObj = NULL;
ASSERT(tSave);
WsetObj = MallocClass(W_SetPic);
if (WsetObj)
{
WsetObj->IconBmp.BmpID = win->BmpID;
WsetObj->IconBmp.X = win->x;
WsetObj->IconBmp.Y = win->y;
WsetObj->barr = 0;
if (tSave == NULL)
{
WsetObj->itle = 0;
WsetObj->itty = 0;
WsetObj->rank = 0;
WsetObj->barr = 0;
}
else
{
WsetObj->itle = tSave->GameLevel;
WsetObj->itty = tSave->GameType;
WsetObj->rank = tSave->rank;
WsetObj->barr = tSave->barriesflag;
}
WsetObj->itset = 0;
//WsetObj->x=0;
WsetObj->ok = 0;
win->Data = WsetObj;
}
WindowInvalidateWindow(win);
return TRUE;
}
/**************************************************************
Desc : 删除 游戏设置窗口
Param:win 窗口指针,wParam WM_DESTROY消息, lParam没用
Return:无
Global:无
Author:xiexiuxie
*****************************************************************/
UINT32 SetWinDestroyProc(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_SetPic *WsetObj = (W_SetPic*)win->Data;
FreeClass(WsetObj);
//DspTskUpdateInit( DTSC_TRANSPS);
return WMPROC_UNHANDLE;
}
/**************************************************************
Desc : 游戏设置窗口按键处理
Param:win 窗口指针,wParam WN_KEY消息, lParam没用
Return:无
Global: tSave 存放游戏设置参数
Author:xiexiuxie
*****************************************************************/
UINT32 SetWinKeyProc(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_SetPic *WsetObj = (W_SetPic *)win->Data;
UINT16 keyPress = (UINT16)((wParam) >> 16);
UINT16 KEY_EV = (UINT16)(wParam);
TANK_SAVE *tSave = &gTankConfig;
if (keyPress)
return FALSE;
ASSERT(tSave);
switch (KEY_EV)
{
//case KE_PREV_RELEASE: //设置的主选菜单
case KE_DN_RELEASE:
{
if (WsetObj->itset < 3)
WsetObj->itset++;
else if (WsetObj->itset == 3)
WsetObj->itset = 0;
}
break;
//case KE_NEXT_RELEASE:
case KE_UP_RELEASE:
{
if (WsetObj->itset > 0)
WsetObj->itset--;
else if (WsetObj->itset == 0)
WsetObj->itset = 3;
}
break;
//case KE_DN_RELEASE:
case KE_NEXT_RELEASE:
{
/*if(WsetObj->itset==0)//音量
{
WsetObj->rank--;
if(WsetObj->rank<0)
WsetObj->rank=20;
WsetObj->rank=WsetObj->rank%21;
}*/
if (WsetObj->itset == 0)
{
WsetObj->rank++;
WsetObj->rank = WsetObj->rank % 21;
}
if (WsetObj->itset == 1)//类型
{
WsetObj->itty++;
WsetObj->itty = WsetObj->itty % 3;
}
if (WsetObj->itset == 2)//难度
{
WsetObj->itle++;
WsetObj->itle = WsetObj->itle % 3;
}
if (WsetObj->itset == 3 && WsetObj->barr <= 20)// 关数
{
if (WsetObj->barr < 20)
WsetObj->barr++;
else if (WsetObj->barr == 20)
WsetObj->barr = 0;
}
}
break;
//case KE_UP_RELEASE:
case KE_PREV_RELEASE:
{
/*if(WsetObj->itset==0)
{
WsetObj->rank++;
WsetObj->rank=WsetObj->rank%21;
}*/
if (WsetObj->itset == 0)//音量
{
WsetObj->rank--;
if (WsetObj->rank < 0)
WsetObj->rank = 20;
WsetObj->rank = WsetObj->rank % 21;
}
if (WsetObj->itset == 1)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -