注册 登录
编程论坛 C++教室

请问还有更好的五子棋判断方法吗

伍初 发布于 2011-09-05 17:58, 430 次点击
int CMywuziqi1::Judgment()
{
  UINT count1=0,count2=0;
  for (int i=0;i<15;i++)
  {   if(count1>=5||count2>=5)
      break;
      for (int j=0;j<15;j++)
  {
       if(Board[i][j]==1)
       { count1++;count2=0;}
       if(Board[i][j]==2)
        { count2++;count1=0;}
       if(count1>=5||count2>=5)
         break;
       if(Board[i][j]==0)
       {count2=0;count1=0;}}
}
/////////////////////////

if(count1<5&&count2<5)
{     count1=0;count2=0;
       for (int j=0;j<15;j++)
      {    if(count1>=5||count2>=5)break;
           for (int i=0;i<15;i++)
          {
            if(Board[i][j]==1)
            {
            count1++;count2=0;
            }
            if(Board[i][j]==2)
            {
             count2++;count1=0;
            }
           if(count1>=5||count2>=5)
            break;
           if(Board[i][j]==0)
           {
            count2=0;count1=0;
}}}}
////////////////////////////////

if(count1<5&&count2<5)
{count1=0;count2=0;
      for(int i=4;i<15;i++)
      {if(count1>=5||count2>=5)break;
           for(int j=0,k=i;k>=0,j<=i;j++,k--)
           {
           if(Board[j][k]==1)
           {
             count1++;
              count2=0;
            }
            if(Board[j][k]==2)
            {
             count2++;
             count1=0;
             }
            if(count1>=5||count2>=5)
            break;
            if(Board[j][k]==0)
            {
             count2=0;
             count1=0;
}}}}
///////////////////////////////

if(count1<5&&count2<5)
{count1=0;count2=0;
             for(int i=0;i<15;i++)
            {if(count1>=5||count2>=5) break;
                 for(int j=i,k=14;j<15;j++,k--)
                {
                        if(Board[j][k]==1)
                        { count1++;count2=0;}
                        if(Board[j][k]==2)
                        { count2++;count1=0;}
                        if(count1>=5||count2>=5)
                             break;
                        if(Board[j][k]==0)
                         {count2=0;count1=0;
}}}}
///////////////////////////////
if(count1<5&&count2<5)
{count1=0;count2=0;
                      for(int i=10;i>=0;i--)
                      {if(count1>=5||count2>=5)
                         break;
                              for(int j=0,k=i;j<15,k<15;j++,k++)
                             {
                                     if(Board[k][j]==1)
                                       {
                                           count1++;count2=0;
                                        }
                                      if(Board[k][j]==2)
                                      {
                                           count2++;count1=0;
                                        }
                                       if(count1>=5||count2>=5)
                                          break;
                                       if(Board[k][j]==0)
                                       {
                                         count2=0;count1=0;
}}}}
//////////////////////////
if(count1<5&&count2<5)
{count1=0;count2=0;
            for(int i=0;i<15;i++)
           {if(count1>=5||count2>=5)
                 break;
                     for(int k=0,j=i;j<15;j++,k++)
                    {
                      if(Board[k][j]==1)
                       {
                       count1++;count2=0;
                        }
                       if(Board[k][j]==2)
                        {
                        count2++;count1=0;
                         }
                         if(count1>=5||count2>=5)
                              break;
                        if(Board[k][j]==0)
                         {
                         count2=0;count1=0;
}}}}
if(count1>=5)
return 1;
if(count2>=5)
return 2;
if(count1<5&&count2<5)
return 0;
}
3 回复
#2
yuccn2011-09-06 11:56
你的代码风格太不好了,很少人耐心看的。
五子棋代码 csdn上面有很多,去搜索看看就能找到
#3
popcorn14292011-09-08 21:58
这个写法实在是吓人,我第一次也是这么写的。
使用结构体会方便很多的。
还有,每次都遍历整个数组实在很低效率。
每次只要把玩家刚输入的坐标作为基础进行8个方向的判断即可。
#4
lucky5635912011-09-12 08:16
直接说你的判定方法
1