写一个C++ 五子棋代码
时间: 2023-06-03 12:05:49 浏览: 123
好的,以下是基于C语言的五子棋代码:
#include<stdio.h>
#include<stdlib.h>
#define ROW 15
#define COLUMN 15
// 枚举黑白棋子
enum Chess { BLANK, BLACK, WHITE };
// 棋盘初始化
void InitChessBoard(enum Chess chessBoard[][COLUMN]);
// 打印当前棋盘
void PrintChessBoard(enum Chess chessBoard[][COLUMN]);
// 判断下的棋子是否合法
int IsLegal(enum Chess chessBoard[][COLUMN], int x, int y, enum Chess chess);
// 判断胜负
int IsWinning(enum Chess chessBoard[][COLUMN], int x, int y, enum Chess chess);
// 主函数
int main() {
enum Chess chessBoard[ROW][COLUMN];
int x = -1, y = -1, flag = 0;
InitChessBoard(chessBoard);
PrintChessBoard(chessBoard);
while (1) {
if (flag % 2 == 0) {// 玩家1下子
printf("请玩家1输入落子的行数和列数,用空格隔开:");
scanf_s("%d %d", &x, &y);
if (IsLegal(chessBoard, x, y, BLACK)) {
chessBoard[x][y] = BLACK;
PrintChessBoard(chessBoard);
if (IsWinning(chessBoard, x, y, BLACK)) {
printf("恭喜玩家1获得胜利\n");
break;
} else {
flag++;
continue;
}
} else {
printf("此处不允许下棋,请重新输入\n");
continue;
}
} else {// 玩家2下子
printf("请玩家2输入落子的行数和列数,用空格隔开:");
scanf_s("%d %d", &x, &y);
if (IsLegal(chessBoard, x, y, WHITE)) {
chessBoard[x][y] = WHITE;
PrintChessBoard(chessBoard);
if (IsWinning(chessBoard, x, y, WHITE)) {
printf("恭喜玩家2获得胜利\n");
break;
} else {
flag++;
continue;
}
} else {
printf("此处不允许下棋,请重新输入\n");
continue;
}
}
}
system("pause");
return 0;
}
void InitChessBoard(enum Chess chessBoard[][COLUMN]) {
int i, j;
for (i = 0; i < ROW; i++) {
for (j = 0; j < COLUMN; j++) {
chessBoard[i][j] = BLANK;
}
}
}
void PrintChessBoard(enum Chess chessBoard[][COLUMN]) {
int i, j;
printf(" ");
for (i = 0; i < COLUMN; i++) {
printf("%d ", i);
}
printf("\n");
for (i = 0; i < ROW; i++) {
printf("%d ", i);
for (j = 0; j < COLUMN; j++) {
if (chessBoard[i][j] == BLACK) {
printf("●");
} else if (chessBoard[i][j] == WHITE) {
printf("○");
} else {
printf(" ");
}
}
printf("\n");
}
}
int IsLegal(enum Chess chessBoard[][COLUMN], int x, int y, enum Chess chess) {
if (x < 0 || x > ROW - 1 || y < 0 || y > COLUMN - 1) {// 是否越界
return 0;
}
if (chessBoard[x][y] != BLANK) {// 是否已经有棋子
return 0;
}
if (chess == BLACK && IsWinning(chessBoard, x, y, BLACK) || chess == WHITE && IsWinning(chessBoard, x, y, WHITE)) {// 是否已经结束
return 0;
}
return 1;
}
int IsWinning(enum Chess chessBoard[][COLUMN], int x, int y, enum Chess chess) {
int i, j, count = 0;
// 判断当前落子是否连成五子
for (i = x - 4; i <= x;