如题,自己只会写人与人,不知如何写电脑下棋.
在CSDN上搜了一些,看到有一篇大概意思是弄一个三维数组来存储棋盘某位置的重要程度.
但我还是不太明白,麻烦讲解一下好吗?如何才能得出该位置是最重要的(即应该下在该处)只要大家告诉我如何实现电脑方如何判断并下子(思路或给点简单例子)就行了,不考虑禁手什么的.
我分数不是很多,又有许多问题还要请教大家,所以给的分数不多.望见谅!!谢谢!!!
在CSDN上搜了一些,看到有一篇大概意思是弄一个三维数组来存储棋盘某位置的重要程度.
但我还是不太明白,麻烦讲解一下好吗?如何才能得出该位置是最重要的(即应该下在该处)只要大家告诉我如何实现电脑方如何判断并下子(思路或给点简单例子)就行了,不考虑禁手什么的.
我分数不是很多,又有许多问题还要请教大家,所以给的分数不多.望见谅!!谢谢!!!
int model[][9]={//-1表示任意,1表示相同颜色,0表示不是2表示(x,y)所在位置
//。
{-1,-1,1,1,2,1,1,-1,-1},//11*11 出现活4 1000分 {-1,-1,-1,0,2,1,1,1,0},//_*111_ 出现活3 500分
}
当你知识库进行模式匹配的时候,就要保证1比2的分值高,因为1再走一步就赢了,这个时候计算机就会选择分值最高的方案,比如上述情况,如果棋盘中两重情况都存在的话,应该选择方案1并再*的位置落子,自然就赢了。至于怎样才能将知识库做的完美,那就不是一个程序员能完成的了, 找一个五子棋高手和你配合吧,好运。
我不明的地方
1:为什么要用3维数组,而不是用2维数组。例如: important[15][15]来分别存储X与Y轴坐标,分别判断横、竖、左斜、右斜的重要程序并累加就好。
2:我明白重要程度的意思,只是不知哪个才是最重要,即哪个条件要加多值,哪个条件可少加一点,哪个条件反而要扣减值。例如:在一个值为空的(即还没有下子)的地方判断各个方向的子,这时如果隔壁有自己的子要加多少值(即自己可能先完成五子的),而如果隔壁是对方子又要加多少值(阻止对方先完成五子),而如果隔壁是边界了要扣多少值(即这个位置不太重要)。
就是不明白哪个才是最重要的,这应该是跟下棋的功力有关。
再硬着头皮仔细看了您的代码,比刚才明白了一点点,是不是
{-1,-1,1,1,2,1,1,-1,-1},//11*11 出现活4 1000分{-1,-1,-1,0,2,1,1,1,0},//_*111_活3 500分
分别是知识库的内容,即先预先设定的判断条件,而我们要做的就是扩充其知识库的判断条件。
然后每个点再分别在这个知识库中寻找分值最高即最重要的条件来落子