~井字棋游戏~(C语言)~

~井字棋游戏~(C语言)~_第1张图片

先赞后看,不足指正!

这将对我有很大的帮助!

阿哇旭的主页:Awas-Home page

目录

引言 

编译环境

游戏介绍

游戏规则

游戏实现

创建初始化棋盘

打印棋盘

决定先手 

玩家下棋

判断胜负

游戏循环

完整代码

结语


引言 

        相信大家在小时候都玩过井字棋吧,在这里,我们将用到已经学习的知识,来实现一个简单井字棋游戏的编写。

        编写游戏所需知识 (随机数的生成、数组) 参考:猜数字游戏。

        那么,话不多说,我们一起来看看吧!

编译环境

        集成开发环境(IDE):Visual Studio 2022,若要使用scanf函数,请添加如下注释:

#define _CRT_SECURE_NO_WARNINGS
//忽略scanf函数的安全警告

游戏介绍

        井字棋是一种经典的二人游戏,玩家轮流在 3x3 的棋盘上下棋,首先在横向、纵向或对角线上连成一条线的玩家获胜。

游戏规则

1.井字棋棋盘是一个 3x3 的网格。

2.两名玩家轮流在空白的格子上下棋,一名玩家使用"X",另一名玩家使用"O"。

3.首先在横向、纵向或对角线上连成一条线的玩家获胜。

4.如果所有格子都下满了,且没有玩家连成一条线, 则游戏结束视为平局。

游戏实现

1.创建初始化棋盘:创建一个3x3的二维数组来表示棋盘,用于存储玩家下棋的情况。

2.打印棋盘:编写函数来打印当前棋盘的状态,以便玩家可以看到棋盘情况。

3.决定先手:利用随机数来决定玩家的下棋先后顺序。
4.玩家下棋:编写函数来接受玩家的输入,并在棋盘上放置相对应的棋子。
5.判断胜负:编写函数来检视棋盘并判断是否有玩家获胜或者游戏结束视为平局。
6.游戏循环:编写游戏主循环,使得玩家可以轮流下棋,直到游戏结束。

创建初始化棋盘

代码实现

char board[3][3];  // 井字棋棋盘

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

打印棋盘

代码实现

// 打印井字棋棋盘
void printBoard() {
    printf("\n");
    printf("   | 0 | 1 | 2\n");
    printf("---|---|---|---\n");
    printf(" 0 | %c | %c | %c \n", board[0][0], board[0][1], board[0][2]);
    printf("---|---|---|---\n");
    printf(" 1 | %c | %c | %c \n", board[1][0], board[1][1], board[1][2]);
    printf("---|---|---|---\n");
    printf(" 2 | %c | %c | %c \n", board[2][0], board[2][1], board[2][2]);
    printf("\n");
}

效果展示

~井字棋游戏~(C语言)~_第2张图片

决定先手 

代码实现

// 通过判断随机数的奇偶性来决定先后顺序
    srand((unsigned int)time(0)); // 使用当前时间作为随机数种子 头文件 
    if (rand() % 2 == 0) {
        currentPlayer = 'X';
        printf("玩家 X 先手\n");
    }
    else {
        currentPlayer = 'O';
        printf("玩家 O 先手\n");
    }

玩家下棋

代码实现

for (int i = 0; i < 9; i++) {
        printf("当前棋盘状态:\n");
        printBoard();
        printf("玩家 %c,请输入你要下棋的位置(行 列):", currentPlayer);
        scanf("%d %d", &row, &col);

        // 检查输入是否合法
        if (row < 0 || row > 2 || col < 0 || col > 2 || board[row][col] != ' ') {
            printf("输入不合法,请重新输入\n");
            i--;  // 重新让当前玩家下棋
            continue;
        }

        // 在棋盘上放置玩家的棋子
        board[row][col] = currentPlayer;

        // 检查是否有玩家获胜
        if (checkWin(currentPlayer)) {
            printf("恭喜玩家 %c 获胜!\n", currentPlayer);
            printBoard();
            return 0;
        }

判断胜负

代码实现

// 检查棋盘是否有玩家获胜
int checkWin(char player) {
    // 检查每一行
    for (int i = 0; i < 3; i++) {
        if (board[i][0] == player && board[i][1] == player && board[i][2] == player) {
            return 1;
        }
    }
    // 检查每一列
    for (int j = 0; j < 3; j++) {
        if (board[0][j] == player && board[1][j] == player && board[2][j] == player) {
            return 1;
        }
    }
    // 检查对角线
    if ((board[0][0] == player && board[1][1] == player && board[2][2] == player) ||
        (board[0][2] == player && board[1][1] == player && board[2][0] == player)) {
        return 1;
    }
    return 0;
}

        通过检视每一行、每一列以及对角线是否有棋子连成一条线,来判断是否有玩家获胜或者游戏结束为平局。

游戏循环

代码实现

 // 切换玩家
 if (currentPlayer == 'X') {
     currentPlayer = 'O';
 }
 else {
     currentPlayer = 'X';
 }

        通过判断结构来交换玩家的下棋顺序,来实现游戏的循环。

完整代码

#define _CRT_SECURE_NO_WARNINGS
#include 
#include
#include

char board[3][3];  // 井字棋棋盘

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

// 打印井字棋棋盘
void printBoard() {
    printf("\n");
    printf("   | 0 | 1 | 2\n");
    printf("---|---|---|---\n");
    printf(" 0 | %c | %c | %c \n", board[0][0], board[0][1], board[0][2]);
    printf("---|---|---|---\n");
    printf(" 1 | %c | %c | %c \n", board[1][0], board[1][1], board[1][2]);
    printf("---|---|---|---\n");
    printf(" 2 | %c | %c | %c \n", board[2][0], board[2][1], board[2][2]);
    printf("\n");
}

// 检查棋盘是否有玩家获胜
int checkWin(char player) {
    // 检查每一行
    for (int i = 0; i < 3; i++) {
        if (board[i][0] == player && board[i][1] == player && board[i][2] == player) {
            return 1;
        }
    }
    // 检查每一列
    for (int j = 0; j < 3; j++) {
        if (board[0][j] == player && board[1][j] == player && board[2][j] == player) {
            return 1;
        }
    }
    // 检查对角线
    if ((board[0][0] == player && board[1][1] == player && board[2][2] == player) ||
        (board[0][2] == player && board[1][1] == player && board[2][0] == player)) {
        return 1;
    }
    return 0;
}

int main() {
    initializeBoard();
    int row, col;// 行 列
    char currentPlayer = 'X';

    // 通过判断随机数奇偶性来决定先后顺序
    srand((unsigned int)time(0)); // 使用当前时间作为随机数种子 头文件 
    if (rand() % 2 == 0) {
        currentPlayer = 'X';
        printf("玩家 X 先手\n");
    }
    else {
        currentPlayer = 'O';
        printf("玩家 O 先手\n");
    }

    for (int i = 0; i < 9; i++) {
        printf("当前棋盘状态:\n");
        printBoard();
        printf("玩家 %c,请输入你要下棋的位置(行 列):", currentPlayer);
        scanf("%d %d", &row, &col);

        // 检查输入是否合法
        if (row < 0 || row > 2 || col < 0 || col > 2 || board[row][col] != ' ') {
            printf("输入不合法,请重新输入\n");
            i--;  // 重新让当前玩家下棋
            continue;
        }

        // 在棋盘上放置玩家的棋子
        board[row][col] = currentPlayer;

        // 检查是否有玩家获胜
        if (checkWin(currentPlayer)) {
            printf("恭喜玩家 %c 获胜!\n", currentPlayer);
            printBoard();
            return 0;
        }

        // 切换玩家
        if (currentPlayer == 'X') {
            currentPlayer = 'O';
        }
        else {
            currentPlayer = 'X';
        }
    }

    printf("游戏结束,平局!\n");
    printBoard();

    return 0;
}

结语

        通过这个简单的井字棋游戏项目,我们可以学习到如何使用C语言来实现一个基本的游戏逻辑。希望这个教程对你有所帮助!

         如果你有任何问题或建议,欢迎在评论区留言,这将对我有很大的帮助。

         完结!咻咻~~

你可能感兴趣的:(游戏,游戏,c语言)