python开发五子棋7 #
- AI类的开发3
- 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类的算法原理