求剧情
算法的乐趣 · 第七十六节

《算法的乐趣》第七十六节

本节承接上文,指出提炼出的函数若功能雷同仍是重复代码,解决办法是把各种条件抽象成统一形式,用一个函数一致处理,即表驱动方法,如第6章过河问题就是把过河动作做成数据表统一处理。

本节承接上文,指出提炼出的函数若功能雷同仍是重复代码,解决办法是把各种条件抽象成统一形式,用一个函数一致处理,即表驱动方法,如第6章过河问题就是把过河动作做成数据表统一处理。switch-case和长if-else结构意味着违反开闭原则,维护中不断增加分支,除表驱动外,第3节、第4节的方法也可替代。

附录B介绍第23章三种棋类AI游戏共用的代码框架,由搜索算法、评估算子、棋盘状态、玩家、控制器五部分组成。控制器持有一个棋盘状态和两个玩家,循环驱动双方轮流落子。玩家是标准接口,可指定人类或计算机玩家;计算机玩家通过Searcher接口的SearchBestPlay方法搜索最佳落子,该方法只能读取棋盘状态,只有控制器能修改棋局。GameState通过Evaluator接口的Evaluate方法评估当前局面,结果是max_player_id一方的利益,评估算法可任意替换。使用时先创建玩家并为计算机玩家指定搜索算法和深度,再用InitGameState初始化棋盘(可预置棋子),然后初始化控制器并调用Run()开始对局。开发者只需专注于搜索算法与评估算子的设计。

‹ 上一章目录

全部 76 章