C语言版三子棋游戏实现代码

本文实例为大家分享了C语言版三子棋游戏的具体代码,供大家参考,具体内容如下

实现一个三子棋小游戏

下面是实现步骤:

总共有需要三个文件

第一,test.c

我们要在这个文件里面实现游戏的主体流程

第二,game.c

在这个文件里我们可以实现各个游戏函数的分装

第三,game.h

在这个文件里我们实现的是各个函数的声明

test.c

1、首先要有一个菜单

让玩家可以做出选择

2、接着对玩家做出的不同选择进行实现

选1就是开始游戏,所以我们进入到game函数里就好了

选0就是退出游戏,

其他选择的话就是选择错误,重新选择

这个我们可以用switch语句来实现

这里我们要先用的是do,while循环,条件里放入我们要输入的数

这样的话如果输入的数为0,即为假,正好会跳出循环,后面接上return 0的话程序就结束了

所以我们先把以上所描述的功能写出来

#include<stdio.h>
#include"game.h"
void menu()
{
    printf("***********\n");
    printf("***1play***\n");
    printf("***0exit***\n");
    printf("***********\n");

}
​
int main()
{
    menu();
    int input = 0;
    do
    {
        printf("请选择\n");
        scanf("%d", &input);
        switch(input)
        {
            case 1:
                game();
                break;
            case 0:
                printf("退出游戏\n");
                break;
            default:
                printf("选择错误,请重新选择\n");
        }
    }while(input);

    return 0;
}

3、实现游戏函数的各个功能

我们要做的是三子棋,应该先有一个棋盘

所以我们就可以用二维数组来创建这样一个 3 * 3的棋盘

鉴于以后可能会想要不同行和列的棋盘

所以我们可以定义宏来表示数组的行和列,以后想要修改行数和列数也很方便

创建棋盘之后,我们要将棋盘里的元素进行初始化

接着还要打印出来呈现给玩家

然后就是下棋的过程,因为我们得不断下到一方赢或者棋盘满

所以我们可以用while循环来实现

接着就是

玩家下棋,展示棋盘,判断输赢

电脑下棋,展示棋盘,判断输赢

......

我们可以把以上功能表达出来

void game()
{
    char board[ROW][COL];//宏的定义放在game.h里面
    char ret = 0;//我们用ret这个变量去接收判断输赢的函数所返回的值

    IntBoard(board, ROW, COL);//这些具体的函数都会分装到game.c上面
    DisplayBoard(board, ROW, COL);
    //创建和展示棋盘之后,就是不断  下棋,展示,判断的过程了

    while(1)
    {
        PlayerMove(board, ROW, COL);
        DisplayBoard(board, ROW, COL);
        ret = IsWin(board, ROW, COL);
        if(ret != 'C')//也就是指要么一方赢,要么棋盘满,就应该跳出循环,不再继续下棋了
            break;
        //这两步的区别就只是第一行而已
        ComputerMove(board, ROW, COL);
        DisplayBoard(board, ROW, COL);
        ret = IsWin(board, ROW, COL);
        if(ret != 'C')
            break;
    }

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

game函数放在menu函数后面就好了

game.c

所以我们所需要分装到game.c里的函数有:

初始化棋盘,打印棋盘,玩家下棋,电脑下棋,判断输赢

那么接下来我们就在game.c里实现上述函数的功能

初识化棋盘

我们利用for循环把里面的元素都初始化为空格

#include"game.h"
void IntBoard(char board[ROW][COL], int row, int col)
{
    int i = 0;
    int j = 0;
    for(i = 0; i < row; i++)
    {
        for(j = 0; j < col; j++)
        {
            board[i][j] = ' ';
        }
    }
}

打印棋盘

这里要特别注意分割行的问题

void DisplayBoard(char board[ROW][COL], int row, int col)
{
    int i = 0;
    int j = 0;
    for(i = 0; i < row; i++)
    {
        for(j = 0; j < col; j++)
        {
            printf(" %c ", board[i][j]);
            if(j < col-1)
                printf("|");//每一列的每一个元素中间打印 |
        }
        printf("\n");//每列打印完打印分割行

        if(i < row - 1)
        {

            for(j = 0; j < col; j++)
            {
                printf("---");
                if(j < col - 1)
                    printf("|");
            }
        }
        printf("\n");//棋盘全都打印好之后打印分割行
    }
}

玩家下棋

这里的实现思路是:

1、判断输入的位置有无越界

2、有则提示,没有则判断有无棋子

3、有则提示,没有则将该位置放入元素*

(因为玩家可能要连续输入几次,所以我们要用到while循环)

void PlayerMove(char board[ROW][COL], int row, int col)
{
    int x;
    int y;
    //玩家要输入的行和列

while (1)
{
    printf("请输入坐标\n");
    scanf("%d %d", &x, &y);
    if (x >= 1 && x <= row && y >= 1 && y <= col)//判断有无越界
    {
        if (board[x-1][y-1] == ' ')//判断有无棋子
        {
            board[x-1][y-1] = '*';
            break;//输入成功之后跳出循环
        }
        else
            printf("坐标被占用,请重新输入\n");
    }
    else
        printf("坐标非法,请重新输入\n");
​
}

电脑下棋

这里的实现思路是:

1、生成随机数(这个数值不能越界)

2、将该位置放入元素#,这里不需要判断,因为本身就不需要输入

void ComputerMove(char board[ROW][COL], int row, int col)
{
    int x = 0;
    int y = 0;
    srand((unsigned int)time(NULL));
    printf("电脑走\n");
    while(1)
    {
        x = rand() % row;//生成随机数,这里就需要用到时间戳了,我们还要做test.c里面包含一个<time.h>
        y = rand() % col;
        if(board[x][y] == ' ')
        {
            board[x][y] = '#';
            break;
        }
    }
}

判断输赢

这里还要分为棋盘是否满子和一方赢

是否满子

实现思路:

这个比较简单,我们只要依次查看棋盘,若有一个元素为空格,即为满

然后注意一下返回值就好了

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

哪一方赢

实现思路:

根据规则,我们要判断是否有三个相同的棋子连成直线

所以,每一行,每一列判断一次,然后对角线再判断两次就好了

使用for循环和if语句来实现

char IsWin(char board[ROW][COL], int row, int col)
{
    int i = 0;
    int j = 0;
    for(i = 0; i < row; i++)//先判断行
    {
        if(board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')
            return board[i][0];
    }
    for(j = 0; j < col; j++)//再判断列
    {
        if(board[0][i] == board[1][i] && board[1][i] == board[2][i] && board != ' ')
            return board[0][i];
    }
    //接着是两次对角线
    if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
        return board[1][1];
    if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
        return board[1][1];
    //然后我们再这里直接调用IsFull函数,就不用在game函数里调用了,而且返回值都能统一管理
    if(IsFull(board, row, col))
    {
        return 'Q';
    }
    return 'C';
}

到这里我们的game.c文件的任务就完成了

game.h

然后我们还需要一个game.h文件来对函数进行声明

#define _CRT_SECURE_NO_WARNINGS
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
​
#define ROW 3
#define COL 3
​
​
void IntBoard(char board[ROW][COL], int row, int col);
​
void DisplayBoard(char board[ROW][COL], int row, int col);
​
void PlayerMove(char board[ROW][COL], int row, int col);
​
void ComputerMove(char board[ROW][COL], int row, int col);
​
char IsWin(char board[ROW][COL], int row, int col);
​
int IsFull(char board[ROW][COL], int row, int col);

​好了,到了这里我们的三子棋小游戏就完成了!快去试试吧!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(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语言实现三子棋程序

    本文实例为大家分享了C语言实现三子棋的具体代码,供大家参考,具体内容如下 先直接上代码: #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> //2.实现三子棋游戏. #include<Windows.h> //Sleep() RAND_MAX 的头文件 void menu() //打印菜单 { printf("****************************\n"); 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语言实现简单三子棋游戏的具体代码,供大家参考,具体内容如下 游戏介绍:使用C语言中二维数组和函数的基本知识实现一个三子棋游戏,这个游戏要实现的基本功能有初始化棋盘.棋盘的打印.玩家下棋.电脑下棋.判断输赢. 代码框架: 1.头文件(game.h) #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<st

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

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

    本文实例为大家分享了C语言三子棋小游戏的具体代码,供大家参考,具体内容如下 一.介绍: 运用C语言的数组等相关知识:实现一个简易的三子棋小游戏: 三子棋小游戏的大概内容为 此游戏在设计时:总共设计了三个文件: game.h: 类型的声明和函数的声明 game.c:函数功能的具体实现 test.c: 测试文件 二.具体实现: (1).game.h模块: 代码实现如下: #define _CRT_SECURE_NO_WARNINGS 1 //头文件包含 #include <stdio.h> #in

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

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

随机推荐