10月 28

一道笔试题

和同学聊天时提到了在新浪面试记中说的那道编程题,这里再描述一遍题目:从1到100中取5个不相同的数,相加小于100,有多少种方法。 给她看了我的方法: 大神问了循环边界的确定方法,然后给出一个改进的版本: 既然是递增排列,那么循环初始值就不用像我的方法那样定死了,然后是最去掉一层循环,意思是最 后一个数有多少种情况是可以直接算出来的,99 … Continue reading

8月 22

C++ stat处理文件属性

用stat函数可以得到诸如修改时间,所有者,文件权限等文件属性。 wgs2sgf在处理对局日期时,由于无法在wgs文件中找到对局时间方面的信息,受贴吧一大神启发,将文件的修改时间作为对局日期: windows中需要用MinGW编译。 下面是函数参考: 时间的转换 日期贮存结构date 时间贮存结构time char *ctime(long … Continue reading

8月 22

用stringstream进行类型转换

stringstream通常是用来做数据转换的。相比c库的转换,它更加安全,自动和直接。先来看stringstream的一个实例,基本数据类型转换例子 int转string: wgs2sgf需要将读取的wgs信息转换成为字符串,以方便统一写入sgf文件。利用stringstream,可以完美的实现转换: 参考:http://www.cpp … Continue reading

8月 22

掩码应用实例

一、什么是掩码 如果要对一个整数中的某些位进行操作,可以用掩码(Mask)。比如掩码0x0000ff00表示对一个32位整数的8~15位进行操作。 二、掩码应用实例 此例记录处理QQ围棋wgs棋谱积分信息时掩码的运用。由于积分信息是要算补码的,负积分求反码时,由于int可能是4个字节,即32位,单字节的ff取反后为ffffff00,不是希 … Continue reading

8月 21

QQ围棋棋谱转换工具wgs2sgf V1.4发布

由于前段时间解析了大部分wgs棋谱信息,诸如贴目,让子棋,点目结果,段位,对局时间等以前无法处理或者处理有bug的问题都一一解决了。现在发布1.4版本,基本上可以完美转换wgs棋谱。 版本预览: 使用方法参见:http://www.annhe.net/article-1962.html 程序下载:点此下载 项目主页:https://git … Continue reading

8月 06

QQ围棋wgs棋谱积分信息

经过又一天的苦逼的努力,wgs文件解读有了新的进展,20h行和50h行又解读了个4个字节,他们表示黑棋和白棋的积分信息,通过积分和段位的对照关系在转换为段位级位信息。 下面是20h和50h行: 无头苍蝇似的算来算去,一开始算前两个字节,倒也可以凑出负的积分来,可是到高分区down个高手的棋谱来,却怎么也凑不出来了。继续算,终于撞大运让我算 … Continue reading

8月 06

QQ围棋wgs棋谱胜负信息

终于解读了wgs中的胜负信息,基本只差对局时间信息了。 胜负信息在60h行,9到d列。期中 9标识的是棋局结束方式,通过UltraEdit修改该字节内容,得下表(PS.又多了一种分析棋谱的方法): 60h,9 意义 00 对局中未分出胜负 01 步数超出上限未分出胜负 02 和棋 03 出错 04 结束 05 游戏被解散未分出胜负 06 … Continue reading

8月 04

一盘让子棋引发的Bug

和一学妹下了盘让子棋,让2子,结果却全盘无活棋。下完之后想将棋谱交给她,于是用wgs2sgf转换,转换完成,打开一看,发现黑白颠倒了,原来wgs2sgf处理棋谱的方式是奇黑偶白,而让子棋正好反过来,奇白偶黑,盘上预先放黑子。 看来wgs2sgf得大改了。凭空又多出一件事来。写程序要考虑的周到真是一件麻烦的事。 用UltraEdit分析这盘 … Continue reading

4月 28

QQ围棋棋谱转换程序wgs2sgf V1.1发布

去年7月写了一个wgs转sgf的小工具,详见C++实现qq围棋.wgs棋谱文件转换为.sgf通用棋谱。程序存在不少问题,主要有: cin方式接收文件名,不能使用tab自动完成。而qq围棋保存棋谱时文件名包含对局时间,昵称,qq号等很多信息,文件名很长,因此需要先手动改文件名,很不方便。 文件名处理有bug,截断.wgs增加.sgf某些时候 … Continue reading

4月 28

C++处理命令行选项

去年写了个小程序,把qq围棋的wgs格式的棋谱转换为sgf格式,当时直接是cin文件路径,wgs那么变态的文件名,每次转换前都要先重命名才方便转换。还有一点,有很多棋谱要转时不方便,得一个个的输入。想到linux上很多工具,一般都是接收选项和参数的,可以用通配符匹配所有同类型文件,很是方便,于是查了些资料,发现实现起来其实很简单。 这里用 … Continue reading