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 + -
显示快捷键?