📄 mmirussia.c
字号:
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 + -