|
简单说一下思路:
我们当7 8 5来看问题
当落一个字的时候要判断:
1.自己是否自己能赢 如果自己能赢的话 游戏结束 (攻)
2.是否能马上阻挡别人能赢 如果是 则放在这里 (防)
3.自己是否能造成活4 即当前点处于四子之中 并且这四个子的两边都能组成5个子 (攻)
4.自己是否能造成死4 即当前点处于四子之中 并且这四个子的一边都能组成5个子,另一边可是尽头 ,也可以是别人的子 (攻)
5.别人是否能活4 (攻)
6.别人是否能死4 (攻)
7.自己是否能造成活3 (攻)
8.自己是否能造成死3 (攻)
9.别人是否能活3 (防)
10.别人是否能死3(防)
11.自己活2 (攻)
12:自己死2 (攻)
13.别人活2(防)
14:别人死2(防)
15;自己活1(攻)
16:自己死1(攻)
17:别人活1(防)
18:别人死1(防)
简单按照以上规则 复杂来说不考虑 并不预测出更多的步数用代码来实现的话:
----------------------------------------
1.自己是否自己能赢 如果自己能赢的话 游戏结束 (攻)
判断当前落子的位置向上下左右以及四个斜边 包含自己在内的是否有连续的5个子
2.是否能马上阻挡别人能赢 如果是 则放在这里 (防)
判断当前落子的位置向上下左右以及四个斜边 是否有别人连续的四个子
3.自己是否能造成活4 即当前点处于四子之中 并且这四个子的两边都能组成5个子 (攻)
判断当前落子的位置向上下左右以及四个斜边 包含自己在内的是否有连续的4个子 并且顺延下去的两个方向上都不是别人的子或者已经到了尽头
4.自己是否能造成死4 即当前点处于四子之中 并且这四个子的一边都能组成5个子,另一外可是尽头 ,也可以是别人的子 (攻)
判断当前落子的位置向上下左右以及四个斜边 包含自己在内的是否有连续的4个子 并且顺延下去的两个方向上有一个方向不是别人的子或者已经到了尽头
----------------------------------以上为落子的算法 未完成的有
1.当不能勾成K个字的时候 不去考虑那么多 直接为小
2.当都能勾成多个的时候 要根据是否有别人的在这条边上 取最优
3.当都能勾成多个的时候 根据哪个勾成的多个几活 取最优
4.当都不能赢的时候 不用随机再下子 直接报活棋
如果我们以443或者n=m=k或者k和nm的值相差的并不大的时候来看的话 这几个可以先忽略。最起码这样不用生成游戏树这么庞大的东西、
|
|