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

📄 tankdesk.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************/
/*  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 + -