在一行获胜逻辑(Javascript)中重构5
Refactor 5 in a Row Win Logic (Javascript)
我很难把我的获胜逻辑转换成更简洁的东西。我已经尝试过使用for循环来迭代板。我的板是使用uls和lis构建的9x9:
<ul>
<li class="board open"></li>
<li class="board open"></li>
<li class="board open"></li>
<li class="board open"></li>
<li class="board open"></li>
<li class="board open"></li>
<li class="board open"></li>
<li class="board open"></li>
<li class="board open"></li>
</ul>
还有一个由uls和lis组成的不可见网格,这是玩家移动的显示方式。li的背景图像变为该玩家的石头:
<ul>
<li class="grid open"></li>
<li class="grid open"></li>
<li class="grid open"></li>
<li class="grid open"></li>
<li class="grid open"></li>
<li class="grid open"></li>
<li class="grid open"></li>
<li class="grid open"></li>
</ul>
我的获胜逻辑检查行,列和对角线的5在一行中,但我只是找到了每一个可能的获胜情况,并手动写入。下面是行获胜函数的一个示例:
return checkSquares([squares[0],squares[1],squares[2],squares[3],squares[4]]) ||
checkSquares([squares[1],squares[2],squares[3],squares[4],squares[5]]) ||
checkSquares([squares[2],squares[3],squares[4],squares[5],squares[6]]) ||
checkSquares([squares[3],squares[4],squares[5],squares[6],squares[7]]) ||
checkSquares([squares[4],squares[5],squares[6],squares[7],squares[8]]) ||
checkSquares([squares[9],squares[10],squares[11],squares[12],squares[13]]) ||
checkSquares([squares[10],squares[11],squares[12],squares[13],squares[14]]) ||
checkSquares([squares[11],squares[12],squares[13],squares[14],squares[15]]) ||
checkSquares([squares[12],squares[13],squares[14],squares[15],squares[16]]) ||
checkSquares([squares[13],squares[14],squares[15],squares[16],squares[17]]) ||
checkSquares([squares[18],squares[19],squares[20],squares[14],squares[22]]) ||
checkSquares([squares[19],squares[20],squares[21],squares[22],squares[23]]) ||
checkSquares([squares[21],squares[22],squares[23],squares[24],squares[25]]) ||
checkSquares([squares[22],squares[23],squares[24],squares[25],squares[26]]) ||
checkSquares([squares[27],squares[28],squares[29],squares[30],squares[31]]) ||
checkSquares([squares[28],squares[29],squares[30],squares[31],squares[32]]) ||
checkSquares([squares[29],squares[30],squares[31],squares[32],squares[33]]) ||
checkSquares([squares[30],squares[31],squares[32],squares[33],squares[34]]) ||
checkSquares([squares[31],squares[32],squares[33],squares[34],squares[35]]) ||
checkSquares([squares[36],squares[37],squares[38],squares[39],squares[40]]) ||
checkSquares([squares[37],squares[38],squares[39],squares[40],squares[41]]) ||
checkSquares([squares[38],squares[39],squares[40],squares[41],squares[42]]) ||
checkSquares([squares[39],squares[40],squares[41],squares[42],squares[43]]) ||
checkSquares([squares[40],squares[41],squares[42],squares[43],squares[44]]) ||
checkSquares([squares[45],squares[46],squares[47],squares[48],squares[49]]) ||
checkSquares([squares[46],squares[47],squares[48],squares[49],squares[50]]) ||
checkSquares([squares[47],squares[48],squares[49],squares[50],squares[51]]) ||
checkSquares([squares[48],squares[49],squares[50],squares[51],squares[52]]) ||
checkSquares([squares[49],squares[50],squares[51],squares[52],squares[53]]) ||
checkSquares([squares[54],squares[55],squares[56],squares[57],squares[58]]) ||
checkSquares([squares[55],squares[56],squares[57],squares[58],squares[59]]) ||
checkSquares([squares[56],squares[57],squares[58],squares[59],squares[60]]) ||
checkSquares([squares[57],squares[58],squares[59],squares[60],squares[61]]) ||
checkSquares([squares[58],squares[59],squares[60],squares[61],squares[62]]) ||
checkSquares([squares[63],squares[64],squares[65],squares[66],squares[67]]) ||
checkSquares([squares[64],squares[65],squares[66],squares[67],squares[68]]) ||
checkSquares([squares[65],squares[66],squares[67],squares[68],squares[69]]) ||
checkSquares([squares[66],squares[67],squares[68],squares[69],squares[70]]) ||
checkSquares([squares[67],squares[68],squares[69],squares[70],squares[71]]) ||
checkSquares([squares[72],squares[73],squares[74],squares[75],squares[76]]) ||
checkSquares([squares[73],squares[74],squares[75],squares[76],squares[77]]) ||
checkSquares([squares[74],squares[75],squares[76],squares[77],squares[78]]) ||
checkSquares([squares[75],squares[76],squares[77],squares[78],squares[79]]) ||
checkSquares([squares[76],squares[77],squares[78],squares[79],squares[80]]);
如你所见,它长得出奇。我试过做一个嵌套的for循环,每次应该比较5个正方形,但我得到一个无限循环:
for(var a = 0; a < squares.length; a++){
for(var b = 1; b < squares.length; b++){
for(var c = 2; c < squares.length; c++){
for(var d = 3; d < squares.length; d++){
for(var e= 4; e < squares.length; e++){
if((a + b + c+ d+ e) % 5 == 0){
return checkSquares([squares[a],squares[b],squares[c],squares[d],squares[e]]);
}
}
}
}
}
}
我可能试图用一种非常复杂的方式来实现这个重构。所以,我很感谢任何建议。谢谢! !
你不需要检查每个正方形与其他正方形;81 * 80 * 78 * 77 * 76
支票(3074591520
)太大了。即使没有复杂的算法,只要减少问题空间,你也可以走得很远:
- Check rows (9 * (9 - 4) = 45 checks)
- 检查列(相同,45个检查)
- 检查
/
对角线的胜利(懒得做数学,但相同的数量级) - 检查
'
对角线
所以不需要太多的工作,你可以将其更改为100次检查,这将更快,并且你的循环将只是循环遍历行,列和对角索引:
// Rows
for (var row = 0; row < 9; row++) {
for (var col = 0; col < 5; col++) {
var i = row * 9 + col;
checkSquares([
squares[i ],
squares[i+1],
squares[i+2],
squares[i+3],
squares[i+4]
]);
}
}
// Cols
for (var col = 0; col < 9; col++) {
for (var row = 0; row < 5; row++) {
checkSquares([
squares[(row ) * 9 + col],
squares[(row + 1) * 9 + col],
squares[(row + 2) * 9 + col],
squares[(row + 3) * 9 + col],
squares[(row + 4) * 9 + col]
]);
}
}
// etc
相关文章:
- JSON重构(合并内容)与javascript
- 在JavaScript中重构上个月的第一天和最后一天的代码(node.js)
- 将ECMAScript 6析构函数赋值(ES2015)重构为旧版本的javascript
- 我可以用javascript中的switch或case语句重构if-else吗
- 有没有一个好的框架或方法来重构JavaScript对象
- Javascript重构通常称为函数
- 如何在我编写的JavaScript中重构Ruby的#{}方法
- 使用合并/过滤重构Javascript数组
- 终于有办法让重构在Eclipse Kepler中的JavaScript、HTML项目中发挥作用了吗
- JavaScript重构/避免重复
- 在Javascript中重构
- 关于重构大型JavaScript方法的建议
- 重构 javascript 部分以运行的过程或工具
- Javascript:重构循环之外的函数
- 关于将 Javascript 重构为 JavaScript MVC 框架的好教程
- 用javascript重构变量以创建对象
- jQuery/javascript重构问题
- JavaScript:重构对象中的方法和函数存在问题
- 通过特定规则用JavaScript重构JSON
- JavaScript重构-如何重构这些代码