用C语言写一个五子棋的游戏
时间: 2024-06-17 15:02:26 浏览: 18
用C语言编写五子棋游戏可以分为以下几个步骤:
1. 创建棋盘:使用二维数组表示棋盘,每个格子可以为空、黑子或白子。
2. 绘制棋盘:使用循环遍历二维数组,根据格子的状态打印相应的字符,形成可视化的棋盘。
3. 下棋操作:通过输入坐标来确定落子位置,根据当前玩家的不同,将对应的格子状态改为黑子或白子。
4. 判断胜负:每次下棋后,判断是否有五子连成一线,如果有则游戏结束,当前玩家获胜。
5. 切换玩家:每次下棋后,切换当前玩家,使得双方轮流下棋。
6. 游戏循环:通过循环不断进行下棋操作,直到有一方获胜或者平局。
下面是一个简单的示例代码:
```c
#include <stdio.h>
#define SIZE 15
char board[SIZE][SIZE];
void initBoard() {
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
board[i][j] = ' ';
}
}
}
void drawBoard() {
printf(" ");
for (int i = 0; i < SIZE; i++) {
printf("%2d", i);
}
printf("\n");
for (int i = 0; i < SIZE; i++) {
printf("%2d", i);
for (int j = 0; j < SIZE; j++) {
printf(" %c", board[i][j]);
}
printf("\n");
}
}
int checkWin(int x, int y) {
char player = board[x][y];
int count;
// 横向判断
count = 1;
for (int i = y - 1; i >= 0 && board[x][i] == player; i--) {
count++;
}
for (int i = y + 1; i < SIZE && board[x][i] == player; i++) {
count++;
}
if (count >= 5) {
return 1;
}
// 纵向判断
count = 1;
for (int i = x - 1; i >= 0 && board[i][y] == player; i--) {
count++;
}
for (int i = x + 1; i < SIZE && board[i][y] == player; i++) {
count++;
}
if (count >= 5) {
return 1;
}
// 左上到右下判断
count = 1;
for (int i = x - 1, j = y - 1; i >= 0 && j >= 0 && board[i][j] == player; i--, j--) {
count++;
}
for (int i = x + 1, j = y + 1; i < SIZE && j < SIZE && board[i][j] == player; i++, j++) {
count++;
}
if (count >= 5) {
return 1;
}
// 右上到左下判断
count = 1;
for (int i = x - 1, j = y + 1; i >= 0 && j < SIZE && board[i][j] == player; i--, j++) {
count++;
}
for (int i = x + 1, j = y - 1; i < SIZE && j >= 0 && board[i][j] == player; i++, j--) {
count++;
}
if (count >= 5) {
return 1;
}
return 0;
}
int main() {
int x, y;
int currentPlayer = 1;
initBoard();
while (1) {
drawBoard();
printf("Player %d's turn, please enter the coordinates (x y): ", currentPlayer);
scanf("%d %d", &x, &y);
if (x < 0 || x >= SIZE || y < 0 || y >= SIZE || board[x][y] != ' ') {
printf("Invalid move, please try again.\n");
continue;
}
board[x][y] = currentPlayer == 1 ? 'X' : 'O';
if (checkWin(x, y)) {
printf("Player %d wins!\n", currentPlayer);
break;
}
currentPlayer = currentPlayer == 1 ? 2 : 1;
}
return 0;
}
```
相关推荐
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.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)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)