0 votes

Directions aléatoires, sans répétition (Mauvaise description)

Bonjour, Je suis en train de mettre au point un système de génération de motifs aléatoires.

Mon code jusqu'à présent :

  int permutes = 100;
  int y = 31;
  int x = 63;

  while (permutes > 0) {
    int rndTurn = random(1, 4);

    if (rndTurn == 1) { y = y - 1; } //go up
    if (rndTurn == 2) { y = y + 1; } //go down
    if (rndTurn == 3) { x = x - 1; } //go right
    if (rndTurn == 4) { x = x + 1; } //go left

    setP(x, y, 1);
    delay(250);
  }

Ma question est la suivante : comment faire pour que le code ne revienne pas sur lui-même ?

Par exemple, le code indique "Aller à gauche" mais la boucle suivante indique "Aller à droite", comment puis-je arrêter cela ?

NOTE : setP active un pixel spécifique.

A la vôtre !

6voto

cletus Points 276888

Cela dépend de ce que vous voulez dire.

Si vous voulez dire "éviter de revenir à une étape où je me trouvais le plus auparavant", vous devez vous souvenir de la direction du dernier mouvement. En d'autres termes, si vous vous déplacez vers le haut, votre prochain mouvement ne peut pas être vers le bas.

Si vous voulez dire "éviter de revenir sur un point que vous avez toujours vous devrez vous souvenir de tous les endroits où vous êtes allés. Ceci peut être mis en œuvre efficacement avec une table de hachage utilisant une clé avec une classe représentant une coordonnée avec les fonctions Equals/HashCode appropriées.

2voto

jamesdlin Points 13455

Comme chaque carré correspond à un pixel, votre espace de coordonnées doit être fini, ce qui vous permet de garder une trace des coordonnées que vous avez déjà visitées.

S'il y a un getP pour déterminer si un pixel a déjà été allumé, vous pouvez l'utiliser.

1voto

sbi Points 100828

Vous vous souvenez de la dernière direction et, en utilisant random(1,3) choisir l'un des trois autres, puis l'enregistrer comme le dernier.

-2voto

Neil Knight Points 23759

Je ne sais pas si cette approche fonctionnera.

Créez une nouvelle variable appelée lastRndTurn en tant qu'int, et affectez-la après vos instructions if. Ajoutez ensuite une nouvelle boucle while après votre int rndTurn = random(1, 4) .

while (lastRndTurn == rndTurn)
{
    rndTurn = random(1, 4);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X