【c语言】 我使用c语言基础做了一个老少皆宜的”国民小游戏(三字棋)“

简介: 本三字棋小游戏是依靠二维数组为核心来实现的,可以更加好理解掌握c语言数组的概念知识,依靠做小游戏项目,把学到了知识在输出出来加已巩固,最后有源代码

TOC

前言

本三字棋小游戏是依靠二维数组为核心来实现的,可以更加好理解掌握c语言数组的概念知识,依靠做小游戏项目,把学到了知识在输出出来加已巩固,最后有源代码

游戏效果

在这里插入图片描述

游戏实现

1.做出游戏菜单

2.游戏棋盘的创建

3.游戏开始下棋

4.判断游戏结束

5.源代码
1.菜单的实现
在这里插入图片描述
写一个菜单函数menu()

    printf("******************\n");
    printf("****  1.play ******\n");
    printf("****  0.exit *****\n");
    printf("******************\n");

在到main函数中调用


2.游戏棋盘的创建
在这里插入图片描述
这里可以看见玩家的落子的位置,和电脑落子的位置都给记录下来了,所以这里写一个game()函数
1.创建存储数据的容器

![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20210501094408448.png)
char board[3][3];
  • 这里有个问题就是要是以后我们不想只玩三字棋,想玩五子棋,或者十字棋怎么办呢
  • 数组大小写死了,缺少了灵活性,所以我们试着把数组大小写都头文件去,以后只要应用一下头文件就可以获取变量了,而且以后修改只需要改头文件里面的变量就可以了。

在这里插入图片描述
创建一个头文件,里面定义数组大小


在这里插入图片描述
创建一个game.c的文件,函数的实现在这个文件里

#pragma once
#define ROW 3
#define COL 3

在这里插入图片描述

前台引用一下头文件,这样就可以到处使用刚刚定义的变量了

2.初始化棋盘

  • 其实初始化棋盘,就是往棋盘里面放空格

    这里的参数是要传过去一个棋盘,和具体的几行几列,才好把每一个二维数组添加空格子进去

在这里插入图片描述

头文件里面声明一下


game函数里面,定义一个初始化棋盘函数

InitBorad(board,ROW,COL);

在这里插入图片描述


初始化棋盘函数的实现,是在game.c文件里面实现
在这里插入图片描述

void InitBorad(char borad[ROW][COL], int row, int col)
{
        int i = 0;
        int j = 0;
        for (i=0 ; i < row; i++)
        {
            for ( j = 0; j < col; j++)
            {
                borad[i][j] = ' ';
            }
        }
}

2.打印棋盘

  • 在game.h定义打印棋盘函数

在这里插入图片描述

  • 在主方法test.c文件,引入打印棋盘函数

在这里插入图片描述

  • 实现打印棋盘函数
void DisplayBoard(char board[ROW][COL], int row, int col)
{
     
    int i = 0;
    for (i = 0; i < row; i++)
    {
        int j = 0;
        for (j = 0; j < col; j++)
        {
            printf(" %c ", board[i][j]);//打印的那一行的数据
            if (j < col - 1) //为了最后一行不打印
                printf("|");
        }
        printf("\n");
        if (i < row - 1)
        {
            int j = 0;
            for (j = 0; j < col; j++)
            {
                printf("---");
                if (j < col - 1)
                    printf("|");
            }
            printf("\n");
        }
    }
}

在这里插入图片描述

3.游戏开始下棋

- 玩家下棋

game.h里面定义函数

在这里插入图片描述

void PlayerMove(char board[ROW][COL],int row,int col);

test.c里面引用函数
在这里插入图片描述

PlayerMove(board,ROW,COL);  
DisplayBoard(board, ROW, COL);  //玩家下好棋 打印棋盘

game.c里面实现玩家下棋函数
在这里插入图片描述

void PlayerMove(char board[ROW][COL], int row, int col) 
{
    int x = 0;
    int y = 0;
    printf("玩家下>\n");
    while (1)
    {
        printf("请输入下棋的坐标:>");
        scanf("%d %d\n",&x,&y);
        if (x>=1 && x<=row && y>=1 && y<=col)  //判断下棋落子 是否在坐标内  
        {
            if (board[x-1][y-1] == ' ') //因为用户 并不是程序员不知道数组是从0开始的,所以减1
            {
                board[x - 1][y - 1] == '*';  //用户下子 *代替
                break;
            }
            else
            {
                printf("坐标已有棋,请重新输入\n");
            }
        }
        else
        {
            printf("坐标非法,请重新输入\n");
        }
    }
}

- 电脑下棋
在game.h里面定义一个电脑下棋函数
在这里插入图片描述

void ComputerMover( char board[ROW][COL],int row, int col);

在主方法main里面引用
在这里插入图片描述

在game.c里面实现电脑下棋
在这里插入图片描述

void ComputerMover(char board[ROW][COL], int row, int col)    
{
    printf("电脑下:>\n");
    while (1)
    {
        int x = rand() % row;   //%3 就是余数0-2 
        int y = rand() % col;
        if (board[x][y] ==' ') //电脑判断是否是可下的地方
        {
            board[x][y] = '#'; //电脑下棋
            break;
        }

    }

}

注意rand()函数要搭配srand()函数一起使用
在这里插入图片描述
随机数需要引用的头文件,直接在game.h 文件里面引用
在这里插入图片描述

4.判断输赢

  • **在写之前,我们是否需要定一个规矩,游戏输赢有4种情况

    1.玩家赢了 - *
    2.电脑赢了 - #
    3.平局        - Q
    4.游戏继续 - C**
    
    **立下这个规则,我们才正式开始**
    
    ---

    在game.h定义函数
    在这里插入图片描述

char IsWin(char board[ROW][COL], int row, int col);

在test.c 写入以下代码
在这里插入图片描述

char ret = 0;   //接受游戏状态 
    while (1)
    {
        //玩家玩
        PlayerMove(board, ROW, COL);
        DisplayBoard(board, ROW, COL);  //玩家下好棋 打印棋盘

        ret = IsWin(board, ROW, COL);    //判断输赢
        if (ret != 'C') //C是我们的继续,如果我们不是C 那就是其他的结局 那么游戏结束
        {
            break;
        }
        //电脑玩
        ComputerMover(board, ROW, COL);
        DisplayBoard(board, ROW, COL);  //电脑下好棋 打印棋盘
        ret = IsWin(board, ROW, COL);    //判断输赢
        if (ret != 'C') //C是我们的继续,如果我们不是C 那就是其他的结局 那么游戏结束
        {
            break;
        }
        
    }
    if (ret == '*')
    {
        printf("玩家赢了");

    }
    else if (ret == '#')
    {
        printf("电脑赢了");

    }else
    {
        printf("平局\n");
    }
    DisplayBoard(board, ROW, COL);  //电脑下好棋 打印棋盘

在game.c实现函数
在这里插入图片描述

//判断游戏是否有输赢
char IsWin(char board[ROW][COL], int row, int col)
{
    int i = 0;
    //判断三行
    for (i = 0; i < row; i++)
    {
        if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] !=' ')
        {
            return board[i][1]; //不管里面是什么元素 都要返回回去
        }
    }
    //判断三列
    for (i = 0; i < col; i++)
    {
        if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[2][i] != ' ')
        {
            return board[1][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];
    }
    //判断平局
    //如果棋盘满了返回1 ,不满返回 0
    int ret = IsFull(board, row, col);   //是否棋盘满

        if (ret ==  1 )
        {
            return 'Q';
        }

        //继续
        return 'C';
}

里面有个IsFull函数 判断棋是否平局
在这里插入图片描述

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; //满了返回1
}

好了以上就是三字棋小游戏的代码了,快来自己动手实现一下吧,这需要一定的二维数组基础知识,其实代码实现不难,尝试去做就可以了。

三字棋源代码

相关文章
|
4天前
|
C语言
【C语言】猜数字小游戏的一步一步实现2
【C语言】猜数字小游戏的一步一步实现
|
4天前
|
算法 C语言
【C语言】猜数字小游戏的一步一步实现1
【C语言】猜数字小游戏的一步一步实现
|
4天前
|
C语言
C语言之三子棋小游戏
C语言之三子棋小游戏
|
4天前
|
C语言
C语言之实现贪吃蛇小游戏篇(2)
C语言之实现贪吃蛇小游戏篇(2)
26 1
|
4天前
|
算法 编译器 C语言
C语言猜数字小游戏(也包含python实现的用法)
本文基于VS2022、pycharm和前面的知识,写一个凭借分支与循环的小游戏,比如: 写一个猜数字游戏 游戏要求: 电脑自动生成1~100的随机数 玩家猜数字,猜数的过程中,根据猜测数据的大小给出大了或小了的反馈,直到猜对,游戏结束 在pyhton中生成随机数是比较简单的,可以直接导入random的包,直接生成随机数,导致写猜数字小游戏变成了判读语句和循环语句嵌套就能写出来,所以我不做过多的介绍了,可以直接看后面的代码展示,想了解更多的python可看python的基础知识,这里面有我在学习python的过程中写的笔记
35 0
|
4天前
|
C语言
爱上C语言:扫雷小游戏,展开一片功能实现
爱上C语言:扫雷小游戏,展开一片功能实现
爱上C语言:扫雷小游戏,展开一片功能实现
|
4天前
|
人工智能 机器人 测试技术
【C语言】C语言实现猜单词小游戏(源码+报告)【独一无二】
【C语言】C语言实现猜单词小游戏(源码+报告)【独一无二】
|
4天前
|
存储 定位技术 C语言
基于C语言实现扫雷小游戏
本文介绍了使用C语言实现扫雷小游戏的过程。扫雷是一款经典的单机游戏,玩家需要通过点击方格来揭示数字或地雷,最终清除所有非地雷方格。实现过程中,首先定义了游戏所需的数据结构,如游戏地图、玩家信息等。然后,实现了游戏的初始化、渲染、输入处理等核心功能。在游戏逻辑方面,处理了点击事件、数字计算和胜负判断等。通过不断优化和完善,最终完成了基于C语言的扫雷小游戏实现,为玩家提供了一种简单有趣的游戏体验。
28 0
|
4天前
|
机器学习/深度学习 小程序 C语言
C语言初学者:原来我也可以实现扫雷小游戏(简易版)!
C语言初学者:原来我也可以实现扫雷小游戏(简易版)!
|
4天前
|
编译器 程序员 C语言
用C语言写一个扫雷小游戏
用C语言写一个扫雷小游戏
37 0