通过这次大作业, 我对游戏的健壮性有了更深刻的了解. 在编写整个代码时, 更多的不是通过自己去规定游戏的进度, 而是通过用户的指令去实现程序的进度. 那么就会有一个大问题, 如果用户没有按规定的指令输进去, 就可能导致整个程序崩溃. 所以, 通过用户的输入便要很强的健壮性.
在刚开始时, 我只会用scanf和putchar. 但是, 它们之间都涉及到一个问题, 缓冲区. 当输入一个字符或以数字, 再按下回车. 循环用的scanf或者getchar程序就会出错. 之后, 我请教了高云帆同学. 他开始给了我一种方式, 刚开始是通先用while(putchar()!=’\n’),后面加一个putchar. 后面我就运用这个方式实现了. 过了几天我在网上看到了头文件<conio.h>有一个函数是getch(), 不需要回车直接输入. 之后我自己换成了getch()因为更加方便. 运用while(1), 加一个跳出标志, getch()输入, 定义好相关字符ASCII码, 比如define a 97,过后用switch. 这样一来就实验了要求输入字符的健壮性, 输入其它便会报错, 要求重新输入.
数字的健壮性. 我也请教了高云帆, 他一开始, 帮我编了一个小函数, 然后我看了看, 研究了一番便. 便知道怎么用了. 我去找很多很相关的资料, 后面我加了一个while(1), 和头文件<ctype.h>中的atoi()函数, 将输入的字符含有的数字转化为一个变量. 只有纯数字便通过, 这样一来就实现了输入数字的健壮性.
因为刚开始的指令是有两个指令, 一个是创建游戏, 另一个是读取游戏, 但是刚开始读取游戏的话, 应该要有提示报错, 也就是说如果我文档不存在, 那读文件的话就要报错, 这个问题就涉及到文件的读写. fscanf的时候它会返回值. 我通过这个来判断数据能不能对上, 如果对不上就报错, 重新创建. if判断这个数便能实现, 这样就实现了文件的健壮性, 这三个健壮性便贯穿了我整个程序的健壮性. 因此, 用户输入指令越多, 最要紧的就是健壮性, 因为用户可不一定会按照专门的指令去写, 所以要自己编写一段程序健壮使程序能够完整地稳健地运行下去.
另外的话, 我对通过这个程序对结构体还有文件读写有更深刻的了解. 刚开始我自己写了将近300行的print去实现剧情, 后来我问问云帆, 有什么简便方法. 他和我商量到, 其实可以用文本读出来. 然后我和他说, 这些文本, 里面还有数据, 这些数据是会因为用户选择而变化. 之后讨论了很久很久之后. 知道了可以用fprintf. 文本内容读到一个数组里, 用fprintf输出. 然后有数据的地方, 用%d, %s更换, 用结构体数据带入.
在编写整个程序主要面临的大问题就是这几个问题, 这些问题也困扰了我很久, 有时候不知道什么原因, 折腾好几个小时. 我大致忙了15天左右. 每天会花一定的时间去编写. 刚开始的话, 觉得300行程序好像并没有什么, 因为平时的时候自己训练大致也会写一个一两百行的代码.
但是我也没有想到, 我编写这个程序的时候我会写到1700左右. 有的人问我为什么要写这么多, 我说不为什么, 我说可以作为自己的一个挑战吧. 因为我觉得, 既然整个课都已经学完了, 而且我也很早就学了这个, 所以可以当成一个结课设计吧!对于自己是一个挑战, 做一件事要么就把它做好, 要么就不要做. 我没有把这个程序单单地看成一个作业, 而是看成一个对自己能力提升的一种方式. 在我学习c语言的时候, 我觉得实践才是怎样真理的唯一标准. 但可能这样的是语言程序设计的一些知识, 可能如果不去回顾可能也会忘. 甚至以后也不会再去涉及这些内容, 但是觉得这门课算是一门计算机的基础语言, 应该要掌握的. 以后自己去学习其他的计算机的方向也会有帮助, 就比如Matlab.
所以与其说这是个作业, 不如说是这个作业给了我. 给了我一个锻炼自己的机会吧.
6月10日再次更新
说是一次大作业又可以说成是期末考试. 可能, 对于我来说重要的并不是这次的作业意味着什么?也不管, 这个作业能给我带来多少分?总之整个过程我尽力了, 遇到的每一个问题我很用心把问题解决, 实在不会的就会找同学请教, 或者上B站重新看一遍相关的内容.
我把所有不知道的, 所有欠缺的地方以及相关函数不知道如何使用的, 都去查阅了相关资料, 相关视频, 直到自己弄明白为止. 我觉得不仅仅是c语言, 学习是这样的一个过程, 其他学科也是这样的过程.
可能相对令我收获最大的并不是我因为这次大作业从中学会了什么什么知识, 学会了怎样的语法. 对于我来说重要的学习的整体, 以及如何去解决问题的方式.
设计整个程序的一个蓝图, 就像高云帆同学和我说的, 现在有了初步的框架思路, 文件分包什么的. 其实不管是以后学习还是现在的学习应该都是这样, 对于我更重要的是面对困难从中成长了多少.
虽然这段时间, 对于我来说. 15天来所付出的精力并不意味着什么. 但能说明我一直在坚持做这个程序. 抛开行数来说, 整个程序我能去完成, 虽然游戏可能相对来说也没有设计的比别人更好. 但是我把我所学的知识所学的基本语法框架思路. 都用上去了, 尽管有些地方还是没有用上, 但是, 也都尽力去完善了, 就像本来要写一个三位的结构体数组, 最后我降成了二维等等.
其次就是, 在原本写的就是原本写代码的时候, 其实我能力并没有达到这种水平. 而是在写程序的过程中我已经慢慢去成长, 慢慢去熟练, 慢慢去收获自己. 像如果不去虚心请教同学或者是不去自主学习, 可能我永远也达不到相对来说好一点的地步, 可能我也仅仅停留在停留在一个低级.
但我觉得自己的人生目标并不是那么的短暂. 也不是因为如果以后不去学习c语言就不会碰这个系列. 我仔细修改了一番, 把一些良好格式也精心的. 模式只运用了一个未完待续的一种结局来结束这个整个游戏, 可能将来有时间, 我会继续接上这个游戏. 有可能是用另一门语言再去接上这个游戏, 总之在以后的过程中, 我会把这个游戏玩成了最佳, 可能语言不一样, 但也是给我自己的一个挑战.
也顺着回到话语, 不能说c语言给我带来了什么, 如果仅仅是表面的话, 它带给我仅仅就是一些语法一些知识一些程序设计, 但是我在整个学习的过程中收获最大的应该就是毅力是坚持.
我第一遍学习的时候, 学的很肤浅. 当时给自己的也是有一个这样的结课仪式. 结课仪式是自己找了一个期末题, 题目是有一段英文. 英文短文, 从中统计多少个单词多少个?统计字母开头的单词数. 整个游戏我花了将近花了9个小时, 从下午2:00-晚上11:00一直在忙这个程序. 因为学的只是很c语言入门, 但是, 在中途过程中我基本把不明白的, 不懂的. 我都请教了高云帆同学. 直到我把整个整个程序完成为止. 在期间我基本没有停留过. 因为我一直在忙着写完这个程序. 最后完成的时候带给我的收获, 不是我完成了这个代码时候, 而是我坚持完成这件事所带给我成长. 就像很多情况下, 不是说结局能带给我什么, 而是过程能给我最大的成长. 所以, 单单只从c语言来说, 对于自己的成长远远是不够的, 不过c语言带给我以后学习的动力却很多.