黑白棋的设计说明解说
黑白棋的设计说明
1. 棋盘的表示
在计算机中我用一个10*10的二维数组来表示当前棋局的形势,通过搜索比较,让电脑知道当前的棋局状态,寻找合适的落子点。
棋局数组:int CurChess[10][10];
中间每一层递归产生的新棋局由相应的局部棋局数组来表示。
2. 规则
如图所示,红色棋子表示黑子的可落子点,落子后,中间的白子变为黑方所有。
3. 计算机模拟人下棋(AI)
人下棋时,①纵观棋局,寻找落子点;②比较各落子点给自己带来的收益,选择最大的落子;③在选择落子点时会根据一些自己的经验来进行,比如某一个点十分重要,则下棋时会努力争夺该点,某些点已方占据后非常不利,则会极力避免下在该位置……
或许还有其它一些没有想到。
通过计算机程序来模拟人的思考过程:
A. 纵观棋局,寻找落子点
设定 电脑为:Computer -1 人为: Man 1
我仔细想了下,大概有三种寻找落子点的方法:
a. 通过对当前棋盘进行搜索,找到已方(Computer)的棋子O,然后对O进行八个方向的搜索(因为对于一个点有八个方向的线段通过它,如图)
b. 对当前棋盘进行搜索,找到空白点Ox,然后对Ox进八方向搜索,看是否满足落子条件,即看空白点Ox是否为合乎规则的落子点,如果是,可以进行递归搜索,得到该点的价值,然后将所有合乎规则的Ox进行比较,选择值最大的落子,并改变棋局……
c. 分析可以发现总共有50条直线存在落子的可能性,当然一条线上存在着多个落子的可能性。可能通过对这50条线的固定搜索,找到可落子点,其中也存在着可能重复的现象,所以要像a方法一样对已搜索到的落子点进行比较排除,然后对每个点进行递归深入搜索……此方法我们可以在每个方向上设定一个值表示该方向上是否还存在落子可能,当显示不可能时,我们可以跳过,以节省时间……2.
B. 估值系统
因为此棋最后是比较看谁最后的棋子多谁就赢,所以人在选择落子点的时候主要是判断那个落子点能够吃到的子最多来选择的,每个点代表的棋面实际价值是相同的,所以我们可以设定每个棋子的面值均为1,但棋盘上有一些经验必争点Ax,占据这些点可能带来不是一个或几个子的收益,而是关乎整个棋局的胜负(例如,四个顶点),Ax它具有超过面值1的战略意义;而另外一些与必争点Ax相关的落子点也根据其与战略点Ax位置关系具有不同于面值的战略意义,所以整个估值系统就是要找出各个点的准确战略值x。
由于分析上的难度+本人懒惰所以此程序仅采用一个大概经验值,没有经过详细的统计分析,相信通过详细的分析后,可以提高AI的思考准确性……
本程序中采用设定A为10分,B为-10分,C为5分。当然棋盘上的每个点都有不能的战略意义,但分析起来有点麻烦,我就……
C. 寻找最佳
我们通过对落子点进行递归搜索,并结合估值系统,得到每个落子点的得分,然后比较选择最大进行落子。
4. Computer学习
我也在学习中……
本文地址:http://www.45fan.com/dnjc/73719.html