Delphi版的中国象棋终于接近完工了,说点心得(关于提升搜索速度的)。
时间:2011-11-03
来源:互联网
公司实习项目。在从没用过delphi的情况下,我花了大概1个月时间。
中国象棋的功能:人机和人人对弈。
1、让棋(用鼠标选择要让的棋,将帅不可让)。
2、悔棋(走几次悔几次)。
3、保存和打开棋局功能。
4、合法的走棋路线提示(当玩家点一个棋后在合法的位置画圈提示,可选功能)。
5、已经走过的路线提示(可选)。
6、跳转到任一已经走过的棋局功能。
7、红黑棋选择功能。
有完整而可靠的规则判断(如将帅不能见面等)。
人机对弈功能是核心所在。我从最初的极大极小一直改正和测试,最终是用了alpha-beta+pvs搜索算法。但是我的估值函数是用了最简单的,只含有棋子本身棋力价值的估值,没加任何别的东西。但是深度为4的情况下,门外汉已经基本将不死电脑了。
在我那台E2160CPU下,四层的深度大概用时2秒左右。5层要慢一些,十秒到几十秒。
最初我写的代码执行起来在搜索的时候相当慢,即使是不改变搜索算算法的情况下,四层搜索也要一分钟以上,真是杯具。后来我在不改变算法的情况下做了优化,主要是以下几个方面,搜索速度从一分钟变到几秒:
1、原来我存储棋子用的是string数组保存中文字符如“将”,最后我改成了integer数组,把“将”用一个整数代替,速度大约提升了一倍以上(在走法产生中要不断进行规则断定和走法测试,用string真的很慢)
2、原来我有几个走法产生中要调用的函数返回的是string类型,我改成返回integer或char类型,速度大概提升30%。
3、把N个if 语句改成case语句,并且按顺序排列,速度提升。
4、把少数的if 语句改成if then else if ,速度也小提升。
5、把 if (复杂判断语句) and/or (简单判断语句) then 中的二个判断语句的顺序调换,把简单的放在前,复杂的放在后,速度大幅提升(特别是if 在for语句中)。这个可以参考delphi编程规范中的说明。
我上面说的这些也许是大家早就知道的。但毕竟是我自己总结出来的,也给和我一样的新手做参考。
中国象棋的功能:人机和人人对弈。
1、让棋(用鼠标选择要让的棋,将帅不可让)。
2、悔棋(走几次悔几次)。
3、保存和打开棋局功能。
4、合法的走棋路线提示(当玩家点一个棋后在合法的位置画圈提示,可选功能)。
5、已经走过的路线提示(可选)。
6、跳转到任一已经走过的棋局功能。
7、红黑棋选择功能。
有完整而可靠的规则判断(如将帅不能见面等)。
人机对弈功能是核心所在。我从最初的极大极小一直改正和测试,最终是用了alpha-beta+pvs搜索算法。但是我的估值函数是用了最简单的,只含有棋子本身棋力价值的估值,没加任何别的东西。但是深度为4的情况下,门外汉已经基本将不死电脑了。
在我那台E2160CPU下,四层的深度大概用时2秒左右。5层要慢一些,十秒到几十秒。
最初我写的代码执行起来在搜索的时候相当慢,即使是不改变搜索算算法的情况下,四层搜索也要一分钟以上,真是杯具。后来我在不改变算法的情况下做了优化,主要是以下几个方面,搜索速度从一分钟变到几秒:
1、原来我存储棋子用的是string数组保存中文字符如“将”,最后我改成了integer数组,把“将”用一个整数代替,速度大约提升了一倍以上(在走法产生中要不断进行规则断定和走法测试,用string真的很慢)
2、原来我有几个走法产生中要调用的函数返回的是string类型,我改成返回integer或char类型,速度大概提升30%。
3、把N个if 语句改成case语句,并且按顺序排列,速度提升。
4、把少数的if 语句改成if then else if ,速度也小提升。
5、把 if (复杂判断语句) and/or (简单判断语句) then 中的二个判断语句的顺序调换,把简单的放在前,复杂的放在后,速度大幅提升(特别是if 在for语句中)。这个可以参考delphi编程规范中的说明。
我上面说的这些也许是大家早就知道的。但毕竟是我自己总结出来的,也给和我一样的新手做参考。
作者: mjsxjy 发布时间: 2011-11-03
牛人啊。。象棋那么多套路、规则,能算出来真牛人。。。这段时间偶尔去中国游戏中心下下棋,就在想,TNND,这如何设计的呢?
作者: luckyrandom 发布时间: 2011-11-03
顶你。 像我就做不出来的。 如果可以,希望能学习你的代码。
作者: onlyou13 发布时间: 2011-11-03
算法设计比编程难
作者: QQ56430204 发布时间: 2011-11-03
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28