第6-3课:博弈树与井字棋(Tic-Tac-Toe)

上一课简单介绍了博弈树,从编程实现算法的角度看,博弈树是三种树中最简单的一种,无论是原理还是实现都不复杂。这一课,我们就以简单的井字棋(Tic-Tac-Toe)游戏为例,介绍一下如何用博弈树实现一个简单的井字棋 AI,最后的结果并不复杂,我希望大家把关注点放在如何设计数据模型、如何确定落子,以及将博弈树的理论应用到具体的问题等这样的过程上,而不是最后的结果。

Tic-Tac-Toe——规则简单的博弈

小时候,我不知道这游戏的真名是 Tic-Tac-Toe,只知道无聊的时候,和小伙伴们找块沙地,用小树枝画个井字就可以玩半天。井字棋总体来说没什么难度,只要稍微动动脑,两个人玩基本上都是平局,现在想想也没啥意思,但正因为井字棋规则非常简单,所以适合用来做博弈树算法讲解的例子。

这一课的重点依然是实现过程,也就是说如何将博弈树的理论应用到一个简单的游戏实现中,将上一课介绍的算法伪代码翻译成具体的算法实现。

棋盘与棋子的数学模型

井字棋游戏的棋盘类似一个 3 × 3 的九宫格形状,直观上很容易想到用一个 3 × 3 的二维数组表示棋盘,二维数组每个元素的值代表棋盘上对应位置的状态,有三种,分别是空、O 型棋子或 X 型棋子。使用二维数组的好处是数据访问比较直观,二维数组的两个下标可以直接表示棋子的位置,但缺点也很明显,首先是遍历棋盘需要用两重循环处理两个下标,其次是行、列以及斜线方向上都要做是否满足三点连线的判断,根据行、列和斜线的下标变化特点,需要用几套不同的方法处理。

我之前多次说过,很多高效的棋类游戏都用一维数组建模,这一课用井字棋游戏

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吹泡泡的小猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值