homework-06&homework-09
homework-06
1) 把程序编译通过, 跑起来 , 把正确的 playPrev(GoMove) 的方法给实现了.
public void playPrev(GoMove gm) { // need to reconstruct Point p = gm.Point; m_colorToPlay = gm.Color; // Get current set point and the color of pieces clearLabelsAndMarksOnBoard(); m_gmLastMove = gameTree.peekPrev(); bDrawMark = true; Grid[p.X, p.Y].die(); if (gm.DeadGroup != null) { foreach (Point pt in gm.DeadGroup) { Grid[pt.X, pt.Y].setStone(gm.DeadGroupColor); } } optRepaint(); //show the movement information textBox1.Clear(); textBox1.AppendText(gm.Comment); return; }
2)根据你选择的教材 (三本之一或更多),点评一下这个程序设计方面的不足,例如:编码风格,程序架构,程序的错误处理,文件处理,UI 等等.
对于这份代码我只能呵呵了,代码基本上时一气合成,没有经过任何重构,读完一遍发现基本是在浪费生命,如果说这时让我们在练习重构的话,用这份这么RAW的代码代价不免太大了吧。
编码风格:变量命名风格不统一,命令名已没有经过仔细的设计,还存在大量类似textbox1之类的写法。
程序架构:完全看不出controler和model是如何分离的,识图也是手工控制绘制的,可维护性太差,对于游戏本身而言毫无模块可言,丝毫看不出有不同模块的划分,打谱和下棋完全在同时进行,而且两方面都有严重的bug。大量没有实意的代码让人不知所云,至今不理解mark和label发挥着怎样的作用。
错误处理:代码直接进行错误判断,没有可圈可点之处。
UI:实现上注重了很多细节,效果非常不错,但是在架构上没有解耦成独立的view,难以控制。
3) 程序的注释, 请把这个程序中被标成 “zzzz” 的注释都恢复过来。
详见https://github.com/swejlfdc/homework-06/tree/master/buaa_GO
homework-09
1. 了解Lambda的用法
计算“Hello World!”中
字母‘e’的个数
字母‘l’的个数
int count(string&& s, char ch) { int ret(0); for_each(s.begin(), s.end(), [&ret, &ch](const char& val) { ret += (val == ch); } ); return ret; }
2. 练习使用智能指针
打印“Hello World!”循环右移n位的结果
Example:
n = 1, output = “!Hello World”
n = 3, output = “ld!Hello Wor"
void RSHT(char* s, int n) { int len = strlen(s); unique_ptr<char[]> ts(new char[len + 1]); n %= len; strncpy(ts.get() + len - n, s, n); strncpy(ts.get(), s + n, len - n); ts[len] = '\0'; strcpy(s, ts.get()); }