我如何累积晶体?

时间:2019-04-12 21:46:45

标签: javascript

我已经编写了两个函数(takePath和movePlayer),它们对应于沿着网格的“移动”,网格上的斑点表示壁(1),平底(0)和晶体(2)。问题的这一部分要求我们编辑takePath函数以跟踪播放器收集的晶体数量。 (如果移入墙壁,将返回到原始起始位置,并且晶体将重置为0)。

从左上角开始按行主要顺序存储图块(注意:这意味着y轴是倒置的。减少y坐标在地图上的移动)。例如,如果网格为[[1,1,1],[0,2,0],[1,1,1]],则级别将在3x3网格上播放,其中该级别的顶部和底部各行都是墙砖,中间的行从左到右包含一个地砖,一个水晶和另一个地砖。如果玩家从第二行的最左边的图块开始,他们将能够向右移动两次以完成关卡。要访问图块,我们将使用[x,y]坐标,其中x是列号,y是从左上角开始并从0开始计数的行号。这允许图块点与数组索引相对应。例如,出口将位于点[2,1]处,并可以通过grid [1] [2]进入。

我已经尝试了for循环,if else语句等许多不同的组合,试图使其无效,因此下面只是一个有效的movePlayer函数和未编辑的takePath函数

function movePlayer(json_object, f){
    var level = JSON.parse(json_object);
    var grid = level["grid"];
    var pos = level["start"];
    var x = pos[0];
    var y = pos[1];
    var wacc=0,dacc=0,sacc=0,aacc=0
    if (f=="w"){
      y = y - 1;
      wacc+=1;
    }
    else if (f=="s"){
      y = y + 1;
      sacc+=1;
    }
    else if (f=="a"){
      x = x - 1;
      aacc+=1;
    }
    else if(f=="d"){
      x = x + 1;
      dacc+=1;
    }
    if (grid[y]===undefined || grid[y][x] == 1){
      x=x+aacc-dacc;
      y=y+wacc-sacc;
      pos=[x,y];
    }
    else if (y >= 0 && y < grid.length && x >= 0 && x < grid[y].length){
      pos = [x, y];
    }
    else{
      x=x+aacc-dacc;
      y=y+wacc-sacc;
      pos=[x,y];
    }
  return pos;
}


function takePath(jsonlevel, moves){
    var usable=JSON.parse(jsonlevel);
    var start=usable['start'];
    for(var move of moves){
        jsonlevel=JSON.stringify(usable);
        start=movePlayer(jsonlevel,move);
        usable['start']=start;
    }
    return usable['start'];
}

0 个答案:

没有答案