generateScramble32Skewb method

String generateScramble32Skewb(
  1. int random, [
  2. bool isSkewb = false
])

Genera una secuencia aleatoria de movimientos para el cubo Rubik.

Este método genera una secuencia de movimientos aleatorios (sobretodo para la categoría de 3x3), donde cada movimiento está compuesto por una de las caras del cubo (de la lista moves), y se le añade aleatoriamente un giro adicional como ' o 2 (con probabilidades de 30% y 30% respectivamente). El parámetro random define cuántos movimientos se generarán en la secuencia.

Se asegura de que no haya movimientos consecutivos repetidos.

Parámetros:

  • random El número de movimientos a generar.
  • isSkewb: Atributo para saber si se esta generando el scramble del skewb.

Retorna la secuencia de movimientos generada como un String, donde los movimientos están separados por un espacio.

Implementation

String generateScramble32Skewb(int random, [bool isSkewb = false]) {
  String lastMove = "";
  List<String> scrambleList = [];

  for (int i = 0; i < random; i++) {
    // SE COGE UNA CAPA ALEATORIAMENTE
    String move = isSkewb
        ? movesSkewb[Random().nextInt(movesSkewb.length)]
        : moves[Random().nextInt(moves.length)];

    // SE ASEGURA QUE EL MOVIMIENTO ACTUAL NO SEA IGUAL AL ANTERIOR,
    // ASI SE EVITA LAS REPETICIONES CONSECUTIVAS DEL MISMO MOVIMIENTO
    if (lastMove != "") {
      while (move.contains(lastMove)) {
        move = moves[
            Random().nextInt(isSkewb ? movesSkewb.length : moves.length)];
      } // CUANDO LA CAPA SEA IGUAL A LA ANTERIOR CAPA, SE COGE OTRA CAPA ALEATORIAMENTE

      //AGRGAMOS UN GIRO ADICIONAL OPCIONAL (como U', F2,.. )
      int randomMove = Random().nextInt(100);
      if (isSkewb ? randomMove <= 50 : randomMove <= 30) {
        // SI ES MENOR O IGUAL A 30 SE LE COLOCA '
        scrambleList.add("$move'");
        // EN LASTMOVE SOLO SE GUARDA LA CAPA, SIN EL GIRO ADICIONAL
        lastMove = move;
      } else if (isSkewb == false) {
        // SI NO ES EL SCRAMBLE DEL SKEBW ENTONCES SE LE AÑADE EL MOVIMIENTO ADICIONAL '2'
        if (randomMove <= 60) {
          // SI NO ES MENOR O IGUAL A 30 Y ES MENOR O IGUAL A 60 SE LE COLOCA UN 2
          scrambleList.add("${move}2");
          lastMove = move;
        }
      } else {
        // Y SI NO, SE AGREGA SOLO LA CAPA
        scrambleList.add(move);
        lastMove = move;
      }
    } else {
      // PARA EL PRIMER MOVIMIENTO SOLO SE AGREGA LA CAPA Y SE ESTABLECE LA ULTIMA CAPA
      scrambleList.add(move);
      lastMove = move;
    }
  }
  // SE CONVIERTE LA LISTA EN UNA CADENA CON ESPACIOS
  String scramble = scrambleList.join(" ");
  return scramble;
}