📄 games_fruit.c
字号:
}
*cxp=0;
*cyp=0;
*countp=0;
whole_find_flag=0;
return ;
}
/*==================================================================================================
FUNCTION: Fruitnewgame_state
DESCRIPTION:
Description of this specific function.
ARGUMENTS PASSED:
RETURN VALUE:
IMPORTANT NOTES:
================================================================================================*/
static void Fruitnewgame_state(void)
{
if(Fgame_state.Remain_operand==0)
{
Fgame_state.Difficulty++;
Fgame_state.Remain_operand=Fgame_state.Remain_operand+10;
st_time = st_time -1;
ShowScore();
if(st_time <4)
{
ShowGameOver(fruitnewgame_Score);
}
else
{
Fgame_state.Clearance_time=st_time;
}
}
}
/*==================================================================================================
FUNCTION: penDown
DESCRIPTION:
Description of this specific function.
ARGUMENTS PASSED:
RETURN VALUE:
IMPORTANT NOTES:
================================================================================================*/
static OP_BOOLEAN penDown(OP_UINT16 col, OP_UINT16 line)
{
OP_UINT16 clickx ,clicky ;
static OP_UINT16 xi_first;
static OP_UINT16 yj_first;
static OP_UINT16 xi_second ;
static OP_UINT16 yj_second ;
OP_UINT16 fruitnewgame_position_middle;
clickx=col;
clicky=line;
SP_Audio_stop();
if((blinkflag==OP_FALSE)&&(second_press_flag==OP_FALSE))
{
blinkflag=OP_TRUE;
xi_first=clickx;
yj_first=clicky;
if((fruitnewgame_position[xi_first][yj_first] >=FRUITNEWGAME_BLUE_PUTAO)&&(fruitnewgame_position[xi_first][yj_first]<=FRUITNEWGAME_BLUE_APPLE) )
{
fruitnewgame_position[xi_first][yj_first] = fruitnewgame_position[xi_first][yj_first] +10;
DrawSquare(xi_first,yj_first , fruitnewgame_position[xi_first][yj_first]);
}
else if((fruitnewgame_position[xi_first][yj_first] >=FRUITNEWGAME_GREEN_PUTAO)&&(fruitnewgame_position[xi_first][yj_first]<=FRUITNEWGAME_GREEN_APPLE) )
{
End_Hint();
fruitnewgame_position[xi_first][yj_first] = fruitnewgame_position[xi_first][yj_first]+20;
DrawSquare(xi_first,yj_first , fruitnewgame_position[xi_first][yj_first]);
}
ds_refresh();
return OP_TRUE;
}
if((blinkflag == OP_TRUE)&&(second_press_flag==OP_FALSE))
{
Find_Firstpress_Fruit();
if(((abs(clickx-xi_first)==1) &&(clicky == yj_first))||((abs(clicky-yj_first)==1)&&(clickx == xi_first)))
{
xi_second=clickx;
yj_second=clicky;
fruitnewgame_position_middle=fruitnewgame_position[xi_first][yj_first];
fruitnewgame_position[xi_first][yj_first]=fruitnewgame_position[xi_second][yj_second];
fruitnewgame_position[xi_second][yj_second]=fruitnewgame_position_middle;
DrawSquare( xi_first,yj_first, fruitnewgame_position[xi_first][yj_first]);
DrawSquare( xi_second,yj_second, fruitnewgame_position[xi_second][yj_second]);
ds_refresh();
exchange_xi[0]=xi_first;
exchange_yj[0]=yj_first;
fruit_temp[0]=fruitnewgame_position[xi_first][yj_first];
exchange_xi[1]=xi_second;
exchange_yj[1]=yj_second;
fruit_temp[1]=fruitnewgame_position[xi_second][yj_second];
hint_temp1=fruit_temp[0];
hint_temp2=fruit_temp[1];
op_memset(exch_resu , 0x0,sizeof(exch_resu));
OPUS_Start_Timer(OPUS_TIMER_GAME_PEN, 500, 0, PERIODIC);
second_press_flag=OP_TRUE;
OPUS_Stop_Timer(OPUS_TIMER_GAME_TIMING);
timer_num=0;
return OP_TRUE;
}
else
{
Find_Firstpress_Fruit();
blinkflag=OP_FALSE;
return OP_FALSE;
}
}
else
{
blinkflag=OP_FALSE;
return OP_FALSE;
}
}
/*==================================================================================================
FUNCTION: Find_Firstpress_Fruit
Clear away the first presskey.
ARGUMENTS PASSED:
RETURN VALUE:
IMPORTANT NOTES:
================================================================================================*/
static void Find_Firstpress_Fruit(void)
{
OP_UINT16 xi,yj;
for(yj=0;yj<FRUITNEWGAME_LINE_NUM;yj++)
{
for(xi=0;xi<FRUITNEWGAME_COLUMN_NUM;xi++)
{
if((fruitnewgame_position[xi][yj] >=FRUITNEWGAME_PRESS_PUTAO)&&(fruitnewgame_position[xi][yj]<=FRUITNEWGAME_PRESS_APPLE) )
{
fruitnewgame_position[xi][yj] = fruitnewgame_position[xi][yj] -20;
DrawSquare(xi,yj , fruitnewgame_position[xi][yj]);
}
}
}
ds_refresh();
}
/*==================================================================================================
FUNCTION: Find_Hint_Fruit
DESCRIPTION:
Look for the hintkey. Having result is OP_TRUE ,or else OP_FALSE.
ARGUMENTS PASSED:
RETURN VALUE:
IMPORTANT NOTES:
================================================================================================*/
static OP_BOOLEAN Find_Hint_Fruit(void)
{
OP_UINT16 xi,yj;
for(yj=0;yj<FRUITNEWGAME_LINE_NUM;yj++)
{
for(xi=0;xi<FRUITNEWGAME_COLUMN_NUM;xi++)
{
if((fruitnewgame_position[xi][yj] >=FRUITNEWGAME_BLUE_PUTAO)&&(fruitnewgame_position[xi][yj]<=FRUITNEWGAME_BLUE_APPLE) )
{
return OP_TRUE;
}
}
}
return OP_FALSE ;
}
/*==================================================================================================
FUNCTION: Rearrange_Line
DESCRIPTION:
The function of Fruitnewgame_state is to judge the change of state.
ARGUMENTS PASSED:
RETURN VALUE:
IMPORTANT NOTES:
================================================================================================*/
static void Rearrange_Line(OP_UINT16 conti_line_yj,OP_UINT16 conti_column_head_xi,OP_UINT16 conti_column_tail_xi)
{
OP_UINT16 i,j;
OP_UINT16 del_line_num;
OP_UINT16 temp_data;
temp_data = fruitnewgame_position[conti_column_head_xi][conti_line_yj];
del_line_num=conti_column_tail_xi-conti_column_head_xi+1;
if(conti_line_yj<FRUITNEWGAME_LINE_NUM-1)
{
for(j=conti_line_yj+1;j<FRUITNEWGAME_LINE_NUM;j++)
{
for( i=conti_column_head_xi;i<=conti_column_tail_xi;i++)
{
fruitnewgame_position[i][j-1]= fruitnewgame_position[i][j];
DrawSquare(i,(OP_UINT16)(j-1), fruitnewgame_position[i][j-1]);
}
}
}
for(i= conti_column_head_xi;i<=conti_column_tail_xi;i++)
{
fruitnewgame_position[i][FRUITNEWGAME_LINE_NUM-1]=Rand_Create();
DrawSquare(i,(FRUITNEWGAME_LINE_NUM-1), fruitnewgame_position[i][FRUITNEWGAME_LINE_NUM-1]);
}
Fgame_state.Remain_operand--;
if((Fgame_state.Clearance_time+(del_line_num)*2) < st_time)
{
Fgame_state.Clearance_time = (OP_UINT16)(Fgame_state.Clearance_time+(del_line_num)*2);
}
else
{
Fgame_state.Clearance_time = st_time ;
}
Fruitnewgame_state();
fruitnewgame_Score=(OP_UINT16)(CalculateScore((OP_UINT16) del_line_num,temp_data)+fruitnewgame_Score);
}
/*==================================================================================================
FUNCTION: Rearrange_Col
DESCRIPTION:
Description of this specific function.
ARGUMENTS PASSED:
RETURN VALUE:
IMPORTANT NOTES:
================================================================================================*/
static void Rearrange_Col(OP_UINT16 conti_col_xi,OP_UINT16 conti_line_head_yj,OP_UINT16 conti_line_tail_yj)
{
OP_UINT16 j;
OP_UINT16 del_col_num;
OP_UINT16 temp_data;
temp_data = fruitnewgame_position[conti_col_xi][conti_line_head_yj];
del_col_num=conti_line_tail_yj-conti_line_head_yj+1;
if(conti_line_tail_yj+1 <FRUITNEWGAME_LINE_NUM)
{
for( j=conti_line_tail_yj+1;j<FRUITNEWGAME_LINE_NUM;j++)
{
fruitnewgame_position[conti_col_xi][j- del_col_num]= fruitnewgame_position[conti_col_xi][j];
DrawSquare(conti_col_xi, (OP_UINT16)(j- del_col_num), fruitnewgame_position[conti_col_xi][j- del_col_num]);
}
}
for( j= FRUITNEWGAME_COLUMN_NUM-del_col_num;j<FRUITNEWGAME_COLUMN_NUM;j++)
{
fruitnewgame_position[conti_col_xi][j]=Rand_Create();
DrawSquare(conti_col_xi, j, fruitnewgame_position[conti_col_xi][j]);
}
Fgame_state.Remain_operand--;
if((Fgame_state.Clearance_time+del_col_num*2)<st_time)
{
Fgame_state.Clearance_time=(OP_UINT16)(Fgame_state.Clearance_time+del_col_num*2);
}
else
{
Fgame_state.Clearance_time = st_time;
}
Fruitnewgame_state();
fruitnewgame_Score=(OP_UINT16)(CalculateScore((OP_UINT16) del_col_num,temp_data)+fruitnewgame_Score);
}
/*==================================================================================================
FUNCTION: Exchange_Find
DESCRIPTION:
Description of this specific function.
ARGUMENTS PASSED:
RETURN VALUE:
IMPORTANT NOTES:
================================================================================================*/
static void Exchange_Find(OP_UINT16 posi_1)
{
OP_UINT16 xi,yj;
OP_UINT16 temp_val ;
OP_UINT16 up_find_count = 0 ;
OP_UINT16 down_find_count = 0;
OP_UINT16 left_find_count = 0;
OP_UINT16 right_find_count = 0;
OP_UINT16 line_find_count=0;
OP_UINT16 column_find_count=0;
OP_UINT16 clinkx,clinky;
if(posi_1==0)
{
clinkx=exchange_xi[0];
clinky=exchange_yj[0];
}
else
{
clinkx=exchange_xi[1];
clinky=exchange_yj[1];
}
line_blinkflag = OP_FALSE;
column_blinkflag =OP_FALSE;
temp_val = fruitnewgame_position[clinkx][clinky] ;
for(yj= (clinky +1);yj<=FRUITNEWGAME_LINE_NUM ;yj ++)
{
if(temp_val == fruitnewgame_position[clinkx][yj] )
{
up_find_count++;
}
else
{
break;
}
}
exch_resu[0]=up_find_count;
for(yj= (clinky -1);yj>=0 ;yj --)
{
if(temp_val == fruitnewgame_position[clinkx][yj] )
{
down_find_count++;
}
else
{
break;
}
}
exch_resu[1]=down_find_count;
column_find_count=exch_resu[0]+exch_resu[1]+1;
if(column_find_count>=3)
{
column_blinkflag=OP_TRUE;
return;
}
for(xi= (clinkx+1);xi<FRUITNEWGAME_COLUMN_NUM;xi++)
{
if(temp_val == fruitnewgame_position[xi][clinky] )
{
right_find_count++;
}
else
{
break;
}
}
exch_resu[2]=right_find_count;
for(xi= (clinkx -1);xi>=0 ;xi --)
{
if(temp_val == fruitnewgame_position[xi][clinky] )
{
left_find_count++;
}
else
{
break;
}
}
exch_resu[3]=left_find_count;
line_find_count= exch_resu[2]+exch_resu[3]+1;
if(line_find_count >= 3)
{
line_blinkflag=OP_TRUE;
return;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -