欢迎光临散文网 会员登陆 & 注册

C语言简易围棋

2022-06-10 10:55 作者:yh--123  | 我要投稿

比之前精简了许多,欢迎纠错。

接下来水够字数

#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;//清空棋团 

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;

}

}//标记棋团 

}

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;

}


C语言简易围棋的评论 (共 条)

分享到微博请遵守国家法律