mmisnake.c
来自「是一个手机功能的模拟程序」· C语言 代码 · 共 1,235 行 · 第 1/3 页
C
1,235 行
break;
case KCD_MNUDOWN:
data->R_CurSlect ++;
if(data->R_CurSlect == 4)
{
data->R_CurSlect = 0;
}
uflags = 1;
break;
case KCD_LEFT:
case KCD_OK:
switch(data->R_CurSlect)
{
case 0:
setSnakeGameState(Snake_Ready);
break;
case 1:
setSnakeGameState(Snake_Select);
break;
case 2:
setSnakeGameState(Snake_Help);
#if (MAIN_LCD_SIZE==3)
/*2004/5/26, wy modify begin*/ //shiheng porting
game_editor_init(&data->edt_attr);
data->edt = edtCreate(win, &data->edt_attr, 0, 0);
text=(char *)MmiRsrcGetText(TxtSnakeHelp);
memset(snakeHelp_Buffer, 0, sizeof(snakeHelp_Buffer));
memcpy(snakeHelp_Buffer, text, wstrlen(text));
edtSetText(data->edt, snakeHelp_Buffer );
/*2004/5/26, wy modify end*/
#endif
break;
case 3:
setSnakeGameState(Snake_Rank);
break;
}
uflags = 2;
break;
case KCD_RIGHT:
case KCD_HUP:
GameSnakeDestroy(data->win);
break;
default:
break;
}
if(uflags == 1)
{
data->R_AnimIndx = data->R_AnimType = 0;
winShow(data->win);
timStart(data->timer);
}
else if(uflags == 2)
{
data->R_AnimIndx = data->R_AnimType = 0;
winShow(data->win);
}
//return MFW_EVENT_CONSUMED;
}
//Game Ready
else if(data->uGameState == Snake_Ready)
{
switch ( k->code )
{
case KCD_CALL:
setSnakeGameState(Snake_Running);
timSetTime(data->timer,snakeTimeout[data->speed]);
timStart(data->timer);
break;
case KCD_RIGHT:
case KCD_HUP:
setSnakeGameState(Snake_Init);
winShow(data->win);
break;
}
#ifdef GAME_SUBMENU
if(snakedata.uGameState == Snake_Init)
{
GameSnakeDestroy(data->win);
}
#endif
// return MFW_EVENT_CONSUMED;
}//end Game Ready
//Select Game level
else if(data->uGameState == Snake_Select)
{
switch(k->code)
{
case KCD_LEFT:
if(snakedata.gameselect[0])
{
snakedata.stage = atoi(snakedata.gameselect);
snakedata.stage--;
memset(snakedata.gameselect,0,sizeof(snakedata.gameselect));
}
setSnakeGameState(Snake_Ready);
winShow(data->win);
break;
case KCD_RIGHT:
if(snakedata.gameselect[0] == 0)
{
#ifdef GAME_SUBMENU
GameSnakeDestroy(data->win);
//return MFW_EVENT_CONSUMED;
#else
setSnakeGameState(Snake_Init);
winShow(data->win);
#endif
}
else
{
snakedata.gameselect[strlen(snakedata.gameselect)-1] = 0;
}
winShow(data->win);
break;
case KCD_HUP:
#ifdef GAME_SUBMENU
GameSnakeDestroy(data->win);
//return MFW_EVENT_CONSUMED;
#else
setSnakeGameState(Snake_Init);
memset(snakedata.gameselect,0,sizeof(snakedata.gameselect));
winShow(data->win);
#endif
break;
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
len = strlen(snakedata.gameselect);
snakedata.gameselect[len] = '0' + k->code;
if(atoi(snakedata.gameselect) > SNAKE_STAGE)
{
snakedata.gameselect[len] = 0;
}
winShow(data->win);
break;
}
}
//Select Game level end
//Key info
else if(data->uGameState == Snake_KeyInfo)
{
switch(k->code)
{
case KCD_RIGHT:
case KCD_HUP:
#ifdef GAME_SUBMENU
GameSnakeDestroy(data->win);
#else
setSnakeGameState(Snake_Init);
winShow(data->win);
#endif
break;
}
}
//Key info end
#if (MAIN_LCD_SIZE==3)
//Game help
else if(data->uGameState == Snake_Help)
{
switch(k->code)
{
case KCD_MNUUP:
edtSymbol(snakedata.edt, ecUp);
break;
case KCD_MNUDOWN:
edtSymbol(snakedata.edt, ecDown);
break;
case KCD_LEFT:
case KCD_RIGHT:
case KCD_HUP:
edtDelete(snakedata.edt);
setSnakeGameState(Snake_Init);
winShow(data->win);
break;
}
}
//Game help end
#endif
//Game Pause
else if(data->uGameState == Snake_Pause)
{
switch ( k->code )
{
case KCD_CALL:
setSnakeGameState(Snake_Running);
timStart(data->timer);
break;
case KCD_RIGHT:
case KCD_HUP:
setSnakeGameState(Snake_Exit);
winShow(data->win);
break;
}
// return MFW_EVENT_CONSUMED;
}
//Game Exit
else if(data->uGameState ==Snake_Exit)
{
switch ( k->code )
{
case KCD_LEFT:
setSnakeGameState(Snake_Running);
winShow(data->win);
timStart(data->timer);
break;
case KCD_RIGHT:
setSnakeGameState(Snake_Init);
winShow(data->win);
break;
}
#ifdef GAME_SUBMENU
if(snakedata.uGameState == Snake_Init)
GameSnakeDestroy(data->win);
#endif
//return MFW_EVENT_CONSUMED;
}
//Game Rand
else if(data->uGameState ==Snake_Rank)
{
switch ( k->code )
{
case KCD_LEFT:
if(data->uGameStateOld == Snake_Init)
{
Game_resetScore(&ffs_gamedata.Snake_ffsScore);
flash_Gamewrite();
//2004/06/10 yhf remove
//setSnakeGameState(data->uGameStateOld);
}
else
{
setSnakeGameState(Snake_Ready);
}
winShow(data->win);
break;
case KCD_HUP:
case KCD_RIGHT:
#ifdef GAME_SUBMENU
GameSnakeDestroy(data->win);
#else
setSnakeGameState(Snake_Init);
winShow(data->win);
#endif
break;
}
//return MFW_EVENT_CONSUMED;
}
//talcon add 2004/05/15
if(data->uGameState == Snake_Running)
{
timStop(gtVibator);
}
return MFW_EVENT_CONSUMED;
}//end function:GameSnake_kbd_cb
static int GameSnake_timer_cb(MfwEvt e, MfwTim *t)
{
MfwHnd win = mfwParent (mfwHeader());
if(!winIsFocussed(snakedata.win))
{
timStart(snakedata.timer);
return;
}
switch(snakedata.uGameState)
{
case Snake_Init:
//snake_MnuItemIcnShow(&snakedata);
break;
/*case Snake_Ready:
SnakeData_Init();
redrawAll();*/
case Snake_Running:
domoveSnake();
break;
default:
break;
}
return 0;
}
T_MFW_HND GameSnakeCreate( MfwHnd parent )
{
T_MFW_WIN * win;
Snake_Data *data=&snakedata;
//memset(data,0,sizeof(Snake_Data) );
data->win=win_create(parent,0,E_WIN_VISIBLE,(T_MFW_CB)GameSnake_win_cb);
if (data->win EQ 0)
{
return 0;
}
data->mmi_control.dialog = (T_DIALOG_FUNC)NULL;
data->mmi_control.data = data;
win = ((T_MFW_HDR *)data->win)->data;
win->user = (void *) data;
data->kbd = kbd_create (data->win,KEY_ALL | KEY_MAKE,(T_MFW_CB)GameSnake_kbd_cb);
data->timer = tim_create (data->win,snakeTimeout[10],(T_MFW_CB)GameSnake_timer_cb); // timeout
winShow(data->win);
return data->win;
}
int GameSnakeEntry(MfwMnu* m, MfwMnuItem* i)
{
T_MFW_HND win = mfw_parent(mfw_header());
T_MFW_HND winCur;
snakedata.uGameState = Snake_Init;
winCur = GameSnakeCreate(win);
#ifdef GAME_SUBMENU
if(winCur)
{
switch(m->lCursor[m->level])
{
case 0:
setSnakeGameState(Snake_Ready);
winShow(winCur);
break;
case 1://slect game
setSnakeGameState(Snake_Select);
winShow(winCur);
break;
case 2://key info.
setSnakeGameState(Snake_KeyInfo);
winShow(winCur);
break;
case 3://score
setSnakeGameState(Snake_Rank);
winShow(winCur);
break;
default:
break;
}
}
#endif
return MFW_EVENT_CONSUMED;
}
/********************************************************************************************
$Function: snake_help
$Description:
$Author:
$Date:
********************************************************************************************/
void snake_help()
{
game_editor_init(&snakedata.edt_attr);
/* 2004/06/08 sunsj modify */
//snakedata.edt = game_display_help(&snakedata.edt_attr);
}
#if (MAIN_LCD_SIZE==3)
void Snake_MnuShow()
{
int posX = 0, posY = 0;
dspl_ClearAll();
dspl_BitBlt(snake_EntryBkg[0],snake_EntryBkg[1],snake_EntryBkg[2],snake_EntryBkg[3],0,(void*)&snake_EntryBkg[4],0);
// dspl_TextOut(28, 4, DSPL_TXTATTR_WHITE_EDGE,MmiRsrcGetText(TxtGamestart));
// dspl_TextOut(28, 18, DSPL_TXTATTR_WHITE_EDGE,MmiRsrcGetText(TxtGameselect));
// dspl_TextOut(28, 32, DSPL_TXTATTR_WHITE_EDGE,MmiRsrcGetText(TxtGamehelp));
// dspl_TextOut(28, 46, DSPL_TXTATTR_WHITE_EDGE,MmiRsrcGetText(TxtGameScore));
posX = 50;
posY = 28 + 22 * snakedata.R_CurSlect;
dspl_BitBlt(posX, posY, 22, 18, 0, (void *)game_Menu_Finger, DSPL_BMPXOR);//shiheng 288 waiting//游戏手指图
dspl_BitBlt(posX, posY, 22, 18, 0, (void *)game_Menu_Finger_mask, DSPL_BMPAND);
dspl_BitBlt(posX, posY, 22, 18, 0, (void *)game_Menu_Finger, DSPL_BMPXOR);
}
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?