前言:
刚学玩C一个月,院里有个程序设计的比赛,于是就动手写了这玩意儿。
正文:
首先,对于每一盘棋都有很多种下法,当黑方落下第一颗棋子的时候,白方有254种下法,白方在这254种下法中选择其一后,黑方又有253中下法。如此,将所有的下法都考虑,全部列出来就构成了一颗巨大的博弈树,也称搜索数。这颗博弈树的根节点便是黑方下的第一颗棋子,紧接着的下一层便是白方下棋的所有情况,依次下去,直到结束。而电脑要做的是从下面的子节点中找出最有利于电脑方的节点,也就是最佳走法。谁想得深远,预测的步数越多,棋局了解到位,就越厉害。如果能将未来的所有情况都考虑到位,那必定处于不败之地。
在选择最佳走法中,我们要用到极小极大搜索算法。我们先假设有个对棋局的评价函数,即可以对任何一个局面对电脑方打分,分越高越对电脑有利,分越低却对玩家有利,也就是说这个评价函数是对电脑方而言的,计算机赢则为无穷大,输则无穷小。其它所有情况都在这之间。
如上图就是所谓的博弈树,假如:甲对应电脑方,乙对应玩家。当前该电脑方下棋,即甲0节点,下一层的子节点即该玩家下。双方都希望在未来的局势中,往最有利于己方的方向进行。计算机当然想自己的分高,所以会选