c语言编程笔录

您现在的位置是:首页 > C语言 > C#

C#

使用C语言实现三子棋小游戏

荣姿康 2023-08-09C#
前言本文将使用C语言来实现一个简单的三子棋小游戏。三子棋是一种非常经典的棋类游戏,它使用一个3x3的棋盘,并由两个玩家轮流下子。游戏的目标是在棋盘上连成一条直线的三个棋子。代码实现#include#de

前言

本文将使用C语言来实现一个简单的三子棋小游戏。三子棋是一种非常经典的棋类游戏,它使用一个3x3的棋盘,并由两个玩家轮流下子。游戏的目标是在棋盘上连成一条直线的三个棋子。

代码实现

#include 

#define SIZE 3

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

// 打印棋盘
void printBoard(char board[SIZE][SIZE])
{
    for (int i = 0; i < SIZE; i++)
    {
        for (int j = 0; j < SIZE; j++)
        {
            printf("| %c ", board[i][j]);
        }
        printf("|\n");
    }
}

// 判断游戏是否结束
int isGameOver(char board[SIZE][SIZE])
{
    // 判断行
    for (int i = 0; i < SIZE; i++)
    {
        if (board[i][0] != ' ' && board[i][0] == board[i][1] && board[i][1] == board[i][2])
        {
            return 1;
        }
    }

    // 判断列
    for (int j = 0; j < SIZE; j++)
    {
        if (board[0][j] != ' ' && board[0][j] == board[1][j] && board[1][j] == board[2][j])
        {
            return 1;
        }
    }

    // 判断对角线
    if (board[0][0] != ' ' && board[0][0] == board[1][1] && board[1][1] == board[2][2])
    {
        return 1;
    }

    if (board[0][2] != ' ' && board[0][2] == board[1][1] && board[1][1] == board[2][0])
    {
        return 1;
    }

    // 判断是否平局
    for (int i = 0; i < SIZE; i++)
    {
        for (int j = 0; j < SIZE; j++)
        {
            if (board[i][j] == ' ')
            {
                return 0;
            }
        }
    }

    return -1; // 平局
}

// 主函数
int main()
{
    char board[SIZE][SIZE];
    int row, col;
    int currentPlayer = 1;
    int gameOver = 0;

    initializeBoard(board);

    while (!gameOver)
    {
        printf("Player %d's turn:\n", currentPlayer);
        printf("Enter row (0-2): ");
        scanf("%d", &row);
        printf("Enter column (0-2): ");
        scanf("%d", &col);

        if (row < 0 || row >= SIZE || col < 0 || col >= SIZE || board[row][col] != ' ')
        {
            printf("Invalid move. Try again.\n");
            continue;
        }

        board[row][col] = (currentPlayer == 1) ? 'X' : 'O';
        printBoard(board);

        int result = isGameOver(board);
        if (result == 1)
        {
            printf("Player %d wins!\n", currentPlayer);
            gameOver = 1;
        }
        else if (result == -1)
        {
            printf("It's a draw!\n");
            gameOver = 1;
        }

        currentPlayer = (currentPlayer == 1) ? 2 : 1;
    }

    return 0;
}

代码解释和用途

上述代码实现了一个简单的三子棋小游戏。具体来说:

  1. initializeBoard函数用于初始化棋盘,在3x3的棋盘上所有位置都设置为空格。
  2. printBoard函数用于打印当前的棋盘状态。
  3. isGameOver函数用于判断游戏是否结束。它通过检查行、列和对角线来判断是否存在连成一条直线的三个棋子。
  4. 在主函数中,通过循环实现轮流下子的功能。每当一个玩家下子后,会调用printBoard函数打印当前的棋盘状态,并调用isGameOver函数判断游戏是否结束。

总结

通过以上代码的实现,我们成功地实现了一个简单的三子棋小游戏。玩家可以通过输入行和列来下子,并可以看到每个玩家的下子结果。在每次下子后,程序会判断是否有玩家连成一条直线的三个棋子,如果有,则宣布该玩家获胜;如果棋盘已满但没有任何玩家连成一条直线的三个棋子,宣布平局。

该游戏只是一个简单的实现,还可以进一步扩展和改进。例如,可以添加AI玩家,并实现更高级的游戏策略和算法。希望以上代码和解释能帮助您理解和编写自己的三子棋游戏。

文章评论