用C语言实现简单的三子棋

三子棋代码的实现需要一个简单的思路做指引,所以我们先来做一下思路的整理,代码的实现主要分为以下几个步骤:

1.初始化数组
2.显示数组
3.电脑走
4.玩家走
5.判断输赢

所以,先写出源文件game.h,如下。

#ifndef __GAME_H__  
#define __GAME_H__  

#define ROWS 3   //定义行  
#define COLS 3   //定义列  

//初始化数组
void init_board(char board[ROWS][COLS], int rows, int cols);
 //显示数组
void display_board(char board[ROWS][COLS], int rows, int cols);
//电脑走
void computer_move(char board[ROWS][COLS], int rows, int cols);
//玩家走
void player_move(char board[ROWS][COLS], int rows, int cols);
//判断输赢
char check_win(char board[ROWS][COLS], int rows, int cols);

#endif//__GAME_H__

接下来再写出主体的main函数,使这个三子棋的大体先做出来。以下为main.c函数。要实现的主要为选择界面以及大体的顺序。

#define _CRT_SECURE_NO_WARNINGS   

#include"game.h"  
#include<stdio.h>  
#include<stdlib.h>  
#include<time.h>  

void menu()
{
    printf("*******************************\n");
    printf("*****1.paly    2.exit *********\n");
    printf("*******************************\n");
}

void game()
{
    char ret = 0;
    char board[ROWS][COLS] = { 0 };
    init_board(board, ROWS, COLS);

    while (1)
    {
        printf("电脑走:\n");
        computer_move(board, ROWS, COLS);
        display_board(board, ROWS, COLS);
        ret = check_win(board, ROWS, COLS);
        if (ret != 'q')
        {
            break;
        }

        printf("玩家走:\n");
        player_move(board, ROWS, COLS);
        display_board(board, ROWS, COLS);
        ret = check_win(board, ROWS, COLS);
        if (ret != 'q')
        {
            break;
        }
    }

    if (ret == '*')
    {
        printf("玩家赢了!\n");
    }
    else if (ret == 'o')
    {
        printf("电脑赢了!\n");
    }
    else if (ret == ' ')
    {
        printf("平局!\n");
    }
}

int main()
{
    int input = 0;
    srand((unsigned)time(NULL));
    do
    {
        menu();
        printf("请选择:");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            game();
            break;
        case 2:
            return 0;
            break;
        default:
            printf("输入错误,请重新输入!\n");
            break;
        }
    } while (input);

    system("pause");
    return 0;
}

以下为函数模块功能的的分布实现:

#define _CRT_SECURE_NO_WARNINGS   

#include"game.h"  
#include<stdio.h>  
#include<stdlib.h>  
#include<time.h>  

void init_board(char board[ROWS][COLS], int rows, int cols)
{
    int i = 0;
    int j = 0;
    for (i = 0; i < rows; i++)
    {
        for (j = 0; j < cols; j++)
        {
            board[i][j] = ' ';
        }
    }
}
void display_board(char board[ROWS][COLS], int rows, int cols)                    //显示棋盘  
{
    int i = 0;
    for (i = 0; i < rows; i++)
    {
        printf("|  %c |  %c |  %c |\n", board[i][0], board[i][1], board[i][2]);
        if (i <= rows - 1)
        {
            printf("|----|----|----|\n");
        }
    }
}

void computer_move(char board[ROWS][COLS], int rows, int cols)           //电脑走  
{
    while (1)
    {
        int x = rand() % 3;
        int y = rand() % 3;
        if (board[x][y] != '*' && board[x][y] != 'o')
        {
            board[x][y] = 'o';
            return;
        }

    }
}

void player_move(char board[ROWS][COLS], int rows, int cols)          //玩家走  
{
    int x = 0;
    int y = 0;
    printf("玩家请输入位置,如:x y》");
    do
    {
        scanf("%d %d", &x, &y);
        if (board[x - 1][y - 1] == 'o')
        {
            printf("该位置已经被占用,请重新输入:》");
        }
        else if (((x - 1)>3) || ((y - 1)>3) || (x - 1 < 0) || (y - 1 < 0))
        {
            printf("输入位置错误,请重新输入:》");
        }
        else
        {
            board[x - 1][y - 1] = '*';
            break;
        }
    } while (1);
}

static int is_full(char board[ROWS][COLS], int rows, int cols)    //判断棋盘满没有  
{
    int i = 0;
    int j = 0;
    for (i = 0; i < rows; i++)
    {
        for (j = 0; j <cols; j++)
        {
            if (board[i][j] == ' ')
            {
                return 0;
            }
        }
    }
    return 1;
}

char check_win(char board[ROWS][COLS], int rows, int cols)           //判断输赢  
{
    int k = 1;
    int i = 0;
    for (i = 0; i < rows; i++)  //判断行
    {
        if ((board[i][0] == board[i][1]) && (board[i][1] == board[i][2]) && board[i][0] != ' ') 
        {
            return board[i][0];
        }
    }
    for (i = 0; i < cols; i++)  //判断列
    {
        if ((board[0][i] == board[1][i]) && (board[1][i] == board[2][i]) && (board[0][i] != ' '))
        {
            return board[0][i];
        }
    }
    if ((board[0][0] == board[1][1]) && (board[1][1] == board[2][2]) && (board[0][0] != ' ')) //判断正斜
    {
        return board[1][1];
    }
    if ((board[0][2] == board[1][1]) && (board[1][1] == board[2][0]) && (board[0][2] != ' ')) //判断反斜
    {
        return board[0][2];
    }
    if (is_full(board, rows, cols))
    {
        return ' ';
    }
    return 'q';
}

以下为程序运行的三种结果:

(0)

相关推荐

  • C语言实现三子棋游戏

    本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #include<time.h> void chess_board(char arr[3][3]) //打印棋盘 { int i = 0; int j = 0; for (i = 0; i < 3; i++) { printf( " %c | %c | %c \n", arr [i][0], a

  • C语言实现三子棋游戏含完整代码

    目录 一.text.c源文件部分 1.main函数部分 2.game函数部分 二.game.h头文件部分 三.game.c源文件部分 运行  三子棋是大家小时候和同桌在纸上都玩过的简单小游戏,这个游戏我们在c语言中就可以实现. 在这篇文章我推荐大家使用vs2013,vs2019,vs2022等的编译器.部分学校使用的vc6.0以及Devc++.前者是1998年推出的c语言编译器,在现在的win10或者win11的系统中并不兼容,可能会出现一些问题,后者也在2015年停更,这两款祖传c语言编译器并

  • C语言实现井字棋(三子棋)

    本文实例为大家分享了C语言实现井字棋的具体代码,供大家参考,具体内容如下 一.实现思路 1.初始化数组 三子棋是九宫格的格式,所以用二维数组接收数据.用'O'代表电脑下的子,'X'代表玩家下的子.未下子的时候初始化 ' '(space).则二维数组为"char"类型,大小为char board[3][3]. 2.打印棋盘 打印出井字的棋盘,同时为了将数据显示在每格的中间,用空格隔开(" %c |")的格式设置棋盘"|"用来形成竖,接着打印&quo

  • C语言实现三子棋小游戏

    在这里我们要写出一个三子棋的小游戏,能够实现所需要的三字连珠的功能,并且可以使得游戏让玩家进行选择是否继续的功能. 代码: #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<time.h> #define ROW 3 #define COL 3 void init_board(char arr[ROW][COL]) { int i=0; int j=0; for

  • C语言实现三子棋程序

    本文实例为大家分享了C语言实现三子棋的具体代码,供大家参考,具体内容如下 先直接上代码: #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> //2.实现三子棋游戏. #include<Windows.h> //Sleep() RAND_MAX 的头文件 void menu() //打印菜单 { printf("****************************\n"); printf("***

  • C语言实现三子棋

    本文实例为大家分享了C语言实现三子棋的具体代码,供大家参考,具体内容如下 题目:C语言实现三子棋 问题分析:首先用到数组,存储信息.棋盘的信息和棋子的信息 打印棋盘 读取棋子的位置 判断是否连子 打印棋盘 然后重复 代码如下: #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> //数组沙盘 char Global_Gobang[10][10]; int Global_line, Global_p

  • C语言实现三子棋的步骤和代码详解

    一.问题描述 用c语言实现三子棋. 二.基本流程 在写三子棋的代码之前,我们来看看实现这个游戏的逻辑: 1.菜单界面选择开始或者退出游戏. 2.创建棋盘并初始化. 3.打印棋盘. 4.玩家落子(玩家输入行列坐标的方式来落子),'x'表示玩家落子. 5.判定胜负关系(输,赢,和棋),'q'表示和棋. 6.电脑落子(随机位置落子) ,'o'表示电脑落子. 7.判定胜负关系. 8.回到 步骤2 继续执行. 三.步骤 1.菜单界面 1.开始游戏 0.退出游戏 int menu(){ printf("--

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

    使用C语言实现简单的三子棋程序,主要是对二维数组的运用,我们需要一个头文件,两个源文件来实现. game.h //包含函数的声明,宏定义 test.c //包含主函数,函数调用 game.c //包含函数的定义 整体思路 1.要完成一个简单的三子棋程序,首先需要创建一个二维数组,并完成数组初始化. //使用宏定义定义常量,方便之后对数组的使用 #define ROW 3 //行 #define COL 3 //列 char arr[ROW][COL] = { 0 }; Arr_init(arr,

  • C语言版三子棋游戏

    很多人从小都玩过三子棋,相信很多人都对这个游戏的实现有所疑问.那么今天我们就用C语言自己来实现一下. 首先 如流程图所示: 说明一下:首先我们以输入1/0,来判断是否进入游戏.当输入为1时,进入游戏:当输入为0时,退出游戏:当输入为其他值时,我们提示重新输入.所以我们这里用switch实现. 我们回想棋盘,很像一个二维数组,所以我们接下里的数棋盘设计以及向棋盘里赋值都将使用二维数组.为了使得我们的扩展性变强,我们这里使用了宏,来定义行和列的值. 为了将来的判段,我们将棋盘里所以的值都赋值为' '

  • C语言实现简单的三子棋

    本文实例为大家分享了C语言实现简单三子棋游戏的具体代码,供大家参考,具体内容如下 一.主要思想 1.创建一个3*3的棋盘(使用字符数组) 2.初始化棋盘(用空格填充) 3.打印棋盘(使其有可见的边框) 4.玩家落子,用x表示(检验是否越界,是否已经落子,是否赢) 5.电脑落子,用o表示(检验是否已经落子,是否赢)  注:电脑在有效范围内随机落子,使用当前时间戳设置随机种子即srand(time(0)) 6.三种情况:玩家赢,电脑赢,和棋 二.代码实现 #define _CRT_SECURE_NO

随机推荐