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

📄 slidegame.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
📖 第 1 页 / 共 2 页
字号:
/**********************************************************
*  Copyright (C),2004-2007, Fuzhou Rockchip Co.,Ltd.
*  Module name : Slide game
*  Author:         Zushang Chen
*  Description:    拼图游戏
*  Calls:
*  Input:          无
*  Return:         无
*  Remark:
*
*  History:
*           <author>      <time>     <version>       <desc>
*           CZS          2007/10/19      1.0           ORG
*
$Log: Slidegame.c,v $
Revision 1.3  2008/06/19 04:42:26  Administrator
代码整理!

Revision 1.2  2008/06/06 03:16:27  XXX
更改游戏在RGB屏情况的问题

Revision 1.1.1.1  2008/03/06 13:28:25  Lingzhaojun
no message

Revision 1.7  2008/01/10 13:02:19  Chenzushang
修改窗口ID

Revision 1.6  2007/12/26 14:00:15  Chenzushang
修正游戏创建完后的刷屏问题。

Revision 1.5  2007/11/03 03:29:41  Chenzushang
对调拼图游戏的上下和左右方向

Revision 1.4  2007/11/03 01:50:35  Chenzushang
没图片方块的空格改用红色线框来指示。

Revision 1.3  2007/10/26 03:53:40  Chenzushang
添加CVS版本自动注释脚本

**********************************************************/
#include "Slidegame.h"
#include "..\..\system\gui\guictrl\uidilog.h"//dialog
extern void RKWindowDestroyEx(WINDOW *win  , WMPARAM wParam, WLPARAM lParam);
extern UINT8 RockGetRamdom(void);
//snake variable
SLIDEPOINT m_slidept[25];
UINT8 m_slidediff = 3;
UINT8 m_slidetotnum = 3 * 3;
UINT8 m_slidecurX, m_slidecurY;
UINT8 m_slidestep;
UINT32 m_slidegametime = 0;
UINT32 m_slidemovesteps = 0;
HTIMER m_slideTimerID;
BEGIN_CHILDMESSAGE_MAP(SlideProcMap , CW_TYPE_desk)
ON_MESSAGE(WM_PAINT ,   SlideOnPaint)
ON_MESSAGE(WM_TIMER,   SlideOnTimer)
ON_MESSAGE(WM_KEY,    SlideOnKey)
ON_MESSAGE(WM_COMMAND,  SlideOnCommand)
END_MESSAGE_MAP()
/******************************************************
Name: SlideInitPoint
Desc: 初始化图像阵列 
Param:无
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void SlideInitPoint()
{
    int i, j;
    UINT8 temp;
    for (j = 0;j < m_slidediff;j++)
        for (i = 0;i < m_slidediff;i++)
        {
            m_slidept[j*m_slidediff+i].ix = i;
            m_slidept[j*m_slidediff+i].iy = j;
        }
    m_slidetotnum = m_slidediff * m_slidediff;
    m_slidept[m_slidetotnum-1].ix = -1;
    m_slidept[m_slidetotnum-1].iy = -1;
    m_slidecurX = m_slidediff - 1;
    m_slidecurY = m_slidediff - 1;
    m_slidestep = SLIDEIMGSIZE / m_slidediff;
    for (i = 0;i < m_slidetotnum*400;i++)//随机置乱图像
    {
#ifdef __arm
        temp = RockGetRamdom() % 4;
#else
        temp = rand() % 4;
#endif
        switch (temp)
        {
            case 0:
                if (m_slidecurY > 0)
                {
                    m_slidept[m_slidecurY*m_slidediff+m_slidecurX] = m_slidept[(m_slidecurY-1)*m_slidediff+m_slidecurX];
                    m_slidecurY--;
                    m_slidept[m_slidecurY*m_slidediff+m_slidecurX].ix = m_slidept[m_slidecurY*m_slidediff+m_slidecurX].iy = -1;
                }
                break;
            case 1:
                if (m_slidecurX > 0)
                {

                    m_slidept[m_slidecurY*m_slidediff+m_slidecurX] = m_slidept[m_slidecurY*m_slidediff+m_slidecurX-1];
                    m_slidecurX--;
                    m_slidept[m_slidecurY*m_slidediff+m_slidecurX].ix = m_slidept[m_slidecurY*m_slidediff+m_slidecurX].iy = -1;
                }
                break;
            case 2:
                if (m_slidecurY < m_slidediff - 1)
                {
                    m_slidept[m_slidecurY*m_slidediff+m_slidecurX] = m_slidept[(m_slidecurY+1)*m_slidediff+m_slidecurX];
                    m_slidecurY++;
                    m_slidept[m_slidecurY*m_slidediff+m_slidecurX].ix = m_slidept[m_slidecurY*m_slidediff+m_slidecurX].iy = -1;
                }
                break;
            case 3:
                if (m_slidecurX < m_slidediff - 1)
                {
                    m_slidept[m_slidecurY*m_slidediff+m_slidecurX] = m_slidept[(m_slidecurY)*m_slidediff+m_slidecurX+1];
                    m_slidecurX++;
                    m_slidept[m_slidecurY*m_slidediff+m_slidecurX].ix = m_slidept[m_slidecurY*m_slidediff+m_slidecurX].iy = -1;
                }
                break;

        }
    }
}
/******************************************************
Name: SlideClearScreen
Desc: 清除整个屏幕 
Param:无
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void SlideClearScreen()
{
    UHRECT rect;
    rect.x = rect.y = 0;
    rect.h = LCD_H;
    rect.w = LCD_W;
    GuiDspFillRect(&rect, COLOR_BLACK);
}
/******************************************************
Name: SlideDrawDispSectionTitle
Desc: 显示游戏显示区的标题 
Param:无
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void SlideDrawDispSectionTitle()
{
    ColorDesc col;
    col.backward = ColorBlack;
    col.forward = 0x000000ff;
    col.mode = DSPM_Normal;
    DrawStringIdEx(SLIDE_DISP_LEVEL_X, SLIDE_DISP_LEVEL_Y, 50, SID_Slide_Level, Font12X12, &col, 0);
    DrawStringIdEx(SLIDE_DISP_TIME_X, SLIDE_DISP_TIME_Y, 50, SID_Slide_Time, Font12X12, &col, 0);
    DrawStringIdEx(SLIDE_DISP_STEP_X, SLIDE_DISP_STEP_Y, 50, SID_Slide_Step, Font12X12, &col, 0);


}
/******************************************************
Name: SlideDrawGametime
Desc: 显示游戏所用时间 
Param:无
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void SlideDrawGametime()
{
    WCHAR ctemp, strtemp[12];

    int i, j, temp;
    ColorDesc col;
    col.backward = 0x00000000;
    col.forward = 0x00ff0000;
    col.mode = DSPM_Normal;
    strtemp[0] = m_slidegametime % 10 + '0';
    temp = m_slidegametime / 10;
    for (i = 1;i<10 && temp>0;i++)
    {
        strtemp[i] = temp % 10 + '0';
        temp = temp / 10;
    }
    strtemp[i] = 0;
    for (j = 0;j < i / 2;j++)
    {
        ctemp = strtemp[j];
        strtemp[j] = strtemp[i-1-j];
        strtemp[i-1-j] = ctemp;
    }
    DrawStringEx(SLIDE_DISP_TIME_X, SLIDE_DISP_TIME_Y + SLIDE_DISP_H, 80, strtemp, Font12X12, &col, 0);

}
/******************************************************
Name: SlideDrawMovesteps
Desc: 显示游戏所走步数 
Param:无
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void SlideDrawMovesteps()
{
    WCHAR ctemp, strtemp[10];
    int i, j, temp;
    ColorDesc col;
    col.backward = 0x00000000;
    col.forward = 0x00ff0000;
    col.mode = DSPM_Normal;
    strtemp[0] = m_slidemovesteps % 10 + '0';
    temp = m_slidemovesteps / 10;
    for (i = 1;i<8 && temp>0;i++)
    {
        strtemp[i] = temp % 10 + '0';
        temp = temp / 10;
    }
    strtemp[i] = 0;
    for (j = 0;j < i / 2;j++)
    {
        ctemp = strtemp[j];
        strtemp[j] = strtemp[i-1-j];
        strtemp[i-1-j] = ctemp;
    }
    DrawStringEx(SLIDE_DISP_STEP_X, SLIDE_DISP_STEP_Y + SLIDE_DISP_H, 80, strtemp, Font12X12, &col, 0);

}
/******************************************************
Name: SlideDrawGameLevel
Desc: 显示游戏的级别难度 
Param:无
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void SlideDrawGameLevel()
{
    WCHAR strtemp[2];
    // int i;
    ColorDesc col;
    col.backward = 0x00000000;
    col.forward = 0x00ff0000;
    col.mode = DSPM_Normal;
    strtemp[0] = (m_slidediff - 2) + '0';
    strtemp[1] = 0;
    DrawStringEx(SLIDE_DISP_LEVEL_X, SLIDE_DISP_LEVEL_Y + SLIDE_DISP_H, 30, strtemp, Font12X12, &col, 0);

}
/******************************************************
Name: SlideDrawSamllImg
Desc: 显示游戏最终拼成的图像的缩小版本 
Param:无
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void SlideDrawSmallImg()
{
    UHRECT rect;
    rect.x = rect.y = 0;
    rect.h = rect.w = 50;
    RKDrawBmpIdEx(SLIDE_DISP_SMALLIMG_X, SLIDE_DISP_SMALLIMG_Y, BID_Slide_SmallImg1, &rect, DSPM_Normal);

}
/******************************************************
Name: SlideCheckDone
Desc: 检测拼图游戏是否已经完成 
Param:无
Return: FALSE--未完成
        TRUE--完成
Global: 有
Note:
Author:czs
Log:
******************************************************/
UINT8 SlideCheckDone()
{
    int i, m, n;

⌨️ 快捷键说明

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