mediol-name
@mediol-name
Wordpress Developer

Как сделать игру Камень-Ножницы-Бумага на js?

Задание:
Сделайте игру "камень-ножницы-бумага". Пользователь вводит свой вариант через prompt (1 или 2 или 3), программа генерирует свой вариант через Math.random() и выводит через alert. Следующий alert выводит имя победителя или "ничья"
Используем только условия и массивы (если необходимо). Циклы не применять.

Я написал такой вот код. Но при любых комбинациях чисел программа выводит последний алерт из условия (The friendship won!)
let userValue = Number(prompt("Enter the number from 1 to 3. 1 is stone, 2 - scissors, 3 - paper"))
function progValue(min, max) {
    return Number(Math.floor(Math.random() * (max - min + 1)) + min)
}
alert(`The programm number is ${progValue(1, 3)}`)
if (userValue === 1 && progValue === 2 || userValue === 1 && progValue === 3 || userValue === 2 && progValue === 3) {
    alert("Yeah! You won!")
}
else if (userValue === 3 && progValue === 1 || userValue === 3 && progValue === 2 || userValue === 2 && progValue === 1) {
    alert("Sorry! You lost")
} else {
    alert("The friendship won!")
}

Что не так?
  • Вопрос задан
  • 3702 просмотра
Решения вопроса 1
mediol-name
@mediol-name Автор вопроса
Wordpress Developer
Разобрался! Как я понял, мне не обязательно было использовать функцию. И условия я немного упростил. В общем, в итоге, получился вот такой рабочий код:
let userValue = Number(prompt("Enter the number from 1 to 3. 1 is stone, 2 - scissors, 3 - paper"))
let progValue = Math.ceil(Math.random() * 3)
alert(`The programm number is ${progValue}`)
if (userValue === 1 && progValue > 1 || userValue === 2 && progValue === 3) {
    alert("Yeah! You won!")
}
else if (userValue === 3 && progValue < 3 || userValue === 2 && progValue === 1) {
    alert("Sorry! You lost")
} else {
    alert("The friendship won!")
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Karpion
Мне кажется, userValue содержит строку, а не число. Соответственно, они никогда не м.б. === числу. Наверно, там надо ==, а не === ...

Ещё в операторах if - надо расставить скобки. А то полагаться на приоритет операций - так себе идея.

И ещё есть хорошая оптимизация: надо из userValue вычесть progValue. И анализировать разность оператором switch; или есть альтернативы...
Ответ написан
Seasle
@Seasle Куратор тега JavaScript
Результат функции progValue надо бы сохранять и уже его использовать в выводе и сравнениях.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы