BlackJack--C语言实现的小游戏的过程总结

这是本学期AlgorithmTP的一个结课项目,让做一个21点的小游戏。最初我是希望能够做出一个界面稍微友好点的小游戏的。但是没想到最后还是没时间,而且嫌麻烦就没有实现什么界面。

经过统计,本项目从12.1号做起,截止今早凌晨一点,12.8号,总共花费了30.25小时的时间。日均花费4.32小时,总代码量为640余行。当然我在怀疑计算日均耗时有何意义,因为最后一天累计花费了12.25小时的时间在这上边,基本占去了三分之一,其编程进度把控上是绝对存在问题的,因为我们看出主要工作完成侧重于后期,前期发力明显不足,因而带来的副作用就是在deadline之前拼命编啊,没日没夜,每天熬夜到一两点,这也倒是没什么,关键是在电脑面前一坐就是四五个小时啊!!!怪不得都说嫁人就嫁程序员啊,为什么?挣得多死的早啊!虽然只是玩笑,然而,也足可见程序员之辛苦以及编程带给人健康及对生活习惯的影响。

当然或许也是我自己编程也太少,至少一直没有成为我生活的主旋律,不知道工作以后会不会啦。所以没有养成良好的编程习惯,也许,经过合理的培养和探索,我们也可以找到一个合理的方式处理编程和健康的平衡。不过,不得不说的是,我也知道健康重要,长时间坐着,更何况是坐在电脑前,对身体极为不好,印象很深的是,昨天下午本计划一口气编程两个半小时然后休息会,但是真是没想到快到点的时候就停不下来了,觉得自己就快成功了,就快见到成果了,于是继续调试,改错啊,知道最后就完全陷进去了,哪知道外边这世界是啥样的啊。程序员很多喜欢熬夜写代码,或许也是不想被白天各种琐事打断思路吧,因为很多时候思路被打断了,还需要花时间再进入状态,尤其是对于大点的程序和项目。不过,中途我也采用了在笔记本上记录思路和画简易流程图的方法,一边编程,一边记录不同的逻辑出口,对他们进行分类,逐一实现和测试。这对自己理清思路,记下思路以及及时回复思路起到了非常好的作用。怪不得我们软件工程这么讲究文档的重要性呢,这些东西真的是非常有用的。不听老人言吃亏在眼前啊,可惜我是到项目后期才开始画图的(刚去确认了下,是在倒数第二天晚上即12.06号才开始画图记录),这时候程序基本的框架都打好了,但是感觉自己对整体结构把握不够清晰,才有想法把思路记下来,整理一下,而自己只是评脑子空想的话,而且一调就是几个小时,自己脑子实在是不够用呐Orz。也导致了最初阶段很低效,不过还好对后期我临阵改整体逻辑也做了很好的方法铺垫,否则我绝对会重蹈大一时做那个购物网站的覆辙,要交之前改动太多导致最后都调不出来了。

还有一个明显的教训是千万要记得经常备份不同阶段的开发版本,因为说不定自己一时没想清楚而中途更换思路而导致最后程序调不出来,最后还发现自己新思路错了但是源代码被抹掉了。这次,我开始利用github做版本的管理,它上边有一个可以建分支的功能,实现在某个节点的不同开发,目前我对这个功能还不太了解,但是存不同的版本,用它就可以了。但是它做的不能直接上传代码,只能粘贴复制,以后如果能直接上传文件的话就更好啦。

*************************************程序分析**************************************

1.全局变量的使用

这次写程序开始使用静态全局变量,明显感到在函数参数上的简化,无须在不同的函数调用之间传递参数。但是在使用过程中,因为我在这个c语言程序中实现了类似页面刷新的功能,应用了while(1)永真循环,只要不退出系统,静态全局变量的值都会保留上次的值,所以要特别注意,及时对全局变量的值进行恢复初始化状态。全局变量会增加程序各模块之间的耦合度,导致调试时的复杂度增加。

2.关于在屏幕上打印的事项

最初,没有太多考虑程序在屏幕上打印的美感,因而没有太注重输出格式,这在后期也导致我专门花了时间来处理全部的printf()语句及scanf()语句。其实自己有空的时候,可以写一个函数把这些简单的活儿都实现了,存在GitHub上,以后直接拿去用就好了。后期交项目的时候都没有时间改界面了,手忙脚乱的交上了糙本。

3.C语言控制台的黑窗口下实现页面的刷新和来回跳转切换

我在后期开始在纸上整理思路的时候,想到了通过设置页面标号(写在注释里)来实现对程序逻辑点的定位,程序怎么跳转,以帮助调试修改程序,同时可以在思路被打断后重新迅速接上。实现页面刷新很简单,无非是一个清屏函数就可以解决,但是跳转的逻辑设计和调试则很麻烦。

实现结构:while(TRUE)永真循环+switch()条件分支(由此导向不同的过程,模块的入口)

分析:1.在这里使用switch条件分支是因为他相比与if条件分支更容易阅读和维护;

          swtich的作用就是程序主干道上的分叉路口,原来一条路,现在要分很多个不同 的路,不同的方向了。请把程序看活,不要以为他只是一堆字符集,他其实是在给 你编织一个道路网路,你设计的好,就能四通八达。

这里需要注意swtich和ifelseif结构都只能实现一次选择只能从多条路终选择一条 路。

2.while永真循环结构的关键是设置合适的断点,在这里断点其实就是跳出点,亦 即该循环的出口,一般为break,continue,return;

4.关于c程序运行的理解

对c语言程序,他执行的入口是main函数,在这里,你开上了一辆车,开始了你的c程序之旅。最初要声明,声明相当于是出发前先把需要用的瓶子罐子带全(路上要装东西),然后main里是有主逻辑的,这里正常情况下是顺次往下执行,这个主逻辑就是主干道。因为有了条件分支语句和跳转语句,从而使程序的主逻辑变得复杂多样起来。条件分支语句是主干道上的路口,条件其实是路口的指示牌,是道路名字,所以你设计的条件就是在设计分支的道路名称,那么跳转语句是什么呢?跳转语句其实是每一条分支道路的终点,亦即目的地是哪里。主干道上单独的if(){}语句是什么呢?他有这么两个功能,一个是对你带的瓶罐,就是那些个麻烦的变量,往里边装点东西(赋值),换点东西装进去(修改值);再一个是有一个很爽的功能,如果你不想跑了想回家睡觉了,这里可以安一个瞬间转移return语句,乖乖回到出发点吧。函数就是路上的一家家提供各种服务的商店。跟用户交互的过程则是跟外界交流的过程。

5.用while(1)永真循环实现对用户输入数据的合法性进行检验

为了保证跟用户交互的过程中用户输入数据的合法性,需要进行合法性检验。这个过程是持续不断的直到用户输入有效数据才会有正确的反应。c语言中我们主要通过提供选项的方式告诉用户不同的入口,用户主要是给出选择。然后使得程序正确的执行下去。

6.设计思路的重要性

先把程序的主逻辑设计正确,有一个好的设计思路真的是非常重要!!!方案拿出来之后,编程则只是个翻译的活儿了。不要一边编程一边写,因为,很多时候,脑子真的不够用!相信流程图等软件设计过程积累的方法论,会让你少走弯路。

7.仔细读题,题目要求很重要

这次我把该游戏的规则搞错了,不仅自己设计的逻辑复杂,花费了大量时间不说,临到交付前四五个小时的时间才意识到,接着大动干戈,虽然勇敢地承认理解错了的现实,改掉了主逻辑,但是差点没调处来,随着deadline的逼近,差点没崩溃,看来心理素质真的是更上一层楼了,知道急反而更会添乱。不过最后还是晚交了一个多小时。。


猜你喜欢

转载自blog.csdn.net/fegnkuang/article/details/41812885