homework-06
1) 把程序编译通过, 跑起来。
读懂程序,在你觉得比较难懂的地方加上一些注释,这样大家就能比较容易地了解这些程序在干什么。
注释请见GitHub...
把正确的 playPrev(GoMove) 的方法给实现了。
1 public void playPrev(GoMove gm) 2 { 3 Point p = gm.Point;//要被移除的点 4 m_colorToPlay = gm.Color;//获取此点的颜色,继续后不改变颜色 5 clearLabelsAndMarksOnBoard();//清除信息 6 m_gmLastMove = gameTree.peekPrev();//获取上一步信息 7 bDrawMark = true;//清除highlight 8 Grid[p.X, p.Y].die();//清除此点 9 if (gm.DeadGroup != null)//恢复被吃掉的点 10 { 11 foreach (Point pp in gm.DeadGroup) 12 { 13 Grid[pp.X, pp.Y].setStone(gm.DeadGroupColor); 14 } 15 } 16 optRepaint();//重绘 17 return; 18 }
2)根据你选择的教材 (三本之一或更多),点评一下这个程序设计方面的不足,例如:
编码风格
呵呵了...程序结构性比较差...变量函数过程命名比较随意...不容易读懂...
用单屏显示器来读程序真的是很费劲啊...
当然也有优点...比如每个函数过程的长度都没有超过一个显示器的宽度...
程序架构,有哪些不符合良好的设计,这个程序的设计模式 (MVC等) 是高端大气国际化的么? 等等。
MVC是神马...
最大的感觉就是混乱...比如关于棋谱的文件操作and界面UI设计and下棋过程混在了一起...
导致这份代码长度超出了我的想象...
建议可以用多个.cs文件将各个部分分开写...也方便查阅不同的部分的内容与debug...
程序的错误处理,文件处理,UI 等等
真的有错误处理么!
文件处理应该有错误处理...(感谢编译大作业让我知道了一个道理:你永远不能认为用户会输入你想要的内容...)
可惜我不会使用.sgf文件...要不我就编几步错误的棋谱...
好像我没有找到关于这方面的错误处理...
UI看着还算友好...但是也没有任何美化...
如果点击最大化时程序内各个部分的大小能够随着框架变大而变大就好了...
3) 程序的注释
注释请见GitHub...
4)选择题:
对于功能上的小问题, 那么你怎么改进呢? 请选出 1-2个你想做的改进,然后运用你的各种编程技术和能力把这些改进给实现了(必须明确指出改进/增加了哪一个功能)。
把所有的改进都实现之后,把代码签入GitHub,经历了这一番改动,你的程序和别的同学的程序就很不一样了。
改进一:可以将每个人每一步所下子的信息显示在信息框内,不过这个改动需要改变的是在撤销操作时同时清除此步的信息。
改进二:代码中的计算当前子与连通部分的气的代码是采用递归方式的...我不禁想起上学期密码学郭华老师所讲...尽量不要用递归...可以改成压栈式非递归...
如果大家有时间并有兴趣,可以做一些大的改进:
a) 如果我要把这个程序变成一个可以人机对战的小游戏 (假设你的AI 模块已经写好,这里我们就可以让一个函数返回一个合法的位置就可以), 那这个程序的架构应该怎么变化? 请把这个功能写出来。
首先选定玩家执黑还是执白,轮到AI时,调用AI模块返回一个点的左边,在棋盘上显示即可。
b) 如果我想让这个程序变成两个用户可以通过网络对战,这个程序的架构要怎么变化?
服务器真心不懂啊...上次我们组服务器端是王文涛所写...
不过我觉得可以用ftp协议上传你提交的点的坐标,然后从ftp上下载对方提交的坐标,在客户端显示即可。