C语言实现简单五子棋游戏

这篇博客将介绍如何使用C语言编写一个简单的五子棋游戏。代码中包含详细的注释,方便大家理解。

代码示例

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

#define BOARD_SIZE 15
#define EMPTY 0
#define PLAYER1 1
#define PLAYER2 2

int board[BOARD_SIZE][BOARD_SIZE];

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

// 打印棋盘
void printBoard() {
    for (int i = 0; i < BOARD_SIZE; i++) {
        for (int j = 0; j < BOARD_SIZE; j++) {
            if (board[i][j] == EMPTY) {
                printf(' -');
            } else if (board[i][j] == PLAYER1) {
                printf(' X');
            } else if (board[i][j] == PLAYER2) {
                printf(' O');
            }
        }
        printf('
');
    }
}

// 判断落子是否合法
bool isMoveValid(int row, int col) {
    if (row < 0 || row >= BOARD_SIZE || col < 0 || col >= BOARD_SIZE || board[row][col] != EMPTY) {
        return false;
    }
    return true;
}

// 判断游戏是否结束
bool isGameOver(int player) {
    // 检查横向是否有五子连珠
    for (int i = 0; i < BOARD_SIZE; i++) {
        for (int j = 0; j < BOARD_SIZE - 4; j++) {
            if (board[i][j] == player &&
                board[i][j + 1] == player &&
                board[i][j + 2] == player &&
                board[i][j + 3] == player &&
                board[i][j + 4] == player) {
                return true;
            }
        }
    }
    // 检查纵向是否有五子连珠
    for (int i = 0; i < BOARD_SIZE - 4; i++) {
        for (int j = 0; j < BOARD_SIZE; j++) {
            if (board[i][j] == player &&
                board[i + 1][j] == player &&
                board[i + 2][j] == player &&
                board[i + 3][j] == player &&
                board[i + 4][j] == player) {
                return true;
            }
        }
    }
    // 检查对角线是否有五子连珠(正斜线)
    for (int i = 0; i < BOARD_SIZE - 4; i++) {
        for (int j = 0; j < BOARD_SIZE - 4; j++) {
            if (board[i][j] == player &&
                board[i + 1][j + 1] == player &&
                board[i + 2][j + 2] == player &&
                board[i + 3][j + 3] == player &&
                board[i + 4][j + 4] == player) {
                return true;
            }
        }
    }
    // 检查对角线是否有五子连珠(反斜线)
    for (int i = 0; i < BOARD_SIZE - 4; i++) {
        for (int j = 4; j < BOARD_SIZE; j++) {
            if (board[i][j] == player &&
                board[i + 1][j - 1] == player &&
                board[i + 2][j - 2] == player &&
                board[i + 3][j - 3] == player &&
                board[i + 4][j - 4] == player) {
                return true;
            }
        }
    }
    return false;
}

// 游戏主循环
void playGame() {
    int player = PLAYER1;
    int row, col;
    bool validMove;
    bool gameOver = false;
    
    initializeBoard();
    
    while (!gameOver) {
        printf('Player %d's turn. Enter row and column: ', player);
        scanf('%d %d', &row, &col);
        
        validMove = isMoveValid(row, col);
        
        if (validMove) {
            board[row][col] = player;
            printBoard();
            gameOver = isGameOver(player);
            
            if (gameOver) {
                printf('Player %d wins!
', player);
            } else {
                player = (player == PLAYER1) ? PLAYER2 : PLAYER1;
            }
        } else {
            printf('Invalid move. Try again.
');
        }
    }
}

int main() {
    printf('Welcome to Five in a Row!
');
    playGame();
    return 0;
}

代码解析

该代码实现了一个简单的命令行版本的五子棋游戏,支持两个玩家进行对战。

  • 首先,我们定义了一些常量和全局变量,包括棋盘大小、玩家标识符和棋盘数组。
  • initializeBoard() 函数用于初始化棋盘,将所有位置设置为EMPTY。
  • printBoard() 函数用于打印当前棋盘状态。
  • isMoveValid() 函数用于判断玩家的落子是否合法,即是否在棋盘范围内且该位置为空。
  • isGameOver() 函数用于判断游戏是否结束,检查当前玩家是否已经连成五子。
  • playGame() 函数是游戏的主循环,控制玩家轮流落子,并判断游戏是否结束。

总结

这只是一个简单的五子棋游戏实现,你可以在此基础上进行扩展,例如:

  • 添加人机对战功能
  • 实现更美观的图形界面
  • 记录游戏历史和统计数据

希望这篇博客能够帮助你理解如何使用C语言编写一个简单的五子棋游戏!

C语言五子棋游戏代码示例 - 附源码解析

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

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