连连看消除算法

 

//连连看消除算法:(以具有7行8列的连连看为例)

//根据传入的两个点和BOOL型的二维数组mbGrid[9][10] (TRUE代表有图片,FALSE代表无图片)

//如果两点可以消去函数返回TRUE,否则返回FALSE

BOOL CGameLogic::RemoveAble( int  x1,  int  y1,  int  x2,  int  y2)
{
    
int i,j,k=0;
    
if ( (x1==x2 && (y1==y2-1 || y1==y2+1)) || (y1==y2 && (x1==x2-1 || x1==x2+1)) ) //相邻
    {
        
return TRUE;
    }
 
    
else
    
{
        
//------------------------遍历与第1个点在同一行上的所有点------------------------
        for (i=0; i<10; i++)
        
{
            
if ( !m_bGrid[x1][i] ) //如果点为空(即图片不显示)
            {
                
if (y2 > i) //如果第2点在空点右面(或斜右)
                {
                    
for (j=y2-1; j>=i; j--//遍历第2点到空点所在列对应点间的所有点
                    {
                        
if ( m_bGrid[x2][j] ) //如果有一个非空则跳出
                        {
                            k 
= 0;
                            
break;
                        }

                        k 
= 1//k=1表示通过第一步验证
                    }

                    
if (k == 1)
                    
{
                        
if (y1 > i) //第1点在空点右面或斜右
                        {
                            
for (j=y1-1; j>=i; j--//遍历第1点到空点间的所有点
                            {
                                
if ( m_bGrid[x1][j] )
                                
{
                                    k 
= 0;
                                    
break;
                                }

                                k 
= 2//k=2表示通过第2步验证
                            }

                        }

                        
else if (y1 < i) //空点在第1点下面
                        {
                            
for (j=y1+1; j<=i; j++)
                            
{
                                
if ( m_bGrid[x1][j] )
                                
{
                                    k 
= 0;
                                    
break;
                                }

                                k 
= 2;
                            }

                        }

                    }

                }

                
else if (y2 < i)
                
{
                    
for (j=y2+1; j<=i; j++)
                    
{
                        
if ( m_bGrid[x2][j] )
                        
{
                            k 
= 0;
                            
break;
                        }

                        k 
= 1;
                    }

                    
if (k == 1)
                    
{
                        
if (y1 > i) //第1点在空点右面或斜右
                        {
                            
for (j=y1-1; j>=i; j--//遍历第1点到空点间的所有点
                            {
                                
if ( m_bGrid[x1][j] )
                                
{
                                    k 
= 0;
                                    
break;
                                }

                                k 
= 2//k=2表示通过第2步验证
                            }

                        }

                        
else if (y1 < i) //空点在第1点下面
                        {
                            
for (j=y1+1; j<=i; j++)
                            
{
                                
if ( m_bGrid[x1][j] )
                                
{
                                    k 
= 0;
                                    
break;
                                }

                                k 
= 2;
                            }

                        }

                    }

                }

                
else if (y2 == i)
                
{
                    
if (y1 > i) //第1点在空点右面或斜右
                    {
                        
for (j=y1-1; j>=i; j--//遍历第1点到空点间的所有点
                        {
                            
if ( m_bGrid[x1][j] )
                            
{
                                k 
= 0;
                                
break;
                            }

                            k 
= 2//k=2表示通过第2步验证
                        }

                    }

                    
else if (y1 < i) //空点在第1点下面
                    {
                        
for (j=y1+1; j<=i; j++)
                        
{
                            
if ( m_bGrid[x1][j] )
                            
{
                                k 
= 0;
                                
break;
                            }

                            k 
= 2;
                        }

                    }

                }

            }
 
            
if (k == 2)
            
{
                
if (x1 > x2) //第1点在第2点下面或斜下
                {
                    
for (j=x1; j>=x2+1; j--)
                    
{
                        
if ( m_bGrid[j][i] )
                        
{
                            k 
= 0;
                            
break;
                        }

                        k 
= 3;
                    }

                }

                
else if (x1 < x2)
                
{
                    
for (j=x1; j<=x2-1; j++)
                    
{
                        
if ( m_bGrid[j][i] )
                        
{
                            k 
= 0;
                            
break;
                        }

                        k 
= 3;
                    }

                }

                
else if (x1 == x2)
                
{
                    
return TRUE;
                }

            }

            
if (k == 3)
                
return TRUE;
        }


        
//-----------------遍历与第一个点在同一列上的所有点---------------------
        for (i=0; i<9; i++)
        
{
            
if ( !m_bGrid[i][y1] )
            
{
                
if (x2 > i)
                
{
                    
for (j=x2-1; j>=i; j--)
                    
{
                        
if ( m_bGrid[j][y2] )
                        
{
                            k 
= 0;
                            
break;
                        }

                        k 
= 1;
                    }

                    
if (k == 1)
                    
{
                        
if (x1 > i)
                        
{
                            
for (j=x1-1; j>=i; j--)
                            
{
                                
if ( m_bGrid[j][y1] )
                                
{
                                    k 
= 0;
                                    
break;
                                }

                                k 
= 2;
                            }

                        }

                        
else if (x1 < i)
                        
{
                            
for (j=x1+1; j<=i; j++)
                            
{
                                
if ( m_bGrid[j][y1] )
                                
{
                                    k 
= 0;
                                    
break;
                                }

                                k 
= 2;
                            }

                        }

                    }

                }

                
else if (x2 < i)
                
{
                    
for (j=x2+1; j<=i; j++)
                    
{
                        
if ( m_bGrid[j][y2] )
                        
{
                            k 
= 0;
                            
break;
                        }

                        k 
= 1;
                    }

                    
if (k == 1)
                    
{
                        
if (x1 > i)
                        
{
                            
for (j=x1-1; j>=i; j--)
                            
{
                                
if ( m_bGrid[j][y1] )
                                
{
                                    k 
= 0;
                                    
break;
                                }

                                k 
= 2;
                            }

                        }

                        
else if (x1 < i)
                        
{
                            
for (j=x1+1; j<=i; j++)
                            
{
                                
if ( m_bGrid[j][y1] )
                                
{
                                    k 
= 0;
                                    
break;
                                }

                                k 
= 2;
                            }

                        }

                    }

                }

                
else if (x2 == i)
                
{
                    
if (x1 > i)
                    
{
                        
for (j=x1-1; j>=i; j--)
                        
{
                            
if ( m_bGrid[j][y1] )
                            
{
                                k 
= 0;
                                
break;
                            }

                            k 
= 2;
                        }

                    }

                    
else if (x1 < i)
                    
{
                        
for (j=x1+1; j<=i; j++)
                        
{
                            
if ( m_bGrid[j][y1] )
                            
{
                                k 
= 0;
                                
break;
                            }

                            k 
= 2;
                        }

                    }

                }

            }

            
if (k == 2)
            
{
                
if (y1 > y2)
                
{
                    
for (j=y1; j>=y2+1; j--)
                    
{
                        
if ( m_bGrid[i][j] )
                        
{
                            k 
= 0;
                            
break;
                        }

                        k 
= 3;
                    }

                }

                
else if (y1 < y2)
                
{
                    
for (j=y1; j<=y2-1; j++)
                    
{
                        
if ( m_bGrid[i][j] )
                        
{
                            k 
= 0;
                            
break;
                        }

                        k 
= 3;
                    }

                }

                
else if (y1 == y2)
                
{
                    
return TRUE;
                }

            }

            
if (k == 3)
                
return TRUE;
        }

    }

    
return FALSE;
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值