课程设计过程记录怎么写
1我们做了什么?
1.1明确了课程设计目标
即采用结对编程的形式完成一个游戏项目——游戏:N个同学(N通常大于10),每人写一个0~100之间的有理数(不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到一2分,其他同学得0分。
基础要求:
采用单机方式实现,需要为用户提供便利的输入界面。
该游戏每次至少可以运行10轮以上,并能够保留各轮比赛结果。后续,软件功能可以不断地扩展迭代,例如:
在课堂上玩,用Excel纪录成绩
做成简单的client/server,用户从手机上输入数字。研讨client/server的API应该怎么设计,如何认证用户?如何开发clientApp?如何在服务器/客户端做时钟同步?如果获得第一名的多个用户的数字相同,如何排定次序?(可以考虑提交时间,历史成绩)
如何设计测试用例,保证server的正确性,效率,压力测试(如何模拟上千个客户端,从不同的端口,提交不同的数字?)
让client 从人输入数字,进化到client程序利用Al算法提交数据。原来是每个人通过client App,手动提交一个数字,然后看谁赢,再继续玩下一轮。client程序能访问所有以前的历史记录,它再推测下一个数字是多少,然后提交。相当于自动下棋外挂。
如果数字很小0.00000000000000000001,下溢了,怎么办?应该提交的是double,float,还是string类型?
·全班同学每人写一个程序,玩一万轮,服务器要能快速处理。如何在服务器和客户端都做到高效,能多少秒钟就比完一轮,并把数据传给所有客户端?客户端是通过什么接口来接受比赛数据,或者从某个公共来源去读取数据?
修改规则,每个用户每次可以提交两个数字,其他规则一样,再玩一万轮。这个时候,有程序会不会提交一个大的数字,来保证自己的另一个数字比较接近 golden number?
让互联网的用户可以通过网站注册,然后用某种domain specified language 写这个Al的规则,然后他们也可以通过网站玩这个游戏。设计这种DSL,并解释执行。例如,DSL可以支持:我每一轮都提交上一轮所有数字的平均值0.6180.618;如果我上一轮的提交的数值小于当轮的golden number,那我的下一个数字要是上个数字的两倍。
扩展到全球,服务器能24/7不断主持游戏,并记录成绩。
1.2在GitHub上创建了repo
1.3完成了项目的第一次迭代
本次迭代实现了黄金点游戏的最基础的功能,如1.1节所述。整局游戏在命令行进行输入、输出。
2我们将要做什么?
每周固定开展两次讨论,分享各自的进展与新的想法
明确该软件项目使用的语言以及整体框架;进一步的,确定除了基础功能外,将要实现哪些扩展功能。
开始进行游戏Version2.0的开发,该版本在实现该游戏最基础的功能基础上,加入图形用户界面,但并不做过多扩展。
3学编程的游戏app软件工程小知识
结对编程在软件的开发中,代码复审能发现很多问题,那么,如果我们每时每刻都处在代码复审的状态,那不是更好吗?事实上,极限编程(Extreme Programming-XP)正是这一思想的体现
为什么不把一些卓有成效的开发方法用到极致(Extreme)?结对编程就是一个例子。在结对编程模式下,一对程序员肩并肩地、平等地、互补地进行开发工作。两个程序员并排坐在一台电脑前,面对同一个显示器,使用同一个键盘,同一个鼠标一起工作。他们一起分析,一起设计,一起写测试用例,一起编码,一起单元测试,一起集成测试,一起写文档等。
结对编程让两个人所写的代码不断地处于“复审”的过程,复审是不断地审核,提高设计和编码质量的过程,结对编程让复审随时随地发生,这样才能及时地发现问题和解决问题,避免把问题拖到后面的阶段。
在结对编程中,任何一段代码都至少被两双眼睛看过,两个脑袋思考过。代码被不断地复审,这样可以避免牛仔式的编程。同时,结对编程避免了“我的代码”还是“他的代码”的问题,使得代码的责任不属于某个人,而是属于两个人,进而属于整个团队,这样能够帮助建立集体拥有代码的意识,在一定程度上避免了个人英雄主义。
结对编程的过程也是一个互相督促的过程,每个人的一举一动都在别人的视线之内,所有的想法都要受到对方的评价。由于这种督促的压力,使得程序员更认真地工作。结对编程“迫使“程序员必须频繁地交流,而且要提高自己的技术能力以免被别人小看。