JavaScript开发Tic Tac Toe(井字棋)游戏获胜逻辑问题求助
井字棋获胜逻辑代码修正
现有代码的问题点
- 变量命名冲突:函数名和内部存储获胜组合的数组重名,均为
winning,存在作用域覆盖隐患 - 循环边界错误:数组索引从0开始,循环判断条件写为
i <= winning.length会出现数组越界访问,winning[i]得到undefined后读取属性会直接抛出异常,导致获胜判断逻辑完全失效
修正后代码
const checkWin = () => { // 重命名数组避免命名冲突 const winningConditions = [ [0, 1, 2], [3, 4, 5], [6, 7, 8], [0, 3, 6], [1, 4, 7], [2, 5, 8], [0, 4, 8], [2, 4, 6], ]; // 修正循环边界,去掉等号 for (let i = 0; i < winningConditions.length; i++) { const condition = winningConditions[i]; const a = spaces[condition[0]]; const b = spaces[condition[1]]; const c = spaces[condition[2]]; if (a === "" || b === "" || c === "") { continue; } if (a === b && b === c) { roundWon = true; break; } } };
额外优化建议
- 可以给函数增加返回值,直接返回是否获胜,避免依赖外部全局变量
roundWon,降低耦合度 - 获胜后可以同步返回当前获胜的玩家标记,方便后续高亮获胜线、提示获胜玩家逻辑的开发
内容的提问来源于stack exchange,提问作者cHappiness
相关产品推荐
相关产品推荐

