C语言五子棋代码

  • 格式:doc
  • 大小:27.50 KB
  • 文档页数:5

//五子棋 小游戏 纯C语言代码

#include

#define N 14

char state[N][N];

void init(void);

void printState(void);

bool isWin(bool isBlack,int x,int y);

bool isLevelWin(bool isBlack,int x,int y);

bool isVerticalWin(bool isBlack,int x,int y);

bool isLeftInclinedWin(bool isBlack,int x,int y);

bool isRightObliqueWin(bool isBlack,int x,int y);

bool isWin(bool isBlack,int x,int y)//是否有获胜

{

return isLevelWin(isBlack,x,y)

||isVerticalWin(isBlack,x,y)

||isLeftInclinedWin(isBlack,x,y)

||isRightObliqueWin(isBlack,x,y);

}

bool isLevelWin(bool isBlack,int x,int y)//确定水平直线上是否有五子连珠

{

char c = isBlack ? '@':'O';

int count;

while(y>0 && state[x][y] == c)

{

y--;

}

count =0;

if(state[x][y] == c) count = 1;

y++;

while(y < N && state[x][y] == c)

{

count++;

if(count == 5)

{

return true;

}

y++;

}

return false; }

bool isVerticalWin(bool isBlack,int x,int y)//确定竖直直线是否有五子连珠

{

char c = isBlack ? '@':'O';

int count;

while(x>0 && state[x][y] == c)

{

x--;

}

count =0;

if(state[x][y] == c) count = 1;

x++;

while(x < N && state[x][y] == c)

{

count++;

if(count == 5)

{

return true;

}

x++;

}

return false;

}

bool isLeftInclinedWin(bool isBlack,int x,int y)//确定左斜线是否有五子连珠

{

char c = isBlack ? '@':'O';

int count;

while(x>0 && y>0 && state[x][y] == c)

{

y--;

x--;

}

count =0;

if(state[x][y] == c) count = 1;

x++;

y++;

while(x < N && y < N && state[x][y] == c)

{ count++;

if(count == 5)

{

return true;

}

x++;

y++;

}

return false;

}

bool isRightObliqueWin(bool isBlack,int x,int y)//确定右斜线是否有五子连珠

{

char c = isBlack ? '@':'O';

int count;

while(x>0 && y

{

y++;

x--;

}

count =0;

if(state[x][y] == c) count = 1;

x++;

y--;

while(x < N && y >= 0 && state[x][y] == c)

{

count++;

if(count == 5)

{

return true;

}

x++;

y--;

}

return false;

}

void init(void)//开局初始化数组

{

int i,j;

for(i=0;i

{

for(j=0;j

state[i][j] = '*';

}

}

}

void printState(void)//打印棋盘

{

int i,j;

printf("%3c",' ');

for(i=0;i

printf("%3d",i);

printf("\n");

for(i=0;i

{

printf("%3d",i);

for(j=0;j

{

printf("%3c",state[i][j]);

}

printf("\n");

}

}

int main(void)

{

int x,y;

bool isBlack = true;

init();

printf("五子棋小游戏\n\n@代表黑子,0代表白子,*代表棋盘空白\n");

printf("------------------------------------------------------\n");

printState();

while(1)

{

printf("请 %s 方走棋:\n",(isBlack?"黑":"白"));//请黑(白)方走棋的说明

printf("输入所下位置坐标,如: 1-2\n");//走棋方法示例

scanf("%d-%d",&x,&y);

if(state[x][y]=='@' || state[x][y]=='O')//若此点已经存在棋子,则重新下一步棋在别处

{

printf("this position to have pieces\n");

continue;

} state[x][y] = (isBlack?'@':'O');//规定@代表黑子,0代表白子

printState();//打印棋盘情况

if(isWin(isBlack,x,y))//每下一步棋,判断一次是否有人获胜

{

printf("%s 方胜利\n",(isBlack?"黑":"白"));

break;

}

isBlack = !isBlack;

}

}