📄 slidegame.c
字号:
for (i = 0;i < m_slidetotnum - 1;i++)
{
m = i % m_slidediff;
n = i / m_slidediff;
if (m_slidept[i].ix == m && m_slidept[i].iy == n)
continue;
else
return FALSE;
}
return TRUE;
}
/******************************************************
Name: SlideOnPaint
Desc: WM_PAINT消息的响应函数,负责屏幕的绘制
Param: WINDOW* win--父窗口
WMPARAM wParam--
WLPARAM lParam--
Return: TRUE--成功,FALSE--失败
Global: 有
Note:
Author:czs
Log:
******************************************************/
UINT32 SlideOnPaint(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
INT16 i, j, x1, x2, y1, y2;
UHRECT rect;
rect.h = rect.w = m_slidestep;
SlideClearScreen();
SlideDrawSmallImg();
SlideDrawGameLevel();
SlideDrawMovesteps();
SlideDrawGametime();
SlideDrawDispSectionTitle();
for (j = 0;j < m_slidediff;j++)
for (i = 0;i < m_slidediff;i++)
{
if (m_slidept[j*m_slidediff+i].ix == -1)
{
rect.x = 30 + i * (m_slidestep + 2);
rect.y = 20 + j * (m_slidestep + 2);
GuiDspFillRect(&rect, COLOR_BLACK);
x1 = 30 + i * (m_slidestep + 2) + 5;
x2 = 30 + (i + 1) * (m_slidestep + 2) - 10;
y1 = 20 + j * (m_slidestep + 2) + 5;
y2 = 20 + (j + 1) * (m_slidestep + 2) - 10;
DrawLine(x1, y1 , x2 , y1, ColorRed, NULL);
DrawLine(x1, y1 , x1 , y2, ColorRed, NULL);
DrawLine(x1, y2 , x2 , y2, ColorRed, NULL);
DrawLine(x2, y1 , x2 , y2, ColorRed, NULL);
//TR("J:%d,I:%d",j,i);
continue;
}
rect.x = m_slidept[j*m_slidediff+i].ix * m_slidestep;
rect.y = m_slidept[j*m_slidediff+i].iy * m_slidestep;
RKDrawBmpIdEx((INT16S)(30 + i*(m_slidestep + 2)), (INT16S)(20 + j*(m_slidestep + 2)), BID_Slide_Img1, &rect, DSPM_Normal);
}
return TRUE;
}
/******************************************************
Name: SlideOnKey
Desc: 按键响应函数
Param: WINDOW* win--父窗口
WMPARAM wParam--
WLPARAM lParam--
Return: TRUE--成功,FALSE--失败
Global: 有
Note:
Author:czs
Log:
******************************************************/
UINT32 SlideOnKey(WINDOW* win, WMPARAM wParam, WLPARAM lParam)
{
UINT16 keyPress = (UINT16)((wParam) >> 16);
UINT16 KEY_EV = (UINT16)(wParam);
switch (KEY_EV)
{
case KE_DN_PRESS:
break;
case KE_DN_RELEASE:
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;
m_slidemovesteps++;
//SlideDrawMovesteps();
}
break;
case KE_NEXT_PRESS:
break;
case KE_NEXT_RELEASE:
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;
m_slidemovesteps++;
// SlideDrawMovesteps();
}
break;
case KE_UP_PRESS:
break;
case KE_UP_RELEASE:
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;
m_slidemovesteps++;
// SlideDrawMovesteps();
}
break;
case KE_PREV_PRESS:
break;
case KE_PREV_RELEASE:
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;
m_slidemovesteps++;
// SlideDrawMovesteps();
}
break;
case KE_MENU_PRESS:
break;
case KE_MENU_RELEASE:
m_slidediff++;
if (m_slidediff > 5)
m_slidediff = 3;
SlideResetGame(win);
WindowInvalidateWindow(win);
return FALSE;
break;
case KE_SHIFT_PRESS:
break;
case KE_SHIFT_RELEASE:
break;
case KE_PLAY_PRESS:
break;
case KE_PLAY_RELEASE:
break;
case KE_RETURN_PRESS:
break;
case KE_MENU_LONG_RELEASE:
case KE_RETURN_RELEASE:
WinStopTimer(m_slideTimerID);
RKWindowDestroyEx(win, 0, NULL);
break;
case KE_EXIT_PRESS:
break;
case KE_EXIT_RELEASE:
break;
case KE_LONGP_RELEASE:
break;
}
WindowInvalidateWindow(win);
if (SlideCheckDone())
{
if (m_slidediff == 5)
SlideShowDialog(win, SID_Slide_FinishMessage);
else
SlideShowDialog(win, SID_Slide_PassMessage);
}
return TRUE;
}
/******************************************************
Name: SlideResetGame
Desc: 重新开始游戏
Param: WINDOW* win--父窗口
Return: 无
Global: 有
Note:
Author:czs
Log:
******************************************************/
void SlideResetGame(WINDOW* win)
{
SlideInitPoint();
//SlideClearScreen();
//SlideDrawDispSectionTitle();
//SlideDrawSmallImg();
//SlideDrawGameLevel();
m_slidegametime = 0;
m_slidemovesteps = 0;
// m_slideTimerID=WinStartTimer(win,SLIDETIMERDELAY);
}
/******************************************************
Name: SlideOnTimer
Desc: 定时器回调函数,增加时间计数
Param: WINDOW* win--父窗口
WMPARAM wParam--窗口参数
WLPARAM lParam--窗口参数
Return: TRUE--成功,FALSE--失败
Global: 有
Note:
Author:czs
Log:
******************************************************/
UINT32 SlideOnTimer(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
m_slidegametime++;
//SlideDrawGametime();
WindowInvalidateWindow(win);
return TRUE;
}
/******************************************************
Name: SlideOnCommand
Desc: 信息显示对话框返回后,利用此函数判断进一步的工作
Param: WINDOW* win--父窗口
WMPARAM wParam--窗口参数
WLPARAM lParam--窗口参数
Return: TRUE--成功,FALSE--失败
Global: 有
Note:
Author:czs
Log:
******************************************************/
UINT32 SlideOnCommand(WINDOW* win, WMPARAM wParam, WLPARAM lParam)
{
INT16U ID = WM_CMD_GETCWID(wParam);
INT16U Event = WM_CMD_GETEVENT(wParam);
if (Event == EV_Confirm)
{
m_slidediff++;
if (m_slidediff > 5) m_slidediff = 3;
SlideResetGame(win);
}
return TRUE;
}
/******************************************************
Name: SlideShowDialog
Desc: 拼图游戏信息显示对话框
Param: WINDOW* win--父窗口
INT16U captionID--字串资源的ID
Return: TRUE--成功,FALSE--失败
Global: 有
Note:
Author:czs
Log:
******************************************************/
UINT32 SlideShowDialog(WINDOW* win, INT16U captionID)
{
WindowCreateDilog(win ,
WES_DilogOK,
WID_SlideDialog,
50, 70,
170, 100,
captionID,//SID_Txt_Warn,
BID_DilogBack76_70,
NULL,
WinDilogProcMap,
NULL);
return TRUE;
}
/******************************************************
Name: GameStartSlide
Desc: 拼图游戏模块提供给系统的调用接口
Param: WINDOW* win--父窗口
Return: TRUE--成功,FALSE--失败
Global: 有
Note:
Author:czs
Log:
******************************************************/
UINT32 GameStartSlide(WINDOW* win , char * filePath , void* param)
{
win = WindowCreate(win ,
WS_FULLSCREEN,
WID_SlideMain,
0, 0, 320, 240,
0,
BID_AudioPlayer5,
0,
0,
SlideProcMap,
NULL);
SlideResetGame(win);
WindowInvalidateWindow(win);
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -