用c++写一个五子棋程序
时间: 2023-05-16 22:06:08 浏览: 154
好的,我可以为您提供一个简单的五子棋程序的代码,如下所示:
#include <stdio.h>
#include <stdlib.h>
#define ROWS 15
#define COLS 15
char board[ROWS][COLS]; // 棋盘
void init_board() // 初始化棋盘
{
int i, j;
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
board[i][j] = '+';
}
}
}
void print_board() // 打印棋盘
{
int i, j;
printf(" ");
for (i = 0; i < COLS; i++) {
printf("%d ", i + 1);
}
printf("\n");
for (i = 0; i < ROWS; i++) {
printf("%d ", i + 1);
for (j = 0; j < COLS; j++) {
printf("%c ", board[i][j]);
}
printf("\n");
}
}
int is_win(char ch) // 判断是否胜利
{
int i, j, k;
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
if (board[i][j] == ch) {
for (k = 1; k < 5; k++) {
if (i + k < ROWS && board[i + k][j] == ch && i + k - 4 >= 0 && board[i + k - 1][j] == ch && board[i + k - 2][j] == ch && board[i + k - 3][j] == ch) {
return 1;
}
if (j + k < COLS && board[i][j + k] == ch && j + k - 4 >= 0 && board[i][j + k - 1] == ch && board[i][j + k - 2] == ch && board[i][j + k - 3] == ch) {
return 1;
}
if (i + k < ROWS && j + k < COLS && board[i + k][j + k] == ch && i + k - 4 >= 0 && j + k - 4 >= 0 && board[i + k - 1][j + k - 1] == ch && board[i + k - 2][j + k - 2] == ch && board[i + k - 3][j + k - 3] == ch) {
return 1;
}
if (i + k < ROWS && j - k >= 0 && board[i + k][j - k] == ch && i + k - 4 >= 0 && j - k + 4 < COLS && board[i + k - 1][j - k + 1] == ch && board[i + k - 2][j - k + 2] == ch && board[i + k - 3][j - k + 3] == ch) {
return 1;
}
}
}
}
}
return 0;
}
int main()
{
int x, y, i = 0;
char ch = 'X';
init_board();
print_board();
while (1) {
printf("请 %c 方输入坐标(x,y):", ch);
scanf("%d,%d", &x, &y);
if (x < 1 || x > ROWS || y < 1 || y > COLS) {
printf("坐标不合法,请重新输入!\n");
continue;
}
if (board[x - 1][y - 1] != '+') {
printf("该位置已经有棋子,请重新输入!\n");
continue;
}
board[x - 1][y - 1] = ch;
print_board();
if (is_win(ch)) {
printf("%c 方获胜!\n", ch);
break;
}
i++;
if (i == ROWS * COLS) {
printf("平局!\n");
break;
}
ch = ch == 'X' ? 'O' : 'X';
}
return 0;
}
希望这个程序能够帮助到您!