最近写了个五子棋的AI算法,整个算法还是比较简单的,在此记录一下,方便以后忘记的时候回来看看。
棋盘是一个二位数组,然后计算出每一个位置的黑子权重和白子权重,取权重最大的位置就是AI下棋的位置。
因为需求对AI下棋没有过高要求,所以我在此仅做了个简单的实现。
黑子权重:
计算出二维数组每一个未下棋子的点的四个方向(横向/纵向/左斜/右斜)连续(一定要连续)黑子的数量(包括当前点,可以理解为假如在此点下子),所以当前点的权重计算方式为:twoNum * 1 + threeNum * 3 + fourNum * 10 + fiveNum * 100,其中1,3,10,100为我自己设置的各个连续数量分别对应的权重,可以根据自己情况进行更改,由此可计算出各个点的权重。
举例:
如果 arr[5][5]的横向有2个黑子,纵向有2个黑子,左斜有3个黑子,右斜有4个黑子的情况可能是这样:
arr[5][6],arr[4][5],arr[4][4],arr[6][6],arr[7][7],arr[6][4],arr[7][3],arr[8][2]均为黑子,自行脑补。。。。
则arr[5][5]的黑子权重为:2 * 1 + 1 * 3 + 1 * 10 + 0 * 100;
白子权重:
计算方式与黑子一致,取黑子权重和白子权重的最大值的下标,即为AI下子的位置。
还有一些具体细节的处理,如黑子与白子的最大权重相同,如果AI为白子,则下白子权重最大的位置,来达到进攻的效果。其他细节在此不举例,自行考虑。