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

📄 mmirussia.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 3 页
字号:
			data->R_CurSlect ++;
			if(data->R_CurSlect == 4)
			{
				data->R_CurSlect = 0;
			}
			data->R_AnimIndx = data->R_AnimType = 0;
			timStart(data->timer);
			break;
		case KCD_MNUUP:
			if(data->R_CurSlect)
			{
				data->R_CurSlect --;
			}
			else
			{
				data->R_CurSlect = 3;
			}
			data->R_AnimIndx = data->R_AnimType = 0;
			timStart(data->timer);
			break;
		case KCD_LEFT:
		case KCD_OK:
			switch(data->R_CurSlect)
			{
			case 0:
				l_mode=Russia_Gamestate;
				data->CurState=R_Init;
				winShow(data->win);
				break;
			case 2:
				l_mode=Russia_Settingstate;
				//							Load_Keyset(russiagame);
				winShow(data->win);
				break;
			case 1:
				l_mode=Russia_Scorestate;
				winShow(data->win);
				break;
			case 3:
				l_mode=Russia_Helpstate;
				winShow(data->win);
				break;
			}
			break;
			/*end add*/
			case KCD_RIGHT:
			case KCD_HUP:		  	   	  
				GameRussiaDestroy(data->win);
				break;
			default:break;
		}
#if (MAIN_LCD_SIZE==3)
		Current_Select=data->R_CurSlect;//shiheng add
#endif
		return MFW_EVENT_CONSUMED;
	}//end russia_initstates
#endif	
    if(l_mode==Russia_Exitstate && (e&KEY_MAKE)) //退出状态
    {
		switch(k->code)
		{
		case KCD_LEFT:
			l_mode=Russia_Gamestate;
			Dspl_terris(data);
			if(data->CurState==R_Start)
			{
				timStart(data->timer);
				data->russiaTimeflag=1;
			}
			break;
		case KCD_RIGHT:
		case KCD_HUP:
			l_mode=Russia_Overstate;
			winShow(data->win);
			break;
		}        	    	
		
		
		return MFW_EVENT_CONSUMED;
    }//end russia_exitstates
   
    
   if(l_mode==Russia_Gamestate) //游戏状态
   {
       if(!(e&KEY_MAKE))//按键释放,置R_keycount and Prekeycode 为0
	   {
		   if (data->CurState==R_Start)   //r_start && key_long
		   {	     
			   if(	k->code==KCD_MNULEFT ||
				   k->code==KCD_MNURIGHT ||
				   k->code==KCD_MNUDOWN)
			   {
				   data->R_keycount=0;
				   data->Prekeycode=0;
			   }
		   }
	   } 
	   else if(e&KEY_MAKE)
	   {        
		   if (data->CurState==R_Start)  // key && r_start
		   {		
			   switch(k->code)
			   {
			   case KCD_MNULEFT:// 
				   data->R_keycount=0;
				   data->Prekeycode=1;
				   break;
			   case KCD_MNURIGHT:
				   data->R_keycount=0;
				   data->Prekeycode=2;
				   break;
			   case KCD_OK:
				   ChangeShape(data->R_DummySiteAndStyle[0],data->R_DummySiteAndStyle[1],
					   data->R_DummySiteAndStyle[2],data->R_DummySiteAndStyle[3],data);				
				   break;
			   case KCD_MNUDOWN :
				   data->Prekeycode=3;
				   break;
			   case KCD_CALL://pause
				   data->CurState=R_Stop;
				   timStop(data->timer);	     
				   data->russiaTimeflag=0;
				   break;
			   case KCD_HUP:
				   timStop(data->timer);	  
				   data->russiaTimeflag=0;
				   l_mode=Russia_Exitstate;
				   winShow(data->win);
				   break;
			   }	  
		   } 
		   else
		   {
			   if (k->code==KCD_CALL)  // kcd_call &&( r_ready || r_stop)
			   {                  
				   switch (data->CurState)
				   {
				   case R_Ready:
					   for (i = 0;i <= LineNumber-1; i++)
						   for (j =0; j<=LINEROW-1;j++)
							   data->R_Coordinate[j][i]=False;
					   data->R_Preview=data->R_Nextview;
					   diamondcolor = data->R_NextviewColor;
					   Draw_Shape(4,0,data->R_Preview,diamondcolor,True,data);
					   

					   data->R_Nextview=rand()%RUSSIASTYTLE+1;
					   data->R_NextviewColor= rand()%RUSSIACOLOR+1;
					   Draw_PreviewShape(data->R_Nextview,data->R_NextviewColor);
					   
                       Dspl_Score(data->R_Score);

					   data->Prekeycode=0;
					   
					   data->CurState=R_Start;
					   timStart(data->timer); 
					   data->russiaTimeflag=1;
					   break;
				   case R_Stop :
					   {
						   data->CurState=R_Start;
						   timStart(data->timer);
						   data->russiaTimeflag=1;
					   }             
					   break;
				   default      :break;
				   }
				   
			   }
			   else 
			   {
				   if(k->code== KCD_HUP)
				   {
					   timStop(data->timer);	
					   data->russiaTimeflag=0;
					   l_mode=Russia_Exitstate;
					   winShow(data->win);
				   }
				   
				   switch (k->code)    //  r_ready || r_stop
				   {
				   case KCD_MNUDOWN:
				   case KCD_MNULEFT:
					   if (data->R_Speed-1>=0) data->R_Speed=data->R_Speed-1;
					   else data->R_Speed=9-data->R_Speed;         
					   Dspl_Difficult(data,data->R_Speed);
					   break;
				   case KCD_MNUUP:
				   case KCD_MNURIGHT:
					   if (data->R_Speed+1<=9) data->R_Speed=data->R_Speed+1;
					   else data->R_Speed=0;
					   Dspl_Difficult(data,data->R_Speed);
					   break;
				   default: break;              	                     
				   }	          
			   }	
		   }
    }
   	}//end russia_gamestate
   
    if(l_mode==Russia_Settingstate&&(e&KEY_MAKE)) //游戏设置状态
    	{
		 // if(Key_Setting_func(russiagame, &keysetting,k))
#ifdef GAME_SUBMENU
		switch(k->code)
		{
		case KCD_RIGHT:
		case KCD_HUP:
		 	GameRussiaDestroy(data->win);
			break;
		}
		  
#else
			l_mode=Russia_Initstate;
#endif
		 	winShow(data->win);
        }
        
    if(l_mode==Russia_Helpstate && (e&KEY_MAKE)) //游戏帮助状态
    	{
        if(k->code==KCD_RIGHT || k->code==KCD_HUP)
        	{
			/*2004/06/01 yhf modify*/
			switch(k->code)
				{
				case KCD_RIGHT:
				case KCD_HUP:
#ifdef GAME_SUBMENU
				GameRussiaDestroy(data->win);
#else
        		l_mode=Russia_Initstate;
        		winShow(data->win);
#endif
				break;
				}
			/* end yhf modify */
        	}
        }
    
    if(l_mode==Russia_Scorestate && (e&KEY_MAKE)) //显示积分状态
    {
    	 switch(k->code)
         {
		 case KCD_LEFT:
			 Game_RestScore(Russia_Score);
			 winShow(data->win);
			 break;
		 case KCD_RIGHT:
		 case KCD_HUP:
#ifdef GAME_SUBMENU
			 GameRussiaDestroy(data->win);
#else
			 l_mode=Russia_Initstate;
			 winShow(data->win);
#endif
			 break;
		 }
    }
    
    if(l_mode==Russia_Overstate && (e&KEY_MAKE))
    {
       switch(k->code)
       {
	   case KCD_LEFT:
		   l_mode=Russia_Gamestate;
		   data->CurState=R_Init;
		   winShow(data->win);
		   break;
	   case KCD_RIGHT:
	   case KCD_HUP:
#ifdef GAME_SUBMENU
		   GameRussiaDestroy(data->win);
#else
		   l_mode=Russia_Initstate;
		   timSetTime(data->timer,timeout);
		   winShow(data->win);
#endif
		   
		   break;
	   }
    }
    return MFW_EVENT_CONSUMED;
}

void GameRussia_tim_cb(T_MFW_EVENT event,T_MFW_TIM * t)
{
	T_MFW_HND       win      = mfw_parent (mfw_header());
	T_MFW_WIN     * win_data = ((T_MFW_HDR *)win)->data;    
	T_game_russia   * data     = (T_game_russia*)win_data->user;
	
	char information[20];
	int i;
	UBYTE diamondcolor,levelIcs_i;
	static UBYTE timelevel;
	U32 oldcolor;
	
	timelevel++;
	timStop(data->timer);
	data->russiaTimeflag=0;
    
	/* 2004/06/03 yhf add */
	if(winIsFocussed(data->win)==0)
		winfocusout = 1; 
	else 
		winfocusout=0;
	/* end yhf add */
	
	TRACE_EVENT("bmtimerfunc");
	
	if(winfocusout==0 && l_mode==Russia_Gamestate) //2004/06/03 yhf modify
	{
		if(data->CurState==R_Start )
		{
			switch(data->Prekeycode)
			{
			case 1:
				data->R_keycount++;
				if(data->R_keycount!=RUSSIA_R_KEYCOUNT_MAX)
					MoveShape(data->R_DummySiteAndStyle[0],data->R_DummySiteAndStyle[1],
					data->R_DummySiteAndStyle[2],data->R_DummySiteAndStyle[3],MoveLeft,data);
				else
					data->R_keycount = 0;
				break;
			case 2:
				data->R_keycount++;
				if(data->R_keycount!=RUSSIA_R_KEYCOUNT_MAX)
					MoveShape(data->R_DummySiteAndStyle[0],data->R_DummySiteAndStyle[1],
					data->R_DummySiteAndStyle[2],data->R_DummySiteAndStyle[3],MoveRight,data);
				else
					data->R_keycount = 0;
				break;
			case 3:
				MoveShape(data->R_DummySiteAndStyle[0],data->R_DummySiteAndStyle[1],
					data->R_DummySiteAndStyle[2],data->R_DummySiteAndStyle[3],MoveDown,data);
				break;
			default:break;	
			}
		}//end if(data->CurState==R_Start )
		
		if(timelevel>=Set_Rflect(data->R_Speed))
		{
			timelevel=0;
			if (MoveShape(data->R_DummySiteAndStyle[0],data->R_DummySiteAndStyle[1],
                data->R_DummySiteAndStyle[2],data->R_DummySiteAndStyle[3],MoveDown,data))  
			{ 
				timStart(data->timer);  
				data->russiaTimeflag=1;
			}
			else
			{    
				/*2003/12/04,talcon modufy*/
				removeShape(data);

				//计算得分
				levelIcs_i=data->R_Score/10000;
				if(data->R_Count==1)
					data->R_Score=data->R_Score+100;
				else if(data->R_Count==2)
					data->R_Score=data->R_Score+300;
				else if(data->R_Count==3)
					data->R_Score=data->R_Score+700;
				else if(data->R_Count==4)
					data->R_Score=data->R_Score+1500;
				data->R_LineCount += data->R_Count;
				
				if(levelIcs_i+1==data->R_Score/10000)  
				{
					if(data->R_Speed<10)
						data->R_Speed++;
					Dspl_Difficult(data,data->R_Speed);
				}
				
				//将当前的得分放在数组information当中
				if(data->R_Count)
				{
					Dspl_Score(data->R_Score);
					Dspl_TotalLines(data->R_LineCount);
				}
				
				if (JudgeCoordinate(data->R_DummySiteAndStyle[0],data->R_DummySiteAndStyle[1],
					data->R_DummySiteAndStyle[2])==False)
				{   
					
					data->R_Preview=data->R_Nextview;
					diamondcolor = data->R_NextviewColor;
					Draw_Shape(4,0,data->R_Preview,diamondcolor,True,data);
					
					//data->R_Preview=data->R_Nextview;
					//srand((unsigned)time(NULL));//talcon
					data->R_Nextview=rand()%RUSSIASTYTLE+1;
					data->R_NextviewColor= rand()%RUSSIACOLOR+1;
					//Draw_PreviewShape(data->R_Preview,FALSE,FrameColor,FillColor,Backdrop);      
					Draw_PreviewShape(data->R_Nextview,data->R_NextviewColor);
				
					timStart(data->timer); 
					data->russiaTimeflag=1;
				}
				else  //游戏结束
				{
					for (i=0;i<=LineNumber-1;i++)
						ClearRow(i,data);
					
					data->CurState=R_Init;
					
					Dspl_Score(data->R_Score);
					
					l_mode=Russia_Overstate;
					winShow(data->win);
				}
	 }
	}
	else
	{
		timStart(data->timer);   
		data->russiaTimeflag=1;
	}
	}//end russia_gamestate

	if(l_mode==Russia_Settingstate)
	{
		keysetting.keySetstatus=1;
		dspl_ClearAll();
		//Key_Setshow((Key_Setting *)&keysetting);           
		Key_Setshow(0);
	}
#ifndef GAME_SUBMENU
	if(l_mode==Russia_Initstate && winfocusout==0)
	{
		Russia_Mnushow();
		Russia_MnuItemIcnShow(data);
		if(data->russiaTimeflag==0 && data->R_AnimType == 0)
		{
			timStart(data->timer); 
			data->russiaTimeflag=1;
		}
	}
#endif
}//end function:GameRussia_tim_cb
  
void GameRussiaDestroy (T_MFW_HND own_window)
{
  T_MFW_WIN     * win;
  T_game_russia   * data;

  TRACE_EVENT("GameRussiaDestroy");

  if (own_window)
  {
    win  = ((T_MFW_HDR *)own_window)->data;
    data = (T_game_russia *)win->user;

    if (data)
    {
      win_delete (data->win);
    }
   
	FREE_MEMORY ((void *)data, sizeof (T_game_russia));

    flash_Gamewrite();
    g_game_win = 0;
    g_norejectkeyflag=0;
	//2004/06/01 yhf remove
    //set_backlight_on();   
  }
}

/*************************************************************************
$Description: 检查指定shape的位置合法性
$Arguments:
 @return:
	0x01: left出界
	0x02: right出界
	0x04: top出界
	0x08: bottom出界
	0x10: 已经存在方块
$History:
*******2003/11/24,talcon create
***************************************************************************/
UBYTE CheckShapeLegal(UBYTE Dummy_X,UBYTE Dummy_Y,T_RussiaStyle_Data *pData,T_game_russia *parameter)
{
	UBYTE Result = 0;                             
	UBYTE i;
	int offsetX,offsetY;

	for(i = 0; i<4;i++)
	{
		offsetX = Dummy_X + pData->offset[i].offsetX;
		offsetY = Dummy_Y + pData->offset[i].offsetY;
		if(offsetX <0 )
			Result |= 0x01;
		else if(offsetX >= LINEROW)
			Result |= 0x02;

		if(offsetY < 0)
			Result |= 0x04;
		else if(offsetY >=LineNumber )
			Result |= 0x08;
#ifndef RUSSIA_REMAINCOLOR
		if(parameter->R_Coordinate[offsetX][offsetY] != RussiaBlue)
#else
		if(parameter->R_Coordinate[offsetX][offsetY]&0x80 )
#endif
		{
			Result |= 0x10;
		}
	}
	return Result;
}
/*************************************************************************
$Description: 
$Arguments:
 @return:the number of lines removed
$History:
*******2003/11/24,talcon create
***************************************************************************/
UBYTE removeShape(T_game_russia *parameter)
{
	int nMinY =0,nMaxY=0;
	T_RussiaStyle_Data *pData= 0;
	int i  ;
	if(parameter->R_DummySiteAndStyle[2] > RUSSIASTYTLE || parameter->R_DummySiteAndStyle[2] == 0)
		return	0;
	parameter->R_Count = 0 ;
	pData = &R_StyleData[parameter->R_DummySiteAndStyle[2] -1];
	for(i = 0; i <4 ; i++)
	{
		if(nMinY > pData->offset[i].offsetY)
			nMinY = pData->offset[i].offsetY;
		else if(nMaxY < pData->offset[i].offsetY)
			nMaxY = pData->offset[i].offsetY;
	}
	for(i = nMinY;i<=nMaxY;i++)
	{
		if (MoveRow(parameter->R_DummySiteAndStyle[1]+i,parameter))
			++(parameter->R_Count);
	}
	return parameter->R_Count;
}





















⌨️ 快捷键说明

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