public void IdentifyOriginPosition() { // percorre todo o labirinto verificando se existe algum ponto de origem (X) for (int l = 1; l <= Maze.Lines; l++) { for (int c = 1; c <= Maze.Columns; c++) { if (Maze.GetComponent(new Position(l, c)).ComponentValue.Equals("X")) { CurrentPosition = new Position(l, c); VisitedPositions.Add("O [" + CurrentPosition.Line + ", " + CurrentPosition.Column + "]"); } } } if (CurrentPosition == null) { throw new MazeException("O labirinto não possui nenhum ponto de origem (X)."); } }
private void UpdateCurrentPosition(string movement, bool returning) { // movimenta-se no labirinto seguindo as regras switch (movement) { case "C": if (returning) { movement = "B"; CurrentPosition.Line++; } else { CurrentPosition.Line--; } break; case "E": if (returning) { movement = "D"; CurrentPosition.Column++; } else { CurrentPosition.Column--; } break; case "D": if (returning) { movement = "E"; CurrentPosition.Column--; } else { CurrentPosition.Column++; } break; case "B": if (returning) { movement = "C"; CurrentPosition.Line--; } else { CurrentPosition.Line++; } break; } // seta e guarda a posição que foi visitada VisitedPositions.Add(movement + " [" + CurrentPosition.Line + ", " + CurrentPosition.Column + "]"); Maze.GetComponent(CurrentPosition).SetVisited(); // caso seja uma posição que ainda não foi visitada, registra a ocorrência em uma lista que auxiliará a retornar pelo caminho (quando for o caso) if (!returning) { AuxReturn.Add(movement + " [" + CurrentPosition.Line + ", " + CurrentPosition.Column + "]"); } }