+ -
当前位置:首页 → 问答吧 → 五子棋人机对战,电脑智能设计思想

五子棋人机对战,电脑智能设计思想

时间:2011-11-24

来源:互联网

人VS人的很简单,但人VS电脑就比较难。
A为电脑,B为玩家
十十十十十十十十十十
十十十十十十十十十十
十十十十十十十十十十
十十十十十十十十十十
十十十BB十十十十十
十十BAAA十十十十
十十十十十十十十十十
十十十十十十十十十十
十十十十十十十十十十
十十十十十十十十十十
要考虑到电脑以后的几步,尽量可以按照人的思维去下棋。
要求设计思想,可能要定义哪些变量。

作者: vipwalkingdog   发布时间: 2011-11-24

检查是否有四个连线的
检查是否有三个连线的

作者: mengxiangyue   发布时间: 2011-11-24

n年前刚开始自学游戏开发的时候写过
人机对弈算法,网上搜索能找到很多的。
一般的思路就是自己定义权值,然后通过递归或回溯法来找到最大权值路径
所谓权值就是自己按某种规则计算的一个值
比如 1个子的权值是1, 2个子的权值是2,3个子的权值是4,4个子的权值是8,5个子最大,等等
总之保证 5个子>4个子>3个子>2个子>1个子
然后根据当前棋子的情况,分别判断每个落子点造成的新的权值的情况,取最大,然后可以通过递归或回溯法预测用户可能的走法,根据难易程度,适当的调整智能,也就是难度大的,就递归层数深一些,难度小的递归层数浅一些。

作者: qybao   发布时间: 2011-11-24

一楼相当于没说。

引用 2 楼 qybao 的回复:
n年前刚开始自学游戏开发的时候写过
人机对弈算法,网上搜索能找到很多的。
一般的思路就是自己定义权值,然后通过递归或回溯法来找到最大权值路径
所谓权值就是自己按某种规则计算的一个值
比如 1个子的权值是1, 2个子的权值是2,3个子的权值是4,4个子的权值是8,5个子最大,等等
总之保证 5个子>4个子>3个子>2个子>1个子
然后根据当前棋子的情况,分别判断每个落子点造成的新的权值的……


很不错。可以实现。
不过我还有点不懂,能具体一点就好了。

作者: vipwalkingdog   发布时间: 2011-11-24

http://blog.csdn.net/xb_crazyman/article/details/1730657

参考。

作者: JavaAlpha   发布时间: 2011-11-24

http://hi.baidu.com/%C7%FA%D5%DB%B5%C8%B4%FD/blog/item/7573091f4aee7502314e15e0.html
别人做的大作业,可以看看

作者: funfenffun   发布时间: 2011-11-24

引用 3 楼 vipwalkingdog 的回复:
一楼相当于没说。


引用 2 楼 qybao 的回复:
n年前刚开始自学游戏开发的时候写过
人机对弈算法,网上搜索能找到很多的。
一般的思路就是自己定义权值,然后通过递归或回溯法来找到最大权值路径
所谓权值就是自己按某种规则计算的一个值
比如 1个子的权值是1, 2个子的权值是2,3个子的权值是4,4个子的权值是8,5个子最大,等等
总之保证 5个子>4个子>3个子>2个子>1……

这个没法再具体了,再具体就成了用代码说明了
基本上就这个思路,每次落子的时候,判断每个可能的落子点的权值(这个权值是综合值),比如横向够成2个子,那么横向的权值为2,纵向构成3个子,那么纵向权值为4,对角线方向构成4个子,那么对角线方向权值是8(这里需要注意点的是,堵死的情况下权值为0,比如虽然可以连成4子,但是各方向被堵死无法连成5子,此时该点的该方向的权值可以视为0),然后权值加起来,每个落子点的综合权值不同的情况,取最大权值的落子点,如果权值相同,随机取一个落子点

作者: qybao   发布时间: 2011-11-24

我有点思路了。。。。

作者: vipwalkingdog   发布时间: 2011-11-24

热门下载

更多