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;
}
}