公司实习项目。在从没用过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编程规范中的说明。我上面说的这些也许是大家早就知道的。但毕竟是我自己总结出来的,也给和我一样的新手做参考。
解决方案 »
- 关于线程终止的问题!
- 如何获取Image控件内图片的地址
- ADOConnection
- 何處可以下載倒TRxTrayIcon,TNMUDP,TColorCombobox控件
- 如何在win98下绘制宽度大于1的点划线?
- 请问谁有 INSTALLSHIELD EXPRESS 4.0 EVALUATION 的序列号?
- delphi7中有相当于msxml3.dll中的xmlhttp组件或函数吗?
- 关于TDateTime
- 初涉DELPHI,请高手指教,谢谢了1
- delphi webservice 问题
- sql 语句中between and 查询, 时间参数如何传递?
- delphi中toolbar一直是黑色
说到毅力。这是实习项目啊,没办法,每天在公司也只能一门心思地思考和设计。如果不是公司任务,估计我也没多少心思做。
要学象棋AI算法,最好能了解树、递归。
楼主开源么
但是现在要告一段落了。第二阶段是要做3D方面的小游戏,我还得花时间学习,以前也从没接触过3D。是DX方向的。不能从文件中加载模型,要自己生成,呵呵。
4、把少数的if 语句改成if then else if ,速度也小提升。这些似乎并不会因为这个而提升吧。 的编译器对超过3个以上的if自动优化为case语句;else编译后的汇编代码跟if then 并无太大差别; 可能是更改代码造其它原因吧。