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类的算法原理