Javascript 关于使代码更干净的选项

Javascript 关于使代码更干净的选项,javascript,conways-game-of-life,Javascript,Conways Game Of Life,我做了一个简单的模拟生活的游戏,想知道我是否能让代码更简洁 我有什么选择 jsfiddle: /* 康威的JavaScript生活游戏 */ window.onload=函数(){ var-gridHeight=400; var gridWidth=400; var theGrid=createCellar(网格宽度); var mirrorGrid=createCeller(网格宽度); var-genCounter=0; 种子(); 勾选(); //主回路 函数tick(){ 拉丝研磨();

我做了一个简单的模拟生活的游戏,想知道我是否能让代码更简洁

我有什么选择

jsfiddle

/*
康威的JavaScript生活游戏
*/
window.onload=函数(){
var-gridHeight=400;
var gridWidth=400;
var theGrid=createCellar(网格宽度);
var mirrorGrid=createCeller(网格宽度);
var-genCounter=0;
种子();
勾选();
//主回路
函数tick(){
拉丝研磨();
updateGrid();
计数器();
requestAnimationFrame(勾号);
}
/*返回一个包含n个元素的数组,并放置一个空数组
使用FOR循环在它们中的每一个中创建一个数组。
*/
函数createCeller(行){
var-arr=[];
对于(变量i=0;i

您可以去掉开关,用简单的if语句替换它

        switch (totalCells) {
          case 0:
          case 1:
            mirrorGrid[j][k] = 0; //die of lonelines
            break;
          case 2:
          case 3:
            mirrorGrid[j][k] = 1; //carry on living
            break;
          case 4:
          case 5:
          case 6:
          case 7:
          case 8:
            mirrorGrid[j][k] = 0; //die of overcrowding
            break;
          default:
            mirrorGrid[j][k] = 0; //   
        }
替换为:

if ((totalCells == 2) || (totalCells == 3)) {
    mirrorGrid[j][k] = 1;     //Cell lives on
}else {
    mirrorGrid[j][k] = 0;     //Cell dies
}

此外,您可能希望使用“x”和“y”而不是“j”和“k”,因为它们是坐标。

您可以抽象出在其自身函数中循环每个单元格的操作,如下所示:

function forEachCell(doSomething) {
    // Iterate through rows
    for (var y = 0; y < gridHeight; y++) {
        // Iterate through columns
        for (var x = 0; x < gridWidth; x++) {
            doSomething(x, y);
        }
    }
}
函数forEachCell(剂量测量){
//遍历行
对于(变量y=0;y

看一看:

当我在js fiddle中尝试此功能时,请提供一个JSFIDLE。除此之外,我还有什么其他选择?对不起,我不知道。我现在想不出任何其他主要的选择。只是一些小的调整,比如变量和函数名。这太棒了@NiñoScript,你知道如何缩短开关的大小写。Nightmar版本在我试用时不起作用。NinñoScript,你在吗?是的,我在这里,如果你想聊天,请到这里来:
function forEachCell(doSomething) {
    // Iterate through rows
    for (var y = 0; y < gridHeight; y++) {
        // Iterate through columns
        for (var x = 0; x < gridWidth; x++) {
            doSomething(x, y);
        }
    }
}