| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 【三子棋】C语言版——妈咪级讲解 -> 正文阅读 |
|
[C++知识库]【三子棋】C语言版——妈咪级讲解 |
大家好,今天为大家带来三子棋C语言版讲解,这个游戏看着简单,但是对于我这种新手实现起来还是有一定难度的,废话少说,直接开冲。 目录 一、事先准备我们要创建一个头文件和两个源文件 头文件game.h放游戏相关函数的声明 源文件test.c实现主函数,大致的框架 源文件game.c实现游戏相关函数 这样做的好处是将各复杂函数间模块化,也避免一个文件过于复杂,方便检查和相互调用。 定义三子棋棋盘的行和列,使用#define定义 ROW和COL,这里我们先定义为3,后期我们改造这个游戏为五子棋什么的只有改动ROW和COL就可以实现了。 二、用户交互画面用户交互画面主要实现菜单mean函数的打印,供用户选择开始游戏和退出游戏。会用到do……while循环和switch选择结构。 交互画面还是比较简单的,在上一篇猜数字里就详细介绍到了,这里就不多说了。
三、三子棋棋盘的初始化和打印我们要来接受用户传来的值首先就要创建一个数组,并对数组中每个值赋值为空格。 这里我们创建一个char型的board数组行设为ROW,列设为COL。 然后创建一个void函数inti_board(初始化数组,将每个值初始化为空格) 这里我们将board数组作为函数参数传给inti_board,int_board用char board【ROW】【COL】接收数组,推荐使用数组的形式传参,使用指针的方式传二维数组还是比较容易出错的,不推荐。
这样就对数组进行了初始化赋值,接下来我们就要来实现打印棋盘了,棋盘的样式如下: ?这样的棋盘看着就比较像三子棋的棋盘了,接下来我们对这个棋盘进行分析: 表面上是三行,其实这个棋盘是打印三次,每次打印了两种内容的,由两种打印方式实现 1是空格、数据、空格加上竖杠,2是三个减号加上竖杠, 而且当列数为3时不打印最后那个竖杠,行数为最后一行时不打印减号和竖杠 这里我们画图来分析一下: 有了分析,我们就可以很轻松的用选择和循环语句来控制打印,代码如下:
四、玩家输入和电脑输入玩家移动这时我们实现玩家移动player_move,设置一个x,y,用来接受用户输入的坐标,用*来表示用户的棋子同时我们要来进行判断两件事: 1、用户输入的坐标是不是在行列范围之内 2、用户输入的坐标原先是不是空格 这时我们就要来设置一个循环,只有上面两个条件满足了才能将那个坐标的值改动,并且跳出循环。 当然,我们还要考虑一件事,用户可能不知道数组是从零开始的,所以我们要将用户输入的坐标x,y进行减1,再放入到相对应的数组位子中去。代码实现如下:
电脑移动我们将电脑落子定为#,首先我们来思考电脑应该如何下子,电脑应该如何产生坐标,这时我们就可以想到我们猜数字游戏中用过的rand函数来让电脑产生下棋的坐标(因为本人实力有限,不能设计算法来让电脑智能下棋)电脑下子的位子相比玩家下子就易控制一些,我们无需判断他是否会下出界,我们只用%3就可以让电脑产生的值一直再0-2之间,我们只用设置循环来让电脑产生的坐标原来是个空格就行了,然后让子落下,退出循环,再打印棋盘就行了。 这时我们可以设置一点细节,使用Windows.h中的Sleep函数,设置休息时间为Sleep(300)单位为毫秒,也就是0.3秒,来让下棋显得不那么僵硬,函数具体实现如下:
五、判断输赢和平局首先判断输赢我们可以先思考,怎样算赢,三子棋有8种情况判为赢,即行三连,列三连,还有对角线三连。 那平局就很好想了,9个格子全不是空格。 那这里我们先来给个设定,下一步判断一次下棋状况,如果判断有一方胜利,则返回赢的情况中的一个值,如果有平局,则返回一个Q,代表和棋,如果都不满足,则返回C,游戏继续。
我们可以想到,只要返回的是C,游戏继续,如果不是C,那就有三种情况:玩家赢,电脑赢,和平局,这时我们来进行判断。如果有一方触动了胜利的条件,则直接将其中的一个值返回就行了,然后我们来判断是*还是#号。同样,如果触发了平局条件,我们判断是不是平局条件,如果是平局,我们输出平局。那我们要再来实现if_full函数,棋盘满的条件。 和棋就是没有空格,那我们只用每次遍历一遍就行了,实现起来还是比较简单的。
这样,输赢、和、继续就判断完了,我们只需要再来一个打印判断的结果的函数就行了 实现如下:
这样,三子棋全部的函数部分就实现完了,我们现在要做的就是将函数声明放到头文件中,这样文件间就有了关系,文件间就可以相互调用了。 六、头文件和game函数
接下来我们来看一下主函数部分,看一下game函数的主要部分:
这样,三子棋游戏就实现了,总结一下,我们将游戏的函数部分、主函数放在不同的文件,这样有利于我们一步一步的调试,也便于我们分析程序,再将函数声明放在头文件中,这样巧妙的连接了两份源文件,并且减少了冗余。 大家留个赞呗~~ |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 10:43:19- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |