📄 slidegame.c
字号:
/**********************************************************
* 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 + -