我的结对编程搭档——常秉玉
我和常秉玉以前关系就不错,这个人为人很随和,只是做事有点死板,他做事总是循规蹈矩,平常还总爱上纲上线,但他还保持着一颗童心(我的意思就是他的情商低),总之和他在一起编程有一种互补的感觉。
在编程的时候,常秉玉还是比较认真的,我编程比较随意,不太注重格式,代码效率,他在这方面就给予了我很大帮助,经常会给我提出一些改良代码的建议,但是他还是有些死板,有时候遇到问题解决问题的能力有些欠缺,不能灵活地思考问题的原因。还有,在这次的debug过程中,他测试出了很多bug,他总是能以奇特的输入使程序崩溃,极大地推动了我们找bug的进程,在他身上我学到了精简代码与认真给函数和变量取名的重要性。
这次编程的收获
在这次的编程中我印象最深的就是
容错性
容错性
容错性
起因是常秉玉在测试的时候无意间按下的
就是按下回车之前不小心碰到的 '\' 使整个程序崩溃了,我才意识到我们以前编程大多以实现功能为目的,并没有太多考虑用户的体验,而这次制作游戏(至少我当做制作游戏),让我体会到要站在用户的角度上看待程序,不是所有人都会按部就班的使用程序。我们的程序不能因为用户不小心,不经意的输入错误而崩溃,所以容错性是十分重要的,这次主要是在输入选择的选项或输入数字的时,用户输入了字符后的容错性,因为输入的字符型变量是无法赋值给整型变量,就不能从整型变量上下手,因为scanf在赋值时会返回赋值变量的个数,所以如下:
int a,flag=0;
flag=scanf("%d",&a);
就得到了标志变量flag,这样就可以判断是否正确输入了整型变量。
西卡西,随之我们就发现了问题,这样做可以判断,但是输入字符后就无法正确输入数字了!经过几次尝试,确认是缓冲区里的字符阻塞了数字的输入,这样就需要引入清除缓冲区函数:
fflush(stdin);
写在scanf之前就可以保证输入数字时缓冲区里没有字符阻碍输入,保证了输入的容错性。
在这个过程中我的搭档并没有嫌麻烦、认为我多此一举, 而是帮助我测试程序,我由衷地感谢他的帮助。
其次就是数学研究对编程的影响
再设计程序之初,我就认为一个游戏,一个单机游戏(做不出B/S、C/S了 TAT) 重中之重就是:
AI AI AI
加入AI可以有效提高游戏的可玩性,我找到了关于黄金点游戏的研究:
创新的时机 – 黄金点游戏 - SoftwareTeacher - 博客园
这篇文章指出了黄金点游戏中"G点"的和玩家的理想数值分布
利用这个趋势就可以拟合出玩家的理想数值函数,就此AI的核心就完成了。
但是,在测试AI的时候会出现没有玩家的情况下,AI会逐渐全部选择0的问题,这是因为拟合的对象本身就会无限接近于0,所有要人为地“降低”AI的智商,这里我就采用了两者取其大的方法,让AI的取值空间至少在0~10,让AI变得“傻”一些, 解决了在5~6回时AI全变成0导致游戏崩溃的问题。
总之,这次的作业让我感受到了结对编程的好处都有啥,在编程的时候与别人共享资源是一个非常实用的方法。