如何使用矩阵判断井字棋游戏的获胜方?
井字棋获胜判断函数修正方案
你的现有代码存在几个关键问题,导致无法正确判断玩家是否获胜:
- 循环范围错误:仅遍历到索引1,无法覆盖3x3矩阵的所有行、列和对角线
- 逻辑判断错误:用
Or连接的条件会导致只要有一个元素不相等就返回False,但实际应检查某一行/列/对角线的所有元素是否全等于目标值(valeur) - 提前返回问题:第一次循环就直接返回结果,未检查完所有可能的获胜情况
正确的判断逻辑需要覆盖三种获胜场景:
- 任意一行的三个元素全为目标值
- 任意一列的三个元素全为目标值
- 两条对角线的三个元素全为目标值
以下是修正后的函数代码:
Dim matriceDuJeu(2, 2) As Integer '... Function verifierSiJoueurGagne(valeur As Integer) As Boolean ' 检查所有行 For i = 0 To 2 If matriceDuJeu(i, 0) = valeur And matriceDuJeu(i, 1) = valeur And matriceDuJeu(i, 2) = valeur Then Return True End If Next ' 检查所有列 For j = 0 To 2 If matriceDuJeu(0, j) = valeur And matriceDuJeu(1, j) = valeur And matriceDuJeu(2, j) = valeur Then Return True End If Next ' 检查主对角线(左上到右下) If matriceDuJeu(0, 0) = valeur And matriceDuJeu(1, 1) = valeur And matriceDuJeu(2, 2) = valeur Then Return True End If ' 检查副对角线(右上到左下) If matriceDuJeu(0, 2) = valeur And matriceDuJeu(1, 1) = valeur And matriceDuJeu(2, 0) = valeur Then Return True End If ' 所有情况都不满足,返回False Return False End Function
代码说明
- 优先遍历每一行,判断该行三个元素是否全匹配目标玩家的标记(1代表X,-1代表O)
- 接着遍历每一列执行相同判断
- 最后检查两条对角线的元素是否符合获胜条件
- 只要任意一种场景满足,立即返回
True;全部检查完毕都不满足则返回False
内容的提问来源于stack exchange,提问作者Moâtaz Belkouadssi
相关产品推荐
相关产品推荐

