用C写一个10*10的五子棋游戏
时间: 2024-04-12 17:31:27 浏览: 1
好的,我可以帮你编写一个简单的10x10五子棋游戏程序。以下是使用C语言编写的程序代码:
```c
#include <stdio.h>
#define SIZE 10
char board[SIZE][SIZE];
void initializeBoard() {
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
board[i][j] = '-';
}
}
}
void printBoard() {
printf(" ");
for (int i = 0; i < SIZE; i++) {
printf("%d ", i);
}
printf("\n");
for (int i = 0; i < SIZE; i++) {
printf("%d ", i);
for (int j = 0; j < SIZE; j++) {
printf("%c ", board[i][j]);
}
printf("\n");
}
}
int isValidMove(int row, int col) {
if (row >= 0 && row < SIZE && col >= 0 && col < SIZE && board[row][col] == '-') {
return 1;
}
return 0;
}
int isGameOver(int row, int col, char symbol) {
int count;
// 检查水平方向
count = 1;
for (int i = col - 1; i >= 0; i--) {
if (board[row][i] == symbol) {
count++;
} else {
break;
}
}
for (int i = col + 1; i < SIZE; i++) {
if (board[row][i] == symbol) {
count++;
} else {
break;
}
}
if (count >= 5) {
return 1;
}
// 检查垂直方向
count = 1;
for (int i = row - 1; i >= 0; i--) {
if (board[i][col] == symbol) {
count++;
} else {
break;
}
}
for (int i = row + 1; i < SIZE; i++) {
if (board[i][col] == symbol) {
count++;
} else {
break;
}
}
if (count >= 5) {
return 1;
}
// 检查左上到右下方向
count = 1;
for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {
if (board[i][j] == symbol) {
count++;
} else {
break;
}
}
for (int i = row + 1, j = col + 1; i < SIZE && j < SIZE; i++, j++) {
if (board[i][j] == symbol) {
count++;
} else {
break;
}
}
if (count >= 5) {
return 1;
}
// 检查右上到左下方向
count = 1;
for (int i = row - 1, j = col + 1; i >= 0 && j < SIZE; i--, j++) {
if (board[i][j] == symbol) {
count++;
} else {
break;
}
}
for (int i = row + 1, j = col - 1; i < SIZE && j >= 0; i++, j--) {
if (board[i][j] == symbol) {
count++;
} else {
break;
}
}
if (count >= 5) {
return 1;
}
return 0;
}
int makeMove(int row, int col, char symbol) {
if (isValidMove(row, col)) {
board[row][col] = symbol;
return 1;
}
return 0;
}
int main() {
int row, col;
char player1 = 'X';
char player2 = 'O';
char currentPlayer = player1;
initializeBoard();
printf("Welcome to 10x10 Gomoku Game!\n");
printf("Player 1: X\nPlayer 2: O\n");
while (1) {
printf("\nCurrent board:\n");
printBoard();
printf("\nPlayer %c's turn. Enter row and column to make a move: ", currentPlayer);
scanf("%d %d", &row, &col);
if (makeMove(row, col, currentPlayer)) {
if (isGameOver(row, col, currentPlayer)) {
printf("\nPlayer %c wins!\n", currentPlayer);
break;
}
if (currentPlayer == player1) {
currentPlayer = player2;
} else {
currentPlayer = player1;
}
} else {
printf("\nInvalid move. Try again.\n");
}
}
return 0;
}
```
运行这个程序,它会在控制台上显示一个10x10的五子棋游戏界面。两名玩家轮流输入行和列来落子,输入的坐标必须在合法的范围内且没有被占据。当有一名玩家连成5个棋子时,游戏结束并宣布胜利者。
希望这个答案能够帮到你!如果你还有其他问题,请随时提问。