一个DOS的俄罗斯方块

这是我写的第一个程序,也是我的课程设计题目,那时候大三快结束了吧。用TC20做的,整个程序大小只有6K,按+号可以给自己加分。只是现在玩起来感觉界面的提示有点婆婆妈妈,可惜代码弄丢了,没法改它。从此以后便开始喜欢编程。。。

自动机

可以自己写一个文本,让程序按文本内容说的去做(就是操作程序,鼠标,键盘,窗口,空间,消息、、、),文本的内容不同可以有不同的功能,比如自动登陆一批论坛和网站,自动加qq好友发送消息。这样,你可以使程序每天向论坛向qq上发广告,也可以自动登陆设备,发送各种命令,对设备进行自动测试。

一个简单的工程比较工具

以前做工程整合的时候需要从两个有几万个文件中工程中找出不同,通常的工程比较工具很慢,而且结果也不能保存,所以自己写了一个工具,比较的很快,而却比较两个文件的时候忽略打印、注释、空白,也就是只比较出有效的不同,比较结果保存在当前目录下。

自动关机工具

执行后马上向系统发送关机命令,如果在30秒钟内动了鼠标就会发送取消关机命令。晚上老是睡着忘了关机,所以做了这个程序。一般的关机程序占用资源,而且让一个没有多大用的程序跑在任务栏里面很不爽。使用方法:让windows的控制面板里面的任务计划里添加新的计划,即使它在你想要关机的时刻执行关机程序。整个关机功能不占有进程和内存

五子棋终结者(DEMO版本)

程序目前只有一个 demo 1.0版本,只是用来演示执黑必胜的,还没考虑机器执白的智能
由于只会求解而不会估算,如果机器执白时求到黑棋胜利机器怎么下子??
如果机器执白的话,还没开始下机器就知道自己不管下在哪里都是输,这时候我该怎么让机器下子?
一团矛盾

发现五子棋求解算法基础的错误:

关于对五子棋的两个基本假设的不正确导致求解结果的不正确
------------------------------------------------------
郁闷,程序出来才一天,便有五子棋爱好者报告了两个执白败黑的棋谱,分别如下
A谱--[H8,1][I8,2][I7,3][H7,4][G6,5][G7,6][J6,7][K5,8][F6,9][H6,10][F8,11][F7,12][G9,13][Fa,14][E7,15][D6,16][Ha,17][Ib,18][D8,19][C9,20][E8,21][G8,22][K7,23][I5,24][J5,25][J4,26][K3,27][L6,28][I3,29][H4,30][E6,31][E9,32][D7,33][F5,34][C8,35][B8,36][H5,37][J9,38][Da,39][Db,40][Lb,41][M7,42][N8,43][M9,44][I4,45][J3,46][M6,47][Gb,48]
B谱--[H8,1][I8,2][I7,3][G9,4][J6,5][J5,6][H7,7][G7,8][K5,9][L4,10][H6,11][H5,12][G5,13][J8,14][I6,15][K6,16][F4,17][E3,18][F6,19][G6,20][H4,21][G8,22][Ga,23][I3,24]
经过分析,原来如此:
A谱中黑棋的第7手下子[J6]在程序的原始谱中是不存在的,而是将原始谱向右上角移动一个位置然后再从移动谱的对称谱中找出来的下子。原始谱是存在VC的,其移动对称谱却没有VC
B谱中白棋24手下于[I3]后,黑棋便无法VC取胜

之所以出现以上情况是因为程序求解算法基于以下两个基础的错误假设:
移动对称假设--黑子的原始必胜分支向周围八个方向移动一个格后形成的新分之仍然是必胜的
相对性假设----黑子在某点存在VC冲刺取胜,那么白子在此点4格之外的下子不会对黑子的VC取胜产生影响
以上两个执白败黑的棋谱刚好分别证明了这两个假设的错误,分别图解如下:

移动对称假设的错误

 

 

 

 

 

 

 

 

 

相对性假设的错误

 

 

 

 

 


 

 

 

 

这两个假设是为了加速求解特别添加的。算法之所以在一个星期内遍历完了五子棋的全部空间很大程度上是因为它基于以上两个假设。

程序中将原始谱通过对折旋转形成8种自对称树,每个树向周围八个方向移动一格形成9棵树,所以一共有八九七十二棵移动对称树。去掉移动对称假设不难,只需求解棋谱中的那些移动对称分之,将解补到棋谱中

但是去掉相对性假设会使求解效率致命地降低,而且由于这个相对性假设的错误,已经建立的必胜谱是不可靠的,需要全部从头计算

算法中想当然和草率地使用了以上两个错误的基础假设,我很失望后悔,目前没有时间修正算法和从头计算。

1.0版本已经解决上述的两个BUG(2006.7.27)

 

 

人生在世不称意,明朝散发弄扁舟。

 

 返回首页