c语言编程笔录

首页 > C语言 > c语言

c语言

C语言代码实现三子棋小游戏

更新时间:2023-08-09

前言

三子棋是一种经典的策略棋类游戏,又称井字棋。本文将使用C语言来实现三子棋小游戏的代码。三子棋游戏由两名玩家轮流在3×3的棋盘上放置自己的棋子,目标是先在横、竖或斜方向上成功连成三个自己的棋子。

代码实现

#include <stdio.h>
#include <stdlib.h>

#define ROWS 3
#define COLS 3

char board[ROWS][COLS];
char player = 'X'; // 当前玩家

void initializeBoard() {
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            board[i][j] = ' ';
        }
    }
}

void printBoard() {
    printf("-------------\n");
    for (int i = 0; i < ROWS; i++) {
        printf("| %c | %c | %c |\n", board[i][0], board[i][1], board[i][2]);
        printf("-------------\n");
    }
}

int isBoardFull() {
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            if (board[i][j] == ' ') {
                return 0; // 棋盘还没有满
            }
        }
    }
    return 1; // 棋盘已满
}

int isGameOver() {
    // 检查行和列
    for (int i = 0; i < ROWS; i++) {
        if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ') {
            return 1; // 有玩家获胜
        }
        if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ') {
            return 1; // 有玩家获胜
        }
    }

    // 检查对角线
    if ((board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ') ||
        (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != ' ')) {
        return 1; // 有玩家获胜
    }

    if (isBoardFull()) {
        return 2; // 平局
    }

    return 0; // 游戏未结束
}

void makeMove(int row, int col) {
    board[row][col] = player;
    if (player == 'X') {
        player = 'O';
    } else {
        player = 'X';
    }
}

int main() {
    int row, col;
    int gameOver = 0;

    initializeBoard();

    while (!gameOver) {
        printBoard();

        printf("玩家 %c,请输入要下棋子的行和列(例如输入1 1表示第一行第一列):", player);
        scanf("%d %d", &row, &col);

        if (row < 0 || row >= ROWS || col < 0 || col >= COLS || board[row][col] != ' ') {
            printf("无效的位置!请重新输入。\n");
            continue;
        }

        makeMove(row, col);

        gameOver = isGameOver();
    }

    printBoard();

    if (gameOver == 1) {
        printf("玩家 %c 获胜!\n", player == 'X' ? 'O' : 'X');
    } else {
        printf("平局!\n");
    }

    return 0;
}

代码解析

这段代码实现了一个三子棋小游戏。首先,我们定义了一个3×3的棋盘,使用字符数组board表示。空格表示空位,'X'表示玩家1放置的棋子,'O'表示玩家2放置的棋子。

函数initializeBoard用于初始化棋盘,将所有位置都设为' '(空格)。

函数printBoard用于打印当前棋盘的状态。

函数isBoardFull用于检查棋盘是否已满。

函数isGameOver用于检查当前游戏是否已经结束。它首先检查每行和每列是否有连成一线的棋子,然后检查对角线是否连成一线。如果有玩家获胜,则返回1;如果棋盘已满,则返回2;游戏未结束则返回0。

函数makeMove用于玩家下棋。它接受两个参数:行和列。根据当前玩家('X'或'O'),它将相应的棋子放置在指定的位置,并交换玩家。

main函数中,我们使用一个循环来获取玩家的输入,并不断更新棋盘状态,直到游戏结束。最后,根据游戏结束的结果打印相应的信息。

总结

通过上述代码的实现,我们成功地创建了一个简单的三子棋小游戏,并实现了棋盘的初始化、打印、判断游戏是否结束以及玩家下棋的功能。通过这个例子可以看出,C语言可以实现简单的游戏逻辑。希望这个示例有助于理解C语言程序设计和游戏开发的基础知识。