0
votes

Tandis que la déclaration se bloque dans l'onglet de repl.it (p5.js)

J'ai un projet dû le 27 et j'ai rencontré un problème. Replem.it se bloque chaque fois que je démarre mon programme. Si vous regardez mon code, à la ligne 42:

var chance; // swap | dont swap
var prizeDoor;
var randomDoor;
var randomDoor2;
var randomDoor3;
var decide;

function setup() {
  chance = 50;
  createCanvas(1000,1000);
}

function draw() {
 //setting up round

  prizeDoor = Math.round(random(1,3));

  //choosing first door

  console.log("[1] [2] [3]");
  randomDoor = Math.round(random(1,3));

  //showing user the door AI picks
var chance = 50; // swap | dont swap
var prizeDoor;
var randomDoor;
var randomDoor2;
var randomDoor3;
var decide;

function setup() {
  chance = 50;
  createCanvas(1000,1000);
}

function draw() {
 //setting up round

  prizeDoor = Math.round(random(1,3));

  //choosing first door

  console.log("[1] [2] [3]");
  randomDoor = Math.round(random(1,3));

  //showing user the door AI picks

  if (randomDoor == 1) {
    console.log(" ^");
    console.log(" |");
  } else if (randomDoor == 2) {
    console.log("     ^");
    console.log("     |");
  } else {
    console.log("         ^");
    console.log("         |");
  }

  console.log("AI chooses door #" + randomDoor + ".");

  //revealing a door

  //getting a number that isnt the players door or the prize door
  while ((randomDoor2 == prizeDoor) || (randomDoor2 == randomDoor)) {
    setTimeout(
      function(){ 
        randomDoor2 = Math.round(random(1,3));
      }, 
      10000);
  }

  //showing this to the user
  console.log("");
  console.log("Door #" + randomDoor2 + " does not have the prize.");

  //having the computer make a desicion
  if (random(0,100) < chance) {
    decide = "swap doors.";
    while ((randomDoor3 !== randomDoor2) || (randomDoor3 !==  randomDoor)) {
      randomDoor3 = Math.round(random(1,3));
    }
  } else {
    decide = "keep the current door.";
  }

  //letting the user know of the computer's desicion
  console.log("");
  console.log("The AI chose to " + decide);

  // figuring out if the AI won
  if (randomDoor3 == prizeDoor || randomDoor == prizeDoor) {

    console.log("AI won!");

    if (decide == "swap doors.") {
      chance -= 5;
    } else {
      chance += 5;
    }
  } else {

    console.log("AI lost.");

    if (decide == "swap doors.") {
      chance += 5;
    } else {
      chance -= 5;
    }
  }
}


3 commentaires

Fonction aléatoire?


Ce code a été écrit avec la bibliothèque P5.JS, donc oui il existe une fonction aléatoire


Settimeout est asynchrone, alors maintenant que votre aléatoire est également ne changera jamais pour la boucle. En demandant ajouter un délai d'attente, je pense que vous voulez utiliser SettimeOut


4 Réponses :


0
votes

Modifier J'ai eu le code au travail a changé de quelques bits pour le faire fonctionner sur ma fin comme le math.random, mais ne devrait pas être difficile de changer également de nouveau sur Stackoverflow, il m'a donc pris un certain temps pour comprendre la Code Snippet PLASTANT: p.

<script type="text/javascript">

var chance; // swap | dont swap
var prizeDoor;
var randomDoor;
var randomDoor2;
var randomDoor3;
var decide;
var chance = 50;
function setup() {
  createCanvas(1000,1000);
}

function draw() {
 //setting up round

  prizeDoor = Math.floor((Math.random() * 3) + 1);
  console.log(prizeDoor+" prizeDoor");

  //choosing first door
  console.log("[1] [2] [3]");
  randomDoor = Math.floor((Math.random() * 3) + 1);
  randomDoor2 = Math.floor((Math.random() * 3) + 1);
  randomDoor3 = Math.floor((Math.random() * 3) + 1);


  //showing user the door AI picks

  if (randomDoor == 1) {
    console.log(" ^");
    console.log(" |");
  } else if (randomDoor == 2) {
    console.log("     ^");
    console.log("     |");
  } else {
    console.log("         ^");
    console.log("         |");
  }



  console.log("AI chooses door #" + randomDoor + ".");


  //revealing a door

  //getting a number that isnt the players door or the prize door
  while ((randomDoor2 == prizeDoor) || (randomDoor2 == randomDoor)) {
   randomDoor2 = Math.floor((Math.random() * 3) + 1);
  }

  //showing this to the user
  console.log("");
  console.log("Door #" + randomDoor2 + " does not have the prize.");

  //having the computer make a desicion
  if (Math.floor((Math.random() * 100) + 1) < chance) {
    decide = "swap doors.";
    while ((randomDoor3 == randomDoor2) || (randomDoor3 == randomDoor)) {
      randomDoor3 = Math.floor((Math.random() * 3) + 1);
    }
  } else {
    randomDoor3 = randomDoor;
    decide = "keep the current door.";
  }

  //letting the user know of the computer's desicion
  console.log("");
  console.log("The AI chose to " + decide);

  // figuring out if the AI won
  if (randomDoor3 == prizeDoor) {

    console.log("AI won!");

    if (decide == "swap doors.") {
      chance -= 5;
    } else {
      chance += 5;
    }
  } else {

    console.log("AI lost.");

    if (decide == "swap doors.") {
      chance += 5;
    } else {
      chance -= 5;
    }
  }
}

draw();
</script>


10 commentaires

Je l'ai essayé, mon code travaille maintenant, mais qui se bloque toujours. Vous l'avez fait à mi-chemin;)


W8 une minute, je pense que c'est ce que vous mentez à faire. tandis que ((RandomDoor2 == Prizeoor) || (RandomDoor2 == RandomDoor)) {RandomDoor2 = math.floor ((Math.Random () * 3) + 1); console.log (RandomDoor2); } Cela le rend afin que RandomDoor2 ne soit jamais == sur RandomDoor ou Prizeoor


Essayé cela, toujours accidenté, RandomDoor2 est non défini


Aussi parce que la chance = 50; est dans une autre fonction que l'AI ne échangera jamais la porte. le mettre avec les autres variables dans le haut va réparer ce problème


Si avec || Il ne se termine jamais alors avec && il n'entrera jamais dans la boucle. @Djimschaap


@Az_ Ouais tu as raison de ce que l'on a eu le travail travaillant maintenant espère qu'il l'aide.


Les nombres aléatoires sont de 1,2 & 3, de sorte que les deux premiers chiffres Prizeoor et RandomDoor sont 1 et 2 ou tout autre deux de ces 3, maintenant en boucle, vous modifiez le troisième numéro jusqu'à ce que ce ne soit pas le reste de ces 3, ce qui n'a aucun sens pourquoi pas simplement le mettre sur le troisième? @Djimschaap


Parce que Prizeoor et RandomDoor sont générés de manière aléatoire dans la plage de 1 à 3 et il veut RandomDoor2 de ne pas avoir égal de prizeoor ou de randomdoor, donc avec ceci, tandis que la boucle RandomDoor2 ne serait jamais la même que prizeoor ou randomdoor et ce n'est pas codé de quelle porte est le prix soit de cette façon.


Je comprends que ce n'est pas codé sans dur, mais mon point est de savoir pourquoi une boucle de temps cuz en utilisant pendant que vous n'êtes pas sûr de la quantité de boucles que vous obtiendrez le troisième, mais lorsque vous connaissez les deux autres chiffres, le troisième numéro est assez facile et plus rapide et bonne façon d'aller comme [1,2,3] .filter (E => E! == RandomDoor && e! == Prizeoor)


@Az_ Je ne connaissais pas la fonction de filtrage, je ne suis pas encore expérimenté dans JavaScript et souhaitait utiliser autant que possible le code d'origine des auteurs. :)



0
votes

Vous créez deux nombres aléatoires consécutivement Prizoor & RandomDoor, de même que les mêmes numéros à produire à l'aide de Math.Random sur deux coups consécutifs sont assez difficiles à se produire.

Dans votre boucle, vous vous attendez à ce que votre nouveau nombre aléatoire correspond à votre nouveau numéro aléatoire. vos deux numéros aléatoires précédents désormais pour un coup / une compilation qu'ils peuvent être identiques ou ne peuvent pas être identiques, s'ils ne sont pas identiques, il n'est pas inutile de disposer de votre boucle pendant que vous ne terminerez jamais, P>

SOIT A = 1 et B = 2 p>

maintenant S'attendre à C == A && C == B n'arrivera jamais Cuz A! = B; P>

Changer C dans tandis que la boucle ne fera aucune différence. Donc, votre logique est complètement fausse, faites-nous savoir ce que vous essayez d'atteindre peut-être que nous pouvons peut-être aider à construire la logique p>

p>

let random = () => Math.random() * 3;
let prizeDoor = Math.round(random());
console.log('prizeDoor', prizeDoor)
let randomDoor = Math.round(random());
console.log('randomDoor', randomDoor)


3 commentaires

Ajout d'un délai de dix secondes, toujours accidenté.


Désolé, je n'ai pas mis à jour mon code. J'utilise actuellement || Dans mon temps, mettra à jour.


== avec et et! = avec ou (|) sont les mêmes choses



0
votes

aléatoire () est une méthode d'objet mathématique. Cela a fonctionné pour moi en remplaçant tous les appels de méthode aléatoire () avec Math.Random ().


0 commentaires

0
votes

Je l'ai compris. C'était en fait assez facile, il suffit de changer certains opérateurs. Voici la dernière pièce de code: xxx


0 commentaires