基于linux系统c语言五子棋
时间: 2023-07-28 21:07:14 浏览: 116
下面是一个基于 Linux 系统的 C 语言五子棋游戏示例代码,使用 ANSI 转义序列实现彩色输出:
```c
#include <stdio.h>
#include <stdlib.h>
#define BOARD_SIZE 15 // 棋盘大小
int board[BOARD_SIZE][BOARD_SIZE] = {0}; // 棋盘,0 表示空,1 表示黑子,2 表示白子
// 初始化棋盘
void init_board() {
int i, j;
for (i = 0; i < BOARD_SIZE; i++) {
for (j = 0; j < BOARD_SIZE; j++) {
board[i][j] = 0;
}
}
}
// 绘制棋盘
void draw_board() {
int i, j;
printf("\033[2J"); // 清屏
printf("\033[1;1H"); // 光标移动到第一行第一列
printf(" "); // 左上角留空
for (i = 0; i < BOARD_SIZE; i++) {
printf("%2d", i + 1); // 打印列号
}
printf("\n");
for (i = 0; i < BOARD_SIZE; i++) {
printf("%2d", i + 1); // 打印行号
for (j = 0; j < BOARD_SIZE; j++) {
if (board[i][j] == 0) {
printf(" ."); // 空位
} else if (board[i][j] == 1) {
printf(" \033[1;30m@\033[0m"); // 黑子
} else if (board[i][j] == 2) {
printf(" \033[1;37mO\033[0m"); // 白子
}
}
printf("\n");
}
}
// 判断是否胜利
int is_win(int player) {
int i, j, k, l;
for (i = 0; i < BOARD_SIZE; i++) {
for (j = 0; j < BOARD_SIZE; j++) {
if (board[i][j] == player) {
// 判断水平方向
for (k = 0; k < 5 && j + k < BOARD_SIZE && board[i][j + k] == player; k++);
if (k == 5) {
return 1;
}
// 判断垂直方向
for (k = 0; k < 5 && i + k < BOARD_SIZE && board[i + k][j] == player; k++);
if (k == 5) {
return 1;
}
// 判断正斜方向
for (k = 0; k < 5 && i + k < BOARD_SIZE && j + k < BOARD_SIZE && board[i + k][j + k] == player; k++);
if (k == 5) {
return 1;
}
// 判断反斜方向
for (k = 0; k < 5 && i + k < BOARD_SIZE && j - k >= 0 && board[i + k][j - k] == player; k++);
if (k == 5) {
return 1;
}
}
}
}
return 0;
}
// 判断是否平局
int is_draw() {
int i, j;
for (i = 0; i < BOARD_SIZE; i++) {
for (j = 0; j < BOARD_SIZE; j++) {
if (board[i][j] == 0) {
return 0;
}
}
}
return 1;
}
int main() {
int x, y;
int player = 1; // 玩家,默认黑子先行
init_board(); // 初始化棋盘
while (1) {
draw_board(); // 绘制棋盘
if (is_win(player)) {
printf("\033[1;33mPlayer %d wins!\033[0m\n", player);
break;
} else if (is_draw()) {
printf("\033[1;33mDraw game!\033[0m\n");
break;
}
printf("Player %d's turn: ", player);
scanf("%d%d", &x, &y);
if (x < 1 || x > BOARD_SIZE || y < 1 || y > BOARD_SIZE) {
printf("\033[1;31mInvalid position!\033[0m\n");
continue;
}
if (board[x - 1][y - 1] != 0) {
printf("\033[1;31mThis position is occupied!\033[0m\n");
continue;
}
board[x - 1][y - 1] = player;
player = (player == 1) ? 2 : 1; // 切换玩家
}
return 0;
}
```
该示例代码实现了基本的五子棋游戏功能,可以在终端上进行游戏,并支持彩色输出。需要注意的是,该代码仅供参考,实际应用中还需要进行一些改进和优化。
阅读全文