C语言实现简单三子棋程序

C语言实现简单三子棋程序的完整攻略包括以下步骤:

  1. 定义游戏规则和棋盘

首先需要定义游戏规则,规定每个玩家的棋子形状和放置的位置等信息。同时需要定义一个3x3的棋盘数组,用于记录每个位置上的棋子情况。

#include <stdio.h>

#define ROW 3
#define COL 3

// 定义棋盘
char board[ROW][COL] = {
    {' ', ' ', ' '},
    {' ', ' ', ' '},
    {' ', ' ', ' '}
};

void print_board()
{
    printf("  1   2   3\n");
    printf("1 %c | %c | %c \n", board[0][0], board[0][1], board[0][2]);
    printf(" ---|---|---\n");
    printf("2 %c | %c | %c \n", board[1][0], board[1][1], board[1][2]);
    printf(" ---|---|---\n");
    printf("3 %c | %c | %c \n", board[2][0], board[2][1], board[2][2]);
}
  1. 实现玩家交替落子

按照游戏规则和棋盘的定义,玩家交替进行游戏。需要实现一个函数,根据玩家输入的行列数目,判断该位置是否可以下子,如果可以,就在对应位置上放置该玩家的棋子,并更新棋盘。同时需要判断游戏是否结束,如果棋盘已经填满或者某个玩家已经连成三个棋子,就宣告游戏结束。

int is_full()
{
    int i, j;
    for (i = 0; i < ROW; i++) {
        for (j = 0; j < COL; j++) {
            if (board[i][j] == ' ')
                return 0;
        }
    }
    return 1;
}

int check_win(char c)
{
    int i;
    for (i = 0; i < ROW; i++) {
        if (board[i][0] == c && board[i][1] == c && board[i][2] == c)
            return 1;
        if (board[0][i] == c && board[1][i] == c && board[2][i] == c)
            return 1;
    }
    if (board[0][0] == c && board[1][1] == c && board[2][2] == c)
        return 1;
    if (board[0][2] == c && board[1][1] == c && board[2][0] == c)
        return 1;
    return 0;
}

void play_game()
{
    int row, col;
    char c = 'X';

    while (1) {
        printf("Player %c's turn:\n", c);
        printf("Please input row and col (e.g. 1 2):\n");
        scanf("%d %d", &row, &col);

        if (row < 1 || row > 3 || col < 1 || col > 3) {
            printf("Invalid input, please input valid row and col (1~3):\n");
            continue;
        }

        if (board[row-1][col-1] != ' ') {
            printf("The place has already been taken, please input again:\n");
            continue;
        }

        board[row-1][col-1] = c;
        print_board();

        if (check_win(c)) {
            printf("Player %c wins!\n", c);
            break;
        }

        if (is_full()) {
            printf("Game ends in a draw!\n");
            break;
        }

        if (c == 'X')
            c = 'O';
        else
            c = 'X';
    }
}
  1. 进行游戏并输出结果

在主函数中,调用上述三个子函数,依次执行游戏规则、玩家交替落子和胜负判断等操作。

int main(void)
{
    printf("Welcome to the 3x3 Tic-tac-toe game!\n");
    print_board();
    play_game();
    return 0;
}
  1. 示例1

假设玩家1执黑子,玩家2执白子,依次放置棋子如下:

Welcome to the 3x3 Tic-tac-toe game!
  1   2   3
1   |   |   
 ---|---|---
2   |   |   
 ---|---|---
3   |   |   
Player X's turn:
Please input row and col (e.g. 1 2):
1 1
  1   2   3
1 X |   |   
 ---|---|---
2   |   |   
 ---|---|---
3   |   |   
Player O's turn:
Please input row and col (e.g. 1 2):
2 2
  1   2   3
1 X |   |   
 ---|---|---
2   | O |   
 ---|---|---
3   |   |   
Player X's turn:
Please input row and col (e.g. 1 2):
1 2
  1   2   3
1 X | X |   
 ---|---|---
2   | O |   
 ---|---|---
3   |   |   
Player O's turn:
Please input row and col (e.g. 1 2):
3 3
  1   2   3
1 X | X |   
 ---|---|---
2   | O |   
 ---|---|---
3   |   | O 
Player X's turn:
Please input row and col (e.g. 1 2):
2 3
  1   2   3
1 X | X |   
 ---|---|---
2   | O | X 
 ---|---|---
3   |   | O 
Player O's turn:
Please input row and col (e.g. 1 2):
3 1
  1   2   3
1 X | X |   
 ---|---|---
2   | O | X 
 ---|---|---
3 O |   | O 
Player X's turn:
Please input row and col (e.g. 1 2):
2 1
  1   2   3
1 X | X |   
 ---|---|---
2 X | O | X 
 ---|---|---
3 O |   | O 
Player X wins!

输出结果为“Player X wins!”,表示玩家1胜利。

  1. 示例2

假设玩家1执白子,玩家2执黑子,依次放置棋子如下:

Welcome to the 3x3 Tic-tac-toe game!
  1   2   3
1   |   |   
 ---|---|---
2   |   |   
 ---|---|---
3   |   |   
Player O's turn:
Please input row and col (e.g. 1 2):
1 1
  1   2   3
1 O |   |   
 ---|---|---
2   |   |   
 ---|---|---
3   |   |   
Player X's turn:
Please input row and col (e.g. 1 2):
2 2
  1   2   3
1 O |   |   
 ---|---|---
2   | X |   
 ---|---|---
3   |   |   
Player O's turn:
Please input row and col (e.g. 1 2):
1 2
  1   2   3
1 O | O |   
 ---|---|---
2   | X |   
 ---|---|---
3   |   |   
Player X's turn:
Please input row and col (e.g. 1 2):
2 1
  1   2   3
1 O | O |   
 ---|---|---
2 X | X |   
 ---|---|---
3   |   |   
Player O's turn:
Please input row and col (e.g. 1 2):
1 3
  1   2   3
1 O | O | O 
 ---|---|---
2 X | X |   
 ---|---|---
3   |   |   
Player O wins!

输出结果为“Player O wins!”,表示玩家1失败。

以上就是用C语言实现简单三子棋程序的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现简单三子棋程序 - Python技术站

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

相关文章

  • C++如何将二叉搜索树转换成双向循环链表(双指针或数组)

    将二叉搜索树转换成双向循环链表是一道比较经典的算法题,本文将对该算法进行完整讲解。 算法思路 我们可以将该问题划分成多个子问题:- 将左子树转换为双向循环链表,并返回链表头和链表尾;- 将右子树转换为双向循环链表,并返回链表头和链表尾;- 将当前节点插入左子树的链表尾,将左子树链表尾连接至当前节点;- 将当前节点插入右子树的链表头,将右子树链表头连接至当前节…

    C 2023年5月23日
    00
  • C语言 超详细讲解链接器

    C语言 超详细讲解链接器 什么是链接器 在C语言编写代码时,我们往往需要调用一些库函数,比如printf、malloc等等。这些库函数在我们的代码文件中并没有实现,而是存储在系统或其他库文件中,我们需要通过链接器把这些函数与我们编写的代码组合在一起,生成可执行程序。 链接器主要负责以下两个任务:- 符号解析:将目标文件中引用的符号与定义的符号建立联系。- 符…

    C 2023年5月23日
    00
  • iOS 14.3/iPadOS 14.3开发者预览版 Beta 2(18C5054c)怎么升级?

    下面是 iOS 14.3/iPadOS 14.3 开发者预览版 Beta 2 升级的完整攻略,包括两条示例说明: iOS 14.3/iPadOS 14.3 开发者预览版 Beta 2 升级攻略 1. 准备工作 在升级前,请务必备份你的设备数据以防意外情况发生。此外,为了能够顺利升级,你还需要: 确保你的设备支持升级到 iOS/iPadOS 14.3 开发者预…

    C 2023年5月23日
    00
  • C程序 寻找两个整数之间的阿姆斯特朗数字

    C程序 寻找两个整数之间的阿姆斯特朗数字使用攻略 概述 该程序是一个 C 语言的代码,用于寻找两个整数之间的阿姆斯特朗数字。阿姆斯特朗数字指的是一个 n 位数 (n ≥ 3),它的每个数位上的数字的 n 次幂之和恰好等于它本身。例如,1³ + 5³ + 3³ = 153。 程序运行环境 操作系统:Windows或Linux 编程语言:C语言 编译器:GCC编…

    C 2023年5月9日
    00
  • C++ 学习之旅二 说一说C++头文件

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

    C 2023年5月23日
    00
  • 未找到MathPage.wll或MathType.dll文件该怎么办?

    如果在使用 MathType 编辑方程时出现“未找到 MathPage.wll 或 MathType.dll 文件”错误,可以按照以下攻略处理。 1. 下载并安装 MathType 首先需要确定是否已经安装了 MathType。如果没有安装,建议从官方网站下载 MathType 的最新版本并进行安装:https://www.mathtype.com/ 2. …

    C 2023年5月22日
    00
  • C语言拼接字符串

    C语言中可以使用strcpy和strcat函数来拼接字符串。 使用strcpy函数拼接字符串: #include <stdio.h> #include <string.h> int main() { char str1[20] = "Hello, "; char str2[] = "world!&quot…

    C 2023年5月9日
    00
  • C 标准库 float.h

    C 标准库的 float.h 头文件包含了浮点型数值的一些有用的常量和宏定义。这些常量和宏定义可以帮助我们在程序中进行更精确的浮点数计算。 下面是一些 float.h 头文件中常用的常量和宏定义: 常量 FLT_RADIX:浮点数基数,即底数的数值。 FLT_MANT_DIG:最大二进制位数,通常是23。 DBL_MANT_DIG:一个 double 类型变…

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