张运涛

c++

   :: 首页 :: 联系 :: 聚合  :: 管理

常用链接

留言簿(4)

搜索

  •  

最新评论

经过昨天到今天的奋斗,经过反复修改,没参考任何代码,核心已经完成。核心代码不过百行,原来好的设计,太重要了!!!!
//判断二个位置是否直线相连
bool CLinkGameLog::NoCorner(const CPoint & pS,const CPoint & pE)
{
    CPoint pitch,temp
=pS;
    CSize area
=pE-pS;
    
if(area.cx==0 && area.cy==0)
        
return true;
    
int len=max(abs(area.cx),abs(area.cy));
    area.cx
/=len;area.cy/=len;
    pitch.x
=area.cx;pitch.y=area.cy;
    temp
+=pitch;
    
while (temp!=pE)
    
{
        
if(m_iBoard[temp.y][temp.x]!=-1)
            
return false;
        temp
+=pitch;
    }

    
return true;
}


//判断二个位置是否一个折点相连 若相连的话cLoc为折点
bool CLinkGameLog::OneCorner(const CPoint & pS,const CPoint & pE,CPoint & cLoc)
{
    CPoint pX,pY;
    pX.x
=pS.x;pX.y=pE.y;
    pY.x
=pE.x;pY.y=pS.y;
    
if(isEmpty(pX) && NoCorner(pS,pX) && NoCorner(pX,pE))
    
{cLoc=pX;return true;}
    
if(isEmpty(pY) && NoCorner(pS,pY) && NoCorner(pY,pE))
    
{cLoc=pY;return true;}
    
return false;
}


//判断二个位置是否二个折点相连 若相连的话cLoc1,cLoc2为折点
bool CLinkGameLog::TwoCorner(const CPoint & pS,const CPoint & pE,CPoint & cLoc1,CPoint & cLoc2,const CPoint & dirP)
{
    CPoint temp
=pS;
    temp
+=dirP;
    
while (isValid(temp) && m_iBoard[temp.y][temp.x]==-1)
    
{
        
if(OneCorner(temp,pE,cLoc2)==true)
        
{
            cLoc1
=temp; 
            
return true;
        }

        temp
+=dirP;
    }

    
return false;
}


//能否连接
bool CLinkGameLog::beCanBreak()
{
    CSize area;
    area
=m_nextLoc-m_preLoc;
    
//点同样的点
    if (area.cx==0 && area.cy==0)
        
return false;

    
if (area.cx!=0 && area.cy!=0)
    
{
        
if(OneCorner(m_preLoc,m_nextLoc,m_pcLoc1)==true)
        
{
            m_icNum
=1;
            
return true;
        }

        
if( TwoCorner(m_preLoc,m_nextLoc,m_pcLoc1,m_pcLoc2,CPoint(-1,0)) ||
            TwoCorner(m_preLoc,m_nextLoc,m_pcLoc1,m_pcLoc2,CPoint( 
1,0)) ||
            TwoCorner(m_preLoc,m_nextLoc,m_pcLoc1,m_pcLoc2,CPoint(
0,1 )) ||
            TwoCorner(m_preLoc,m_nextLoc,m_pcLoc1,m_pcLoc2,CPoint(
0,-1))   )
        
{
            m_icNum
=2;
            
return true;
        }

    }

    
else
    
{
        
if (NoCorner(m_preLoc,m_nextLoc)==true)
        
{
            m_icNum
=0;
            
return true;
        }

        
if (area.cx==0)
        
{
            
if (TwoCorner(m_preLoc,m_nextLoc,m_pcLoc1,m_pcLoc2,CPoint(-1,0)) ||
                TwoCorner(m_preLoc,m_nextLoc,m_pcLoc1,m_pcLoc2,CPoint( 
1,0))  )
            
{
                m_icNum
=2;
                
return true;
            }

        }
 
        
else
        
{
            
if (TwoCorner(m_preLoc,m_nextLoc,m_pcLoc1,m_pcLoc2,CPoint(01)) ||
                TwoCorner(m_preLoc,m_nextLoc,m_pcLoc1,m_pcLoc2,CPoint(
0,-1)) )
            
{
                m_icNum
=2;
                
return true;
            }

        }

    }

    
return false;
}

posted on 2010-05-23 14:11 张运涛 阅读(246) 评论(0)  编辑 收藏 引用 所属分类: Progress

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理