Вообщем, в процессе изучения JavaScript я решил потренироватся, и написать казино-рулетку.
Ошибка происходит в этих участках кода:
Функция для ставки на красное или черное:
function bidOnRedOrBlack () {
do {
var randomInt = Math.round(Math.random() * 2);
} while ( randomInt == 0 );
if ( randomInt == 1 ) {
return "red";
} else if ( randomInt == 2 ) {
return "black";
}
}
А вот что происходит, если пользователь ставит на красное:
var bidOnRedOrBlackLog; // в поисках истины я добавил "это", чтобы узнать, что возвращает функция
if (bidOnRedOrBlackLog = bidOnRedOrBlack() == 1 ) {
alert(bidOnRedOrBlackLog + "Выпало красное, поздравляем! ");
} else if (bidOnRedOrBlackLog = bidOnRedOrBlack() == 2 ) {
alert(bidOnRedOrBlackLog + "Выпало чёрное, вам не повезло. ");
}
alert(bidOnRedOrBlackLog);
В итоге, функция постоянно возвращает true или false, а я не понимаю, почему так происходит.
JavaScript
Почему функция постоянно возвращает true или false? (но не должна)
Ты возвращаешь из функции строки "red" / "black" и сравниваешь их с числами 1 / 2. Разумеется, значением "red" == 1 будет false.
Читай про приоритет операций: сначала выполнится == и только потом =.
Читай про приоритет операций: сначала выполнится == и только потом =.
Сергей Почтарев
Блин, точно! Не заметил как-то. Сейчас исправил, в итоге при выпадении красного пишет что выпало красное, а если выпало не красное, то ничего не происходит. Буду дальше искать.
ни по одной из веток, где return не проходит
Сергей Почтарев
Что-то мне не понятно, как там return не может пройти, если сгенерировать можно только 0, 1 или 2. При генерации 0 генерируем пока 0 не будет. Вообщем, как решить эту проблему?
Чтоб узнать, что функция возвращает, добавь лучше Тэг Р с id = "dbg"
вставь строчку "document.GetElementByID("dbg").innerHTML = bidOnRedOrBlack ();"
вставь строчку "document.GetElementByID("dbg").innerHTML = bidOnRedOrBlack ();"
Сергей Почтарев
Добавляю эту строку и выводит ошибку:
Uncaught TypeError: document.GetElementByID is not a function
Uncaught TypeError: document.GetElementByID is not a function
Во-первых, постоянно обнуляйте переменные! Может срабатывает 1 выбор несколько раз.
Второе: random в некоторых языках возвращает максимальное значение на 1 ниже верхнего порога (то есть Math.random() * 2 может "плавать" в пределах 0-1
Второе: random в некоторых языках возвращает максимальное значение на 1 ниже верхнего порога (то есть Math.random() * 2 может "плавать" в пределах 0-1
if (function() == ..значение..) // сравниваешь выбранное игроком поле с каким-то значением
if (function() == ..значение2..) // снова сравнение, но в этот раз функция вызывается повторно, выбранное игроком поле может поменяться, это вызовет ошибку.
В данном случае лучше воздержаться от функций:
var bid, randomInt, color;
do {
bid = prompt("Enter 1(red) or 2(black)", "");
} while (bid != "1" && bid != "2");
randomInt = 1 + Math.random() * 2;
randomInt = Math.floor(randomInt);
if (randomInt == 1) {
color = "red";
} else {
color = "black";
}
if (randomInt == +bid) {
alert ("You win, color - " + color);
} else {
alert ("You lose, color - " + color);
}
В крайнем случае, можно присвоить значение функции в переменную и уже с этой переменной работать дальше.
P.S. Math.random() возвращает число от 0(включительно) до 0.999999...(не включая 1), в твоем случае игрок будет обманут.
if (function() == ..значение2..) // снова сравнение, но в этот раз функция вызывается повторно, выбранное игроком поле может поменяться, это вызовет ошибку.
В данном случае лучше воздержаться от функций:
var bid, randomInt, color;
do {
bid = prompt("Enter 1(red) or 2(black)", "");
} while (bid != "1" && bid != "2");
randomInt = 1 + Math.random() * 2;
randomInt = Math.floor(randomInt);
if (randomInt == 1) {
color = "red";
} else {
color = "black";
}
if (randomInt == +bid) {
alert ("You win, color - " + color);
} else {
alert ("You lose, color - " + color);
}
В крайнем случае, можно присвоить значение функции в переменную и уже с этой переменной работать дальше.
P.S. Math.random() возвращает число от 0(включительно) до 0.999999...(не включая 1), в твоем случае игрок будет обманут.
Сергей Почтарев
Да, я уже понял, что лучше значение функции присвоить переменной. Что-то я вообще невнимательно писал код...
if (bidOnRedOrBlackLog = bidOnRedOrBlack() == 1 )
Вычисляется (bidOnRedOrBlack() == 1) и присваивается bidOnRedOrBlackLog, а результат == типа bool
Вычисляется (bidOnRedOrBlack() == 1) и присваивается bidOnRedOrBlackLog, а результат == типа bool
Попробуй посмотреть файлик где хранятся файлики которые по их мнению "чинят" неверные настройки. Точнее возращяет их в предыдущее состояние
Сергей Почтарев
Что-то я вас не понял.
Похожие вопросы
- Для объекта Date написать функцию isBetween( date1, date2), которая возвращает true
- JAVA SCRIPT true , false Для чего нужны эти значения переменным?
- Почему так работают функции?
- почему в javascript в функцию можно передавать параметры без типа?
- Калькулятор из функций
- Почему split не работает и правильно ли написана функция? javascript. Помогите, пожалуйста
- Вопрос по JavaScript, обращение к функции, которая находится в функции...
- Проверка вызывалась ли функция (подробности внутри)
- Как в данном случае лучше заменить стрелочную функцию на обычную?
- В чём проблема? не могу длину определить? undefined возвращает