#include <stdio.h> #include <stdbool.h>

#define BOARD_SIZE 15

char board[BOARD_SIZE][BOARD_SIZE]; // 棋盘

void init_board() { // 初始化棋盘 for (int i = 0; i < BOARD_SIZE; i++) { for (int j = 0; j < BOARD_SIZE; j++) { board[i][j] = ' '; } } }

void print_board() { // 打印棋盘 printf(" "); for (int i = 0; i < BOARD_SIZE; i++) { printf("%c ", i + 'A'); } printf("\n"); }

void print_line() { // 打印分割线 printf(" +"); for (int i = 0; i < BOARD_SIZE; i++) { printf("-+"); } printf("\n"); }

void print_row(int row) { // 打印一行 printf("%2d|", row + 1); for (int i = 0; i < BOARD_SIZE; i++) { printf("%c|", board[row][i]); } printf("\n"); }

void print_all() { // 打印整个棋盘 print_board(); for (int i = 0; i < BOARD_SIZE; i++) { print_line(); print_row(i); } print_line(); }

bool is_valid_pos(int x, int y) { // 判断位置是否合法 if (x < 0 || x >= BOARD_SIZE || y < 0 || y >= BOARD_SIZE) { return false; } if (board[x][y] != ' ') { return false; } return true; }

bool is_win(int x, int y, char ch) { // 判断是否胜利 int count = 1; int i, j;

// 横向
for (i = x - 1; i >= 0 && board[i][y] == ch; i--) {
    count++;
}
for (i = x + 1; i < BOARD_SIZE && board[i][y] == ch; i++) {
    count++;
}
if (count >= 5) {
    return true;
}

// 纵向
count = 1;
for (j = y - 1; j >= 0 && board[x][j] == ch; j--) {
    count++;
}
for (j = y + 1; j < BOARD_SIZE && board[x][j] == ch; j++) {
    count++;
}
if (count >= 5) {
    return true;
}

// 斜向
count = 1;
for (i = x - 1, j = y - 1; i >= 0 && j >= 0 && board[i][j] == ch; i--, j--) {
    count++;
}
for (i = x + 1, j = y + 1; i < BOARD_SIZE && j < BOARD_SIZE && board[i][j] == ch; i++, j++) {
    count++;
}
if (count >= 5) {
    return true;
}

// 反斜向
count = 1;
for (i = x - 1, j = y + 1; i >= 0 && j < BOARD_SIZE && board[i][j] == ch; i--, j++) {
    count++;
}
for (i = x + 1, j = y - 1; i < BOARD_SIZE && j >= 0 && board[i][j] == ch; i++, j--) {
    count++;
}
if (count >= 5) {
    return true;
}

return false;

}

void play_game() { // 开始游戏 int x, y; char ch = 'X';

while (true) {
    printf("请 %c 方落子:", ch);
    scanf("%d %d", &x, &y);
    if (!is_valid_pos(x - 1, y - 1)) {
        printf("位置不合法,请重新输入!\n");
        continue;
    }
    board[x - 1][y - 1] = ch;
    print_all();
    if (is_win(x - 1, y - 1, ch)) {
        printf("%c 方胜利!\n", ch);
        break;
    }
    ch = (ch == 'X') ? 'O' : 'X';
}

}

int main() { init_board(); print_all(); play_game(); return 0;

五子棋C语言代码:完整实现及游戏逻辑

原文地址: https://www.cveoy.top/t/topic/jYbw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录