五子棋游戏,如何判断胜负,用VC实现

2025-03-20 09:25:15
推荐回答(1个)
回答(1):

因为判断胜负是在落子后,从落子点坐标开始算起,计算八个方向上,该颜色棋子的最大连珠数,

如果大于等于5,就胜了。

以下是判断的代码。

//返回直线上连珠最大值

int CBoxGameDlg::GetMaxCount(int IForward,int PTI,int PTJ)//判断同一直线上的棋子数

{

    int i,j,changei,changej,num;

    switch(IForward)

 {

        case 0: changei = 1;changej = 0;break;

        case 1: changei = 0;changej = 1;break;

        case 2: changei = 1;changej = 1;break;

        case 3: changei = -1;changej = 1;break;

    }

    i = PTI;j = PTJ;

    do

 {

        if(m_Table[i][j] != m_Table[PTI][PTJ])

  {

   num = Max(abs(PTI - i), abs(PTJ - j));

   break;

  }

        i+=changei;j+=changej;

    }while(!(i < 0 || i > 14 || j < 0 || j > 14));

    i = PTI;j = PTJ;// 计算落子另一边同颜色的棋子数

    do

 {

        if(m_Table[i][j] != m_Table[PTI][PTJ])

  {

   num = num - 1 + Max(abs(PTI - i), abs(PTJ - j));

   break;

  }

  i-=changei;j-=changej;

 }while(!(i < 0 || i > 14 || j < 0 || j > 14));

 return num;

}