C语言实现简易井字棋游戏

以下是“C语言实现简易井字棋游戏”的完整攻略:

1. 游戏规则

井字棋是一种双人对弈的游戏,棋盘为3*3格的矩阵。其中一方使用“O”标记,而另一方使用“X”标记。棋子分别放在棋盘的空白处,直到一方成功地在水平、垂直或者对角线上连成三个棋子为止,就获得胜利。

2. 程序架构

本程序的程序架构可以分为如下几个部分:

  1. 定义变量:包括棋盘和游戏状态等变量。
  2. 初始化棋盘:将每个格子都赋值为空。
  3. 游戏主体:在每个回合中,询问当前玩家落子的位置,判断是否胜利,最终返回胜利者的标记。
  4. 输出结果:根据胜利者的标记输出对应的信息。

3. 代码实现

下面以代码实现的方式来详细讲解。

定义变量

首先需要定义需要使用的变量:

char board[3][3]; // 棋盘
char player1 = 'X'; // 玩家1的标记
char player2 = 'O'; // 玩家2的标记
int currentPlayer = 1; // 当前玩家,1表示玩家1,2表示玩家2
int gameState = 0; // 游戏状态,0表示游戏未结束,1表示玩家1胜利,2表示玩家2胜利,3表示平局

初始化棋盘

定义一个函数init_board()来初始化棋盘:

void init_board() {
    for(int i=0; i<3; i++) {
        for(int j=0; j<3; j++) {
            board[i][j] = ' ';
        }
    }
}

游戏主体

定义一个函数play_game()来进行游戏:

int play_game() {
    while(1) {
        // 输出当前棋盘状态
        printf("Current board:\n");
        printf(" %c | %c | %c \n", board[0][0], board[0][1], board[0][2]);
        printf("---|---|---\n");
        printf(" %c | %c | %c \n", board[1][0], board[1][1], board[1][2]);
        printf("---|---|---\n");
        printf(" %c | %c | %c \n", board[2][0], board[2][1], board[2][2]);

        // 询问当前玩家落子的位置
        int row, col;
        printf("Player %d, enter row (1-3): ", currentPlayer);
        scanf("%d", &row);
        printf("Player %d, enter column (1-3): ", currentPlayer);
        scanf("%d", &col);

        // 判断当前位置是否为空
        if(board[row-1][col-1] == ' ') {
            // 棋盘更新为当前玩家的标记
            if(currentPlayer == 1) {
                board[row-1][col-1] = player1;
            }
            else {
                board[row-1][col-1] = player2;
            }

            // 判断是否胜利
            // 检查行
            for(int i=0; i<3; i++) {
                if(board[i][0] != ' ' && board[i][0] == board[i][1] && board[i][1] == board[i][2]) {
                    if(currentPlayer == 1) {
                        gameState = 1;
                    }
                    else {
                        gameState = 2;
                    }
                    return gameState;
                }
            }
            // 检查列
            for(int i=0; i<3; i++) {
                if(board[0][i] != ' ' && board[0][i] == board[1][i] && board[1][i] == board[2][i]) {
                    if(currentPlayer == 1) {
                        gameState = 1;
                    }
                    else {
                        gameState = 2;
                    }
                    return gameState;
                }
            }
            // 检查对角线
            if(board[0][0] != ' ' && board[0][0] == board[1][1] && board[1][1] == board[2][2]) {
                if(currentPlayer == 1) {
                    gameState = 1;
                }
                else {
                    gameState = 2;
                }
                return gameState;
            }
            if(board[0][2] != ' ' && board[0][2] == board[1][1] && board[1][1] == board[2][0]) {
                if(currentPlayer == 1) {
                    gameState = 1;
                }
                else {
                    gameState = 2;
                }
                return gameState;
            }

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

            // 切换到下一个玩家
            if(currentPlayer == 1) {
                currentPlayer = 2;
            }
            else {
                currentPlayer = 1;
            }
        }
        else {
            printf("This position is not empty. Try another one.\n");
        }
    }
}

输出结果

定义一个函数print_result()来根据游戏状态输出对应的信息:

void print_result(int gameState) {
    if(gameState == 1) {
        printf("Player 1 wins!\n");
    }
    else if(gameState == 2) {
        printf("Player 2 wins!\n");
    }
    else {
        printf("It's a tie!\n");
    }
}

示例说明

将上述代码整合到一个完整的程序中,下面给出两个示例:

示例1

Current board:
   |   |   
---|---|---
   |   |   
---|---|---
   |   |   
Player 1, enter row (1-3): 2
Player 1, enter column (1-3): 2
Current board:
   |   |   
---|---|---
   | X |   
---|---|---
   |   |   
Player 2, enter row (1-3): 1
Player 2, enter column (1-3): 1
Current board:
 O |   |   
---|---|---
   | X |   
---|---|---
   |   |   
Player 1, enter row (1-3): 2
Player 1, enter column (1-3): 3
Current board:
 O |   |   
---|---|---
   | X | X 
---|---|---
   |   |   
Player 2, enter row (1-3): 1
Player 2, enter column (1-3): 2
Current board:
 O |   |   
---|---|---
 O | X | X 
---|---|---
   |   |   
Player 1, enter row (1-3): 3
Player 1, enter column (1-3): 1
Current board:
 O |   |   
---|---|---
 O | X | X 
---|---|---
 X |   |   
Player 1 wins!

示例2

Current board:
   |   |   
---|---|---
   |   |   
---|---|---
   |   |   
Player 1, enter row (1-3): 1
Player 1, enter column (1-3): 1
Current board:
 X |   |   
---|---|---
   |   |   
---|---|---
   |   |   
Player 2, enter row (1-3): 1
Player 2, enter column (1-3): 2
Current board:
 X | O |   
---|---|---
   |   |   
---|---|---
   |   |   
Player 1, enter row (1-3): 2
Player 1, enter column (1-3): 2
Current board:
 X | O |   
---|---|---
   | X |   
---|---|---
   |   |   
Player 2, enter row (1-3): 1
Player 2, enter column (1-3): 3
Current board:
 X | O | O 
---|---|---
   | X |   
---|---|---
   |   |   
Player 1, enter row (1-3): 3
Player 1, enter column (1-3): 1
Current board:
 X | O | O 
---|---|---
   | X |   
---|---|---
 X |   |   
Player 2, enter row (1-3): 2
Player 2, enter column (1-3): 1
Current board:
 X | O | O 
---|---|---
 O | X |   
---|---|---
 X |   |   
Player 2 wins!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现简易井字棋游戏 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C++ 学习之旅二 说一说C++头文件

    C++ 学习之旅二 说一说C++头文件 在C++编程中,我们有时需要引入头文件来使用其中的函数和变量等内容。那么什么是头文件?如何使用头文件呢?本文将从以下两个方面来详细讲解C++头文件的使用: 头文件的作用 如何使用头文件 头文件的作用 头文件(Header File)是一种特殊的文件,一般用来存放程序中的函数声明、define值和类声明等等。头文件的作用…

    C 2023年5月23日
    00
  • 在C语言编程中设置和获取代码组数的方法

    设置和获取代码组数的方法主要是通过定义并使用数组的方式来实现的。下面是详细的C语言编程攻略: 创建一个数组来存储代码组数 首先,我们需要定义一个数组来存储代码组数。假设我们想要存储10组代码,可以这样定义一个名为code_num的整型数组: int code_num[10]; 在上面的代码中,我们定义了一个名为code_num的整型数组,并指定它的大小为10…

    C 2023年5月24日
    00
  • 解析c++中的默认operator=操作的详解

    当我们在C++中定义一个类时,如果没有显式地定义“赋值运算符”(operator=),C++编译器会默认为该类生成一个“赋值运算符”(operator=)。然而,这个默认生成的“赋值运算符”(operator=)并不总是正确的,它会导致我们在使用类时出现问题。因此,本文将详细讲解“解析C++中的默认operator=操作的详解”的完整攻略,帮助大家更好的理解…

    C 2023年5月23日
    00
  • 如何理解C++指针常量和常量指针

    下面给你详细讲解如何理解C++指针常量和常量指针。 1. 指针常量 1.1 概念介绍 指针常量是指一个指针被定义为常量(值不能被改变),而指针所指向的变量的值可以变化。在定义指针常量时,必须把指针初始化为某个地址。 1.2 示例说明 以下是一个指针常量的示例: #include <iostream> using namespace std; in…

    C 2023年5月23日
    00
  • C语言实现简单的三子棋

    C语言实现简单的三子棋攻略 三子棋游戏是一款简单的棋类游戏,它由一个3×3的棋盘和两种不同的棋子组成(通常是‘X’和‘O’)。此游戏通常在由两人轮流下子的情况下进行,先把三个棋子排成横线、竖线、对角线中的任意一种情况者获胜,若棋盘被下满棋子但无任何一方获胜,则视为平局游戏结束。 C语言是一门非常优秀的编程语言,可以通过它实现三子棋游戏,并可以在控制台进行游戏…

    C 2023年5月23日
    00
  • VS2015中怎么创建C语言文件?

    首先,打开Visual Studio 2015,选择新建项目(New Project)。 然后,在弹出的新项目窗口中,选择Visual C++,在Visual C++中选择Console Application(控制台应用程序)。 在控制台应用程序设置中,我们需要选择C++语言核心选项,因为C语言是C++的超集。 在接下来的窗口中,我们需要设置项目的名称和存…

    C 2023年5月23日
    00
  • mssql 两表合并sql语句

    下面给你讲解“mssql 两表合并sql语句”的完整攻略。 首先介绍一下SQL中的两种主要的表关联方式:INNER JOIN和OUTER JOIN。INNER JOIN是将两个表中列值完全匹配的行连接起来,而OUTER JOIN则是将全部行连接起来,即使其中一个表中没有匹配行也会将其显示出来。 在MSSQL中,两个表合并的基本语法如下: SELECT col…

    C 2023年5月22日
    00
  • C语言中花式退出程序的方式总结

    下面是一个完整的“C语言中花式退出程序的方式总结”的攻略。 花式退出程序 程序退出是指程序终止运行并离开当前程序。C语言中有很多种方式能够退出程序,下面将以如下方式进行说明: Exit方法 Return方法 异常退出方法 Exit方法 通过调用函数exit()可以让程序直接退出。exit()函数的声明在 stdlib.h 头文件中。 void exit(in…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部