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

yizhihongxing

以下是“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 2023年5月22日
    00
  • 快云新架构震撼公测 1元体验300台高配置云服务器

    快云新架构震撼公测 1元体验300台高配置云服务器攻略 1. 登录快云官网 首先,在浏览器中输入https://www.kuaicloud.com/,进入快云的官方网站。 2. 注册账号并实名认证 如果您还没有在快云注册账号,请先注册一个账号并完成实名认证。实名认证可以提高您的账号安全等级,并对后续使用快云的操作起到保障作用。 3. 进入快云产品购买页面 在…

    C 2023年5月22日
    00
  • C语言实战之浪漫烟花表白程序代码

    以下是针对“C语言实战之浪漫烟花表白程序代码”的完整攻略,包含了代码的实现细节和使用说明。 程序功能简介 本程序是一款基于C语言实现的烟花表白程序,可以在Windows系统中运行。在开启程序后,将会出现浪漫的烟花飞舞效果,并在屏幕中央显示一段特定的表白文字,可以为你的恋人带来浪漫的惊喜。 程序实现原理 程序基于图形库PDCurses实现,采用C语言编写。具体…

    C 2023年5月23日
    00
  • JS/HTML5游戏常用算法之追踪算法实例详解

    JS/HTML5游戏常用算法之追踪算法实例详解 在制作游戏过程中,经常需要用到追踪算法,以实现游戏人物或物品的跟踪移动。本文将详细讲解追踪算法的原理和实现方式,并提供两个示例作为参考。 原理 追踪算法分为三种:面向目标追踪、路径追踪和预测追踪。其中,面向目标追踪是最常见的追踪算法之一。 面向目标追踪主要应用于游戏中,用于实现玩家角色或NPC跟随另一个移动对象…

    C 2023年5月22日
    00
  • sublime text3搭建配置c语言编译环境的详细图解教程(小白级)

    下面是“sublime text3搭建配置c语言编译环境的详细图解教程(小白级)”的完整攻略。 1. 安装Sublime Text3 首先需要在Sublime Text3官网上下载安装Sublime Text3,下载地址为:https://www.sublimetext.com/3 2. 安装Package Control插件 Sublime Text3安装…

    C 2023年5月23日
    00
  • JVM调优OutOfMemoryError异常分析

    针对JVM调优OutOfMemoryError异常分析,我可以给出以下完整攻略: 步骤一:复现错误 首先,我们需要尝试复现”OutOfMemoryError”异常,以便分析与解决问题。可以使用压力测试或者其他方式使程序运行仅几分钟便出现该异常。 步骤二:查看error日志 当异常发生时,JVM会在控制台或日志中输出相关信息,我们需要查看并分析这些日志。此时,…

    C 2023年5月23日
    00
  • C 共用体

    C语言共用体(Union)完整使用攻略 共用体(Union)是C语言中一种特殊的数据类型,与结构体(Struct)类似,也是一种复合类型。共用体允许不同的数据类型在相同的内存空间里互相转换使用,这意味着在同一时间只能保存相同的数据类型,但可以在不同的时间存储不同的数据类型。 创建共用体 共用体和结构体的方式非常相似,可以使用关键字union来定义共用体,例如…

    C 2023年5月10日
    00
  • C++实现学生考勤信息管理系统

    C++实现学生考勤信息管理系统 系统需求 首先,我们需要定义考勤信息管理系统的需求: 能够添加新学生记录; 能够删除指定学生记录; 能够显示所有学生记录; 能够修改指定学生记录; 能够查询指定学生记录。 数据结构设计 为了实现学生考勤信息管理系统,我们需要定义数据结构来存储学生记录。这里我们选择使用结构体来表示一个学生记录,包括以下字段: struct St…

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