跳至正文
View Categories

1 min read

python开发五子棋7 #

  1. AI类的开发3
  2. AI类的开发4

收获 #

了解五子棋人机交战背后的python原理,通过PyGame实践学会独立建立和更新项目,完成五子棋游戏开发
了解人机交战背后的机器判断原理

AI类的开发3 #

本小节为AI类开发的方法设计中,AI判断落子位置权重值的划分方法

################在上一节_get_direction_score()函数中, 跳出 if _flag != 0判断语句后添加以下代码###############
'''
权重值划分:
(己方连续四子>敌方连续四子)>(己方连续三子无阻挡>敌方连续三子无阻挡)>(己方连续三子有一个阻挡&&己方连续两子无阻挡
>敌方连续三子有阻挡&&敌方连续两子无阻挡)>(己方连续两子有阻挡>敌方连续两子有阻挡)
无空格>有空格,两种情况应在同一数量级(紧跟在括号后)
优先级量化 9 10 90 100 900 1000 9000 10000
'''
score = 0 # 初始化权重值,判断落子选择的优先级
if count == 4: # 若己方连续四子
    score = 10000 # 优先级参考备注
elif _count == 4: # 若敌方连续四子
    score = 9000 # 优先级参考备注
elif count == 3: # 若我方连续三子
    if both == 0: # 若我方连续三子无阻挡
        score = 1000 # 优先级参考备注
    elif both == 1: # 若我方连续三子中有一个阻挡
        score = 100 # 优先级参考备注
    else:
        score = 0 # 优先级最低
elif _count == 3: # 若敌方连续三子
    if _both == 0: # 若敌方连续三子无阻挡
        score = 900 # 优先级参考备注
    elif _both == 1: # 若敌方连续三子中有一个阻挡
        score = 90 # 优先级参考备注
    else:
        score = 0 # 优先级最低
elif count == 2: # 若己方连续两子
    if both == 0: # 若己方两子间没有阻挡
        score = 100 # 优先级参考备注
    elif both == 1: # 若两子间有一个阻挡
        score = 10 # 优先级参考备注
    else:
        score = 0 # 优先级最低
elif _count == 2: # 若敌方连续两子
    if _both == 0: # 若敌方两子间没有阻挡
        score = 90 # 优先级参考备注
    elif _both == 1: # 若敌方两子间有一个阻挡
        score = 9 # 优先级参考备注
    else:
        score = 0 # 优先级为0
elif count == 1: # 若己方只有单个落子
    score = 10 # 优先级参考备注
elif _count == 1: # 若对方只有单个落子
    score = 9 # 优先级参考备注
else:
    score = 0 # 优先级最低

if space or _space: # 若己方或对方连续棋子内存在空格
    score /= 2 # 优先级降低

return score # 返回优先级

AI类的开发4 #

本小节为AI类开发的方法设计中,判断指定位置处在指定方向上是我方子、对方子、空

########################在AI类下, _get_direction_score()函数后,添加以下新的功能函数#####################
# 判断指定位置处在指定方向上是我方子、对方子、空
def _get_stone_color(self, point, x_offset, y_offset, next):
    x = point.X + x_offset
    y = point.Y + y_offset
    if 0 <= x < self._line_points and 0 <= y < self._line_points:
        if self._checkerboard[y][x] == self._my.Value:
            return 1
        elif self._checkerboard[y][x] == self._opponent.Value:
            return 2
        else:
            if next:
                return self._get_stone_color(Point(x, y), x_offset, y_offset, False)
            else:
                return 0
    else:
        return 0

小结 #

本节主要讲述了人机交战背后AI类的算法原理