Счетчик программ лотереи Guess JavaScript

Создана программа для угадывания лотерейных номеров, которая принимает число от 1 до 10 и предлагает пользователю угадать число в общей сложности 3 раза, чтобы выиграть «приз». В лотерейной части программы у меня не было проблем, но я не могу заставить программу подсчитывать количество догадок и отображать правильную сумму приза.

Вот код, который у меня есть:

<script>
   var randomNum1 = Math.floor((Math.random() * 9) + 1);
   var randomNum2 = Math.floor((Math.random() * 9) + 1);
   var randomNum3 = Math.floor((Math.random() * 9) + 1);
   console.info(randomNum1);
   console.info(randomNum2);
   console.info(randomNum3);
   console.info(x);
   var firstNum = false;
   var secondNum = false;
   var thirdNum = false;
   var x = 0;
   var moneyWon = 0;

   firstNum = parseInt(prompt("Guess the first number."));;
   secondNum = parseInt(prompt("Guess the second number."));;
   thirdNum = parseInt(prompt("Guess the third number."));;

   if ((firstNum == randomNum1) || (firstNum == randomNum2) || (firstNum == randomNum3))
   {
       firstNum == true;
   }
       if (firstNum == true)
       {
           moneyWon = 100;
           x++;
       }
       else{
           moneyWon = 0;
       }

   if ((secondNum == randomNum2) || (secondNum == randomNum1) || (secondNum == randomNum3))
   {
       secondNum == true;
   }
       if (secondNum == true)
       {
           moneyWon = 200;
           x++;
       }
       else{
           moneyWon = 100;
       }
   if ((thirdNum == randomNum2) || (thirdNum == randomNum1) || (thirdNum == randomNum3))
   {
       thirdNum == true;
   }
       if (thirdNum == true)
       {
           moneyWon = 500;
           x++;
       }
       else{
           moneyWon = 200;
       }



        
   alert("The computer's numbers are " + randomNum1 + " " + randomNum2 + " " + randomNum3 +
   "\nYour guesses were " + firstNum + " " + secondNum + " " + thirdNum +
   "\nYou got " + console.info(x) + " right" +
   "\nYou've won $" + moneyWon);
  
</script>

🤔 А знаете ли вы, что...
JavaScript позволяет создавать динамические и интерактивные веб-приложения.


1
185
2

Ответы:

Первое, что я замечаю:

You got " + console.info(x) + " right" +

Вы не хотите console.info() здесь, только x

Во-вторых, вы не хотите каждый раз устанавливать moneyWon в if, а делаете moneyWon += amount, как вы делаете с x.

Кроме того, в else (указывая на то, что догадка была неверной) вы не хотите ни устанавливать, ни добавлять к сумме (я бы предложил вообще удалить эти 3 else):

else{ moneyWon = 0; }

и второстепенное - дать осмысленные имена свойствам, т.е. var firstNum = false должно быть больше похоже на (is)firstNumberGuessed (is указывает, что это логическое значение

Я вижу, что вы на правильном пути в этом вопросе, но хорошо бы научиться не лениться в этом деле как можно скорее.

Обновлено: вы также можете отказаться от назначения true для firstNum, secondNum, ThirdNum и просто иметь это:

if ((firstNum == randomNum1) || (firstNum == randomNum2) || (firstNum == randomNum3))

       {
           moneyWon += 100;
           x++;
       }

Решено

Что ж, мне не нужно рассказывать вам, что это за ошибки и что их вызывает, поскольку мой друг Деян уже включил их в свой ответ. В своем ответе я пытаюсь реализовать его ответ, а также некоторые полезные методы javascript, которые также могут сделать вашу работу намного проще и быстрее.

Во-первых, массивы — ваши друзья. Я создал массивы для ввода пользователем, а также случайные числа и заполнил их с помощью цикла for.

Далее, поскольку мы используем массивы, мы можем использовать метод includes() для поиска значений среди случайных чисел. Это уменьшает ваши условия if else.

Затем я использую интерполяцию строк, чтобы получить выходное сообщение.

let randoms = [];
let nums = [];
let numbers = ["first", "second", "third"];
let winPrize = [100, 200, 500];
let losePrize = [0, 100, 200];

for(let i=0; i<3; i++){
  randoms.push(Math.floor((Math.random() * 9) + 1));
  nums.push(parseInt(prompt(`Guess the ${numbers[i]} number.`)));
}

let x = 0;
let moneyWon = 0;

for(let i=0; i<3; i++){
  if (randoms.includes(nums[i])){
    x++;
    moneyWon+=winPrize[i];
  }else{
    moneyWon+=losePrize[i];
  }
}

alert(`The computer's numbers are ${randoms[0]}, ${randoms[1]} and ${randoms[2]}. \nYour guesses were ${nums[0]}, ${nums[1]} and ${nums[2]}. \nYou got ${x} right. \nYou've won $${moneyWon}`);

Я считаю, что если мы будем следовать такой практике, наш код останется коротким, а также легко читаемым и удобным для сопровождения.