编写一个c语言实现的五子棋
时间: 2024-05-13 09:16:49 浏览: 7
以下是一个简单的 C 语言实现的五子棋游戏,仅供参考:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_ROW 20
#define MAX_COL 20
#define EMPTY 0
#define PLAYER1 1
#define PLAYER2 2
int board[MAX_ROW][MAX_COL];
int player = PLAYER1;
void initBoard();
void printBoard();
int isValidMove(int row, int col);
int isWin(int player);
int main() {
int row, col;
initBoard();
printBoard();
while (1) {
printf("Player %d, enter row and col (e.g. 3 4): ", player);
scanf("%d %d", &row, &col);
if (isValidMove(row, col)) {
board[row][col] = player;
printBoard();
if (isWin(player)) {
printf("Player %d wins!\n", player);
break;
}
player = (player == PLAYER1) ? PLAYER2 : PLAYER1;
} else {
printf("Invalid move, please try again.\n");
}
}
return 0;
}
void initBoard() {
int i, j;
for (i = 0; i < MAX_ROW; i++) {
for (j = 0; j < MAX_COL; j++) {
board[i][j] = EMPTY;
}
}
}
void printBoard() {
int i, j;
for (i = 0; i < MAX_ROW; i++) {
for (j = 0; j < MAX_COL; j++) {
switch (board[i][j]) {
case EMPTY:
printf("+ ");
break;
case PLAYER1:
printf("O ");
break;
case PLAYER2:
printf("X ");
break;
default:
printf("Invalid board state.\n");
exit(1);
break;
}
}
printf("\n");
}
}
int isValidMove(int row, int col) {
if (row < 0 || row >= MAX_ROW || col < 0 || col >= MAX_COL) {
return 0;
}
if (board[row][col] != EMPTY) {
return 0;
}
return 1;
}
int isWin(int player) {
int i, j, k, count;
// 横向
for (i = 0; i < MAX_ROW; i++) {
count = 0;
for (j = 0; j < MAX_COL; j++) {
if (board[i][j] == player) {
count++;
if (count >= 5) {
return 1;
}
} else {
count = 0;
}
}
}
// 纵向
for (j = 0; j < MAX_COL; j++) {
count = 0;
for (i = 0; i < MAX_ROW; i++) {
if (board[i][j] == player) {
count++;
if (count >= 5) {
return 1;
}
} else {
count = 0;
}
}
}
// 斜向(左上到右下)
for (i = 0; i < MAX_ROW-4; i++) {
for (j = 0; j < MAX_COL-4; j++) {
count = 0;
for (k = 0; k < 5; k++) {
if (board[i+k][j+k] == player) {
count++;
if (count >= 5) {
return 1;
}
} else {
count = 0;
}
}
}
}
// 斜向(右上到左下)
for (i = 0; i < MAX_ROW-4; i++) {
for (j = 4; j < MAX_COL; j++) {
count = 0;
for (k = 0; k < 5; k++) {
if (board[i+k][j-k] == player) {
count++;
if (count >= 5) {
return 1;
}
} else {
count = 0;
}
}
}
}
return 0;
}
```
在该实现中,使用 `board` 数组表示棋盘,使用 `PLAYER1` 和 `PLAYER2` 两个常量表示玩家 1 和玩家 2。`initBoard` 函数初始化棋盘,`printBoard` 函数打印当前棋盘状态。`isValidMove` 函数用于检查当前行和列是否有效,以及当前位置是否已经有棋子。`isWin` 函数用于判断当前玩家是否已经胜利。
在 `main` 函数中,使用一个循环来让两个玩家轮流下棋。每次循环,询问当前玩家输入要下的行和列,如果该位置有效,则在该位置放置当前玩家的棋子,并判断当前玩家是否已经胜利。如果当前玩家胜利,则跳出循环并输出胜利信息。否则,切换到另一个玩家。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)