首页 > 解决方案 > 玩家无法在瓷砖上重踩的网格拼图 - 处理

问题描述

与 Pokemon Sapphire/Ruby/Emerald 中的 Sootopolis Gym 的概念相同,即一旦踩到一块瓷砖,它就会改变颜色,如果所有的瓷砖都被踩到,你就通关了;但是,如果您的角色再次踩到它,则瓷砖会破裂并且级别会重置。

这是我的级别功能中的内容:

for (int i = 0; i < icePuzzle1.length; i++) { 
  for (int j = 0; j < icePuzzle1.length; j++) {
    //Sets colour to cyan
    fill(0, 255, 255);

    //Changes corresponding boolean when stepped on
    if (characterPosX == i*rectWidth && characterPosY == j*rectWidth) {
      stepped[i][j] = true;
    }

    //Changes colour if stepped on
    if (stepped[i][j] == true) {
      fill(255);
    }

    //Tile details
    stroke(100, 100, 100, 30);
    rect(i*rectWidth, j*rectWidth, rectWidth, rectWidth);
  }
}

我试着添加这个

if (characterPosX == i*rectWidth && characterPosY == j*rectWidth){ characterPosX = 0; characterPosY = 0; }

under if (stepped[i][j] == true),这使我的角色在踏上迷宫的瓷砖时立即传送到起点。

我该如何更改它,以便只要他不踩到阶梯式瓷砖,他就可以继续穿过迷宫?

编辑:很难弄清楚如何检查是否所有的瓷砖都被踩到了。试过用这个

boolean allValuesInArrayAreTrue = true;
boolean [][] sth = {{false,false,false},{false,false,true}};
for(int i = 0; i < sth.length; i++) {
for (int k = 0; k < sth[i].length; k++) {
    if(!sth[i][k]) {
        allValuesInArrayAreTrue = false;
    }
}

}

但只要最后一个瓦片(最右下角)被踩到,它就会返回真,不管它是第一个还是最后一个。

我已经在这 3 天尝试了不同的方法,但没有任何效果。任何帮助将不胜感激。

编辑:因为设法通过为每个图块设置一个计数器来解决这部分问题,并在 keypressed() 中实现 if(stepped){ trigger reset}。

标签: processing

解决方案


试试这个概念:在真实的情况下启动所有块,因为玩家仍然可以踩到它们。将每个块的计数器设置为零。如果玩家踩到块并且计数器为零,则该块的计数器上升到一。然后当玩家离开方块并且计数器为 1 时,计数器变为 2 并将方块设置为 false,这意味着如果玩家再次踩到该方块,关卡将重置。当级别重置时,将所有块重置为真并将所有计数器设置为零。为了击败游戏,检查是否每个块都设置为 false。


推荐阅读