Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Tic Tac Toe Win Checker是湿的_Javascript_Arrays_Loops_Tic Tac Toe - Fatal编程技术网

Javascript Tic Tac Toe Win Checker是湿的

Javascript Tic Tac Toe Win Checker是湿的,javascript,arrays,loops,tic-tac-toe,Javascript,Arrays,Loops,Tic Tac Toe,对编码/Javascript来说是个新手。写一个基本的井字游戏 我写的游戏是动态的,所以它不会总是一个三乘三的网格,而是任何大于1的大小的网格。我有一个功能完善的游戏和win checker功能,但是win checker非常非常潮湿。我尝试了几种方法来消除它,但并没有找到一种好的模式,它不会导致错误或问题 下面的winChecker函数接收类似于(3x3网格)的2D阵列: const squares=[ [null,null,null], [null,null,null], [零,零,零] ]

对编码/Javascript来说是个新手。写一个基本的井字游戏

我写的游戏是动态的,所以它不会总是一个三乘三的网格,而是任何大于1的大小的网格。我有一个功能完善的游戏和win checker功能,但是win checker非常非常潮湿。我尝试了几种方法来消除它,但并没有找到一种好的模式,它不会导致错误或问题

下面的winChecker函数接收类似于(3x3网格)的2D阵列:

const squares=[
[null,null,null],
[null,null,null],
[零,零,零]
];
winChecker函数如下所示:

const winChecker=squares=>{
对于(列=0;列

上面的功能实际上是有效的,只是非常潮湿。如果您能帮助您将其干燥,我们将不胜感激!

您可以做的一件事是将选择要检查的单元格的逻辑与检查本身解耦

检查行/列/对角线是否都是相同的值可以归结为迭代iterable的逻辑:

函数getGroupWinner(iterable){
让胜利者=未定义;
for(iterable的常量值){
如果(winner==未定义)winner=值;
如果(值!==winner)返回null;
}
返回赢家;
}
…选择要检查的组可能类似于

//假设“grid”是一个数组的正方形数组。。。
函数*getWinnableGroups(网格){
常数长度=网格长度;
常量索引=[…grid.keys()];
const containst=idx=>length-idx-1;
for(设i=0;igrid[j][i]);//第i列
}
//对角线
收益率指数.map(i=>grid[i][i]);
收益率指数.map(i=>grid[i][相反(i)])
}
现在,这为您提供了一个可以说是优雅的检查结果的核心逻辑:

功能winChecker(方形){
for(getWinnableGroups的常量组(正方形)){
const winner=getGroupWinner(组);
如果(获胜者)返回true;
}
返回false;
}

如果它有效,但你需要改进它,那就转到另一个问题上来。我投票将这个问题作为离题题来结束,因为代码有效。应该在代码审查时问它。谢谢,雅各布!是的,这肯定有助于清理它。我甚至没有想过使用生成器函数!