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

📄 games_fruit.c

📁 几个嵌入式手机平台小游戏c源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
    }
        *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 + -