萌新第一用C写了一个不正经的三子棋跟扫雷,比较兴奋,控制不住自己想分享给其他人的欲望,让大家看看我这NB的代码
在听到这两个项目之后我当时就懵了,要用C学的那点东西去实现扫雷跟三子棋这两个游戏,我实在是。。。。。。很懵,感觉这么复杂的两个程序不是我学的那点东西可以做出来的,不过在看了别人写的过程之后,我的思路豁然开朗,满脑子就这!?就这!?
下面就说说这两个项目给我的启发
一,分析问题,模块化思想
1.分析问题 x
在写这两个项目的时候我门用了一种我认为比较重要的有意思的思考问题的方法我,要实现一个三子棋,我们要干什么,三子棋的本质就是读取用户输入,储存,读取电脑输入,判断输赢,而为了储存数据所以我创建了一个3*3的数组,所以我们程序的重点就是在这个数组上,而扫雷也是同理,用们也是要创建一个数组储存雷的位置,但我们不能直接把雷的位置告诉玩家,所以我创建了另外一个数组
2.模块化思想
知道问题的大致思路——控制数组上,但是到这还是没有实现的思路,
思考游戏主体,首先应该(打印棋盘),(读取用户输入),(判断输赢),然后再(打印棋盘),之后后电脑又是(电脑输入),在(判断输赢),在(打印棋盘)因为这一个过程是往复直到得出输赢的所以我用一个while(1)循环直到得出赢了或输了之后才跳出这个循环,这样,游戏主体部分就被分成了一个一个的(块)我们把括号中的东西再用函数的知识封装成一个一个的函数——把各项功能交给函数去实现,这样这个游戏就基本上没问题了
同样的方法去分析扫雷的话那就是创建雷区(两个数组),(初始化雷区),(打印雷区),(生成地雷),(排除雷),(判断输赢)
3.调试,调试的方法真的太灵活了,我真TM喜欢
二,具体实现
具体实现的时候我将项目分成了三个部分1.测试(游戏的逻辑部分包括菜单也在这)
2.一个.h文件包含了所我要遇到的头文件和函数声明(便于在其他文件夹使用这些函数,不用多次书写声明),3.实现,我所有的函数都是在这里实现的,这样编写程序有一个很明显的好处,易于调试
三,示例
1.头文件部分
这是我自己创建的名为“个不一般的三子棋.h”的头文件里面包含了我用到的一些库还有我的自定义函数声明,自定义常量是为了可以随时修改游戏的内容,这里我定义的是棋盘的行和列的长度,我随时可以把它改成三子棋或五子棋或围棋
2.测试部分
这个部分我认为是我游戏实现的思路,包含了开始菜单和游戏的主函数
因为玩家玩了一把之后可能还想继续再玩一把,并且至少让同学进入一次游戏菜单所以我用了一个do while()循环,并且根据用户的输入判断是否跳出循环退出游戏
这里的最后一部分,用于判断是玩家赢还是电脑赢还是和棋(根据pd函数的返回值去进行判断)
而之前的部分可以随时更改函数调用的顺序来实现调试等各种功能(这点在扫雷里面尤其好用)因为这个游戏不断重复人输入然后电脑输入这个步骤所以在外层用了一个while(1)循环指知道分出输赢之后才跳出循环结束一句游戏回到菜单部分
3.实现部分
1)菜单
2)游戏说明
3)初始化棋盘
4)打印棋盘
5)人输入
6)电脑输入
7)判断输
8)判断赢
对于调试,一定要分步调试,要不然写道最后东西多了错误比较难以排查,而且调试的方法非常多,尤其是在扫雷那个地方,可以通过更改调用函数的顺序实现各种不同的调试,修改定义的雷的数目,数组的大小等等,还有就是实现的方式是个不相同的,比如扫雷判断赢可以通过进入排查函数的次数,但我是通过统计数组中剩余的*的数目进行判断的,思路可能相同,但是实现的方式有很多
而且对于用户的输入一定要判断书否合法,因为你不知道这个世界上有多少傻逼用户
ps题外话,虽然这个项目看起来很难,但是用的知识确实不多,当你真的试过之后才会发现一切都不过如此,希望跟我一样的萌新们不要畏难,积极努力,才能取得成就
最后欢迎萌新加我WX:SHI2500111