|
常用链接
留言簿(4)
随笔分类
随笔档案
搜索
最新评论

阅读排行榜
评论排行榜
Powered by: 博客园
模板提供:沪江博客
|
|
|
|
|
发新文章 |
|
|
简单的五子棋判定游戏 注意边界问题即可,5个以上的连续不算赢
#include <iostream>
#include <string>
using namespace std;

int stone[20][20];

bool match(int type,int j,int i)
  {
if (type==1) //横列
 {
for (int k=1;k<5;k++)
 {
if (stone[i][j]!=stone[i][j+k])
return false;
}
if (j<16&&(stone[i][j]==stone[i][j+5]||stone[i][j]==stone[i][j-1]))
return false;
}
else if (type==2) //竖列
 {
for (int k=1;k<5;k++)
 {
if (stone[i][j]!=stone[i+k][j])
return false;
}
if (i<16&&(stone[i][j]==stone[i+5][j]||stone[i][j]==stone[i-1][j]))
return false;
}
else if (type==3) //斜向下列
 {
for (int k=1;k<5;k++)
 {
if (stone[i][j]!=stone[i+k][j+k])
return false;
}
if(i<16&&j<16&&(stone[i][j]==stone[i+5][j+5]||stone[i][j]==stone[i-1][j-1]))
return false;
}
else if (type==4) //斜向上列
 {
for (int k=1;k<5;k++)
 {
if(stone[i][j]!=stone[i-k][j+k])
return false;
}
if (i>4&&j<16&&(stone[i][j]==stone[i-5][j+5]||stone[i][j]==stone[i+1][j-1]))
return false;
}
return true;
}
int main()
  {
int n,wini,winj;
bool win;
scanf("%d",&n);
while (n>0)
 {
memset(stone,0,sizeof(stone));
for (int i=1;i<20;i++)
 {
for (int j=1;j<20;j++)
 {
scanf("%d",&stone[i][j]);
}
}
win=false;
for (int j=1;j<20;j++)
 {
if (win==false)
 {
for (int i=1;i<20;i++)
 {
if (stone[i][j]!=0)
 {
if (j<16&&match(1,j,i))
 {
wini=i;winj=j;win=true;break;
}
if (i<16&&match(2,j,i))
 {
wini=i;winj=j;win=true;break;
}
if (i<16&&j<16&&match(3,j,i))
 {
wini=i;winj=j;win=true;break;
}
if (i>4&&j<16&&match(4,j,i))
 {
wini=i;winj=j;win=true;break;
}
}
}
}
}
if (win)
printf("%d\n%d %d\n",stone[wini][winj],wini,winj);
else
printf("0\n");
n--;
}
}


|
|