先说我的填充部分
public void playPrev(GoMove gm) //如果没有上一步 { if (m_gmLastMove == null) { return; } Grid[m_gmLastMove.Point.X, m_gmLastMove.Point.Y].removeStone();//删除这个点 m_gmLastMove = gameTree.peekPrev();//更新上一个点 if (gm.DeadGroup != null)//原来的点有气 foreach (Point pt in gm.DeadGroup) { repaintOneSpotNow(pt); Grid[pt.X, pt.Y].setStone(gm.DeadGroupColor); } optRepaint();//重画棋盘 }
这个只要知道变量是干什么的就很好写了。
其余注释在github中
关于这程序的问题,乍一看,最严重的问题就是,只有一个源代码文件。
然后我在程序最上方注意到了这个:
/** * Go Applet * 1996.11 xinz written in Java * 2001.3 xinz port to C# * 2001.5.10 xinz file parsing, back/forward */
瞬间就理解了。
1996年的时候写的java代码,到了2001年就做了移植工作,思路应该还是原来java的。所以这个程序应该就算作是1996年的程序。
看来这些年软件工程在不断有着巨大的飞跃。
另外的问题就是程序的外观没有一种圆润感,特别是棋子没有质感,可以考虑将棋子换成贴图,而不是使用图形库直接描出来。各种元素也都可以换成贴图的形式。
原来是这样:
可以变成这样:
每颗棋子上标好顺序,简洁有力
还有就是可以配上音效,下棋,杀棋。有了音效就如同上阵杀敌一般
还有就是给出局势图:
把当前的气的标出来,也有利于新手学习。
最最最大的问题还是,不能把所有代码都放到一个文件中。
查找字符串在课上大家都已经谢过了,现在给出lambda表达式查找字符个数的代码:
#include <iostream> #include <string> #include <algorithm> using namespace std; int main() { int count=0; string str("hello, world"); for_each(str.begin(), str.end(),[&count](char c) { if (c=='l') { count++; } }); cout << count << endl; return 0; }
查看文件、编译、运行截图(保证可用,代码在github中):