C語言簡(jiǎn)易圍棋
比之前精簡(jiǎn)了許多,歡迎糾錯(cuò)。
接下來水夠字?jǐn)?shù)
#include<stdio.h>
#include<windows.h>
const char chess[4]="+@#";
short board[20][20];
bool related[20][20],color=0;
bool eatable(short x,short y)
{
for(short i=1;i<20;i++)
for(short j=1;j<20;j++)
related[i][j]=0;//清空棋團(tuán)?
short temp=board[x][y],cnt=1;
related[x][y]=1;
while(cnt)
{
cnt=0;
for(short i=1;i<20;i++)//第i行?
for(short j=1;j<20;j++)//第j列?
{
if(related[j][i])
{
if(board[j+1][i]==temp&&j+1<20)related[j+1][i]=1,cnt++;
else if(board[j+1][i]==0&&j+1<20)return false;
if(board[j-1][i]==temp&&j-1>0)related[j-1][i]=1,cnt++;
else if(board[j-1][i]==0&&j-1>0)return false;
if(board[j][i+1]==temp&&i+1<20)related[j][i+1]=1,cnt++;
else if(board[j][i+1]==0&&i+1<20)return false;
if(board[j][i-1]==temp&&j-1>0)related[j][i-1]=1,cnt++;
else if(board[j][i-1]==0&&i-1>0)return false;
}
}//標(biāo)記棋團(tuán)?
}
return true;
}
void eat()
{
for(short i=1;i<20;i++)
for(short j=1;j<20;j++)
if(related[i][j])board[i][j]=0;
}
void print()
{
system("cls");
printf("? 1 2 3 4 5 6 7 8 9 10111213141516171819\n");
for(short i=1;i<20;i++)
{
printf("%d",i);
if(i<10)putchar(' ');
for(short j=1;j<20;j++)
printf("%c ",chess[board[j][i]]);
putchar('\n');
}
}
int main()
{
while(1)
{
print();
short x,y;
scanf("%hd%hd",&x,&y);
if(board[x][y])continue;
board[x][y]=color+1;
if(eatable(x,y))
{
board[x][y]=0;
continue;
}
if(x!=19)if(eatable(x+1,y))eat();
if(x!=1)if(eatable(x-1,y))eat();
if(y!=1)if(eatable(x,y-1))eat();
if(y!=19)if(eatable(x,y+1))eat();
color=!color;
}
return 0;
}