Помогите с Javascript кодом
Добрый вечер. Написал код игры виселица. Возникли проблемы. Если значение переменной numberAttempt поменять на > 5, то игра начинает работать некорректно. Помогите пожалуйста разобраться с чем это связано. Заранее огромное спасибо.
P.S Если неправильно оформил тему, что-то не написал, тема не отражает сути и т.д. Сообщите пожалуйста, буду признателен.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hangman!</title>
</head>
<body>
<h1>Hangman!</h1>
<script>
var pickWord = function () {
var words = ["программа", "детерминант", "обезьяна" , "кошка", "компьютер", "волна", "портрет", "корабль", "космос", "интернет", "цепочка", "дротик", "человек", "мандарин", "машина", "автобус", "автомобиль", "озарение", "идея", "страх", "ужас", "номер", "комната", "оружие", "балкон", "терраса", "картина", "светофор", "семафор", "индейка", "курица", "фонарь", "рыба", "фотография", "строка", "огонь", "вода", "сказка", "орудие", "броня", "инновация", "пруд", "речка", "чудовище", "шапка", "нитка", "бочка", "мусор", "останки", "клавиатура", "процессор", "блок", "видеокарта", "наушники", "портфель", "банка", "мозг", "рука", "конфета"];
return words[Math.floor(Math.random() * words.length)];
};
var setupAnswerArray = function (word) {
var answerArray = []
for (var i = 0; i < word.length; i++) {
answerArray[i] = "_";
}
return answerArray;
};
var showPlayerProgress = function (answerArray) {
alert(answerArray.join(" "));
};
var getGuess = function () {
return prompt("Угадайте букву или нажмите Отмена для выхода из игры");
};
var updateGameState = function (guess, word, answerArray) {
var appearances = 0;
for (var j = 0; j < word.length; j++) {
if (word[j] === guess) {
answerArray[j] = guess;
appearances++;
}
}
return appearances;
};
var showAnswerAndCongratulatePlayer = function (answerArray, numberAttempt) {
showPlayerProgress(answerArray);
};
var word = pickWord();
var answerArray = setupAnswerArray(word);
var remainingLetters = word.length;
var numberAttempt = 5;
while (remainingLetters > 0 && numberAttempt > 0) { showPlayerProgress(answerArray); var guess = getGuess();
if (guess === null) {
break;
} else if (guess.length !== 1) {
alert("Пожалуйста, введите только одну букву.");
} else {
numberAttempt--;
guess = guess.toLowerCase();
var correctGuesses = updateGameState(guess, word, answerArray);
remainingLetters -= correctGuesses;
remainingLetters--;
}
}
alert(answerArray.join(" "));
if (numberAttempt > 0) {
alert("Отлично! Было загадано слово " + word);
} else {
alert("Плохо! Вас повесили! Было загадано слово " + word);
}
showAnswerAndCongratulatePlayer(answerArray);
</script>
</body>
</html>
|
Omnia,
[HTML run]ваш код[/HTML] |
рони,
благодарю. |
Omnia,
какие правила, в чём некорректно? |
Omnia,
может строка 65 лишняя? |
рони, если выбирать одну и тужу букву определенное кол-во раз (4-6), при значение переменной numberAttempt > 5 (если кол-во попыток будет 6 и больше ), то выдаст, что якобы слово угадано ( хотя это не так).
|
рони,
Ого, вроде теперь все работает корректно. Огромное спасибо! |
Omnia,
тогда введите проверку -- такая буква уже не входит в слово |
Цитата:
Цитата:
|
Omnia,
протестируйте этот вариант
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hangman!</title>
</head>
<body>
<h1>Hangman!</h1>
<script>
var pickWord = function () {
var words = ["программа", "детерминант", "обезьяна" , "кошка", "компьютер", "волна", "портрет", "корабль", "космос", "интернет", "цепочка", "дротик", "человек", "мандарин", "машина", "автобус", "автомобиль", "озарение", "идея", "страх", "ужас", "номер", "комната", "оружие", "балкон", "терраса", "картина", "светофор", "семафор", "индейка", "курица", "фонарь", "рыба", "фотография", "строка", "огонь", "вода", "сказка", "орудие", "броня", "инновация", "пруд", "речка", "чудовище", "шапка", "нитка", "бочка", "мусор", "останки", "клавиатура", "процессор", "блок", "видеокарта", "наушники", "портфель", "банка", "мозг", "рука", "конфета"];
return words[Math.floor(Math.random() * words.length)];
};
var setupAnswerArray = function (word) {
var answerArray = []
for (var i = 0; i < word.length; i++) {
answerArray[i] = "_";
}
return answerArray;
};
var showPlayerProgress = function (answerArray) {
alert(answerArray.join(" "));
};
var getGuess = function () {
return prompt("Угадайте букву или нажмите Отмена для выхода из игры");
};
var updateGameState = function (guess, word, answerArray) {
var appearances = 0;
for (var j = 0; j < word.length; j++) {
if (word[j] === guess && answerArray[j] !== guess) {
answerArray[j] = guess;
appearances++;
}
}
return appearances;
};
var showAnswerAndCongratulatePlayer = function (answerArray, numberAttempt) {
showPlayerProgress(answerArray);
};
var word = pickWord();
var answerArray = setupAnswerArray(word);
var remainingLetters = word.length;
var numberAttempt = 5;
while (remainingLetters > 0 && numberAttempt > 0) { showPlayerProgress(answerArray); var guess = getGuess();
if (guess === null) {
break;
} else if (guess.length !== 1) {
alert("Пожалуйста, введите только одну букву.");
} else {
guess = guess.toLowerCase();
var correctGuesses = updateGameState(guess, word, answerArray);
remainingLetters -= correctGuesses;
if(!correctGuesses) numberAttempt--;
alert("осталось " +numberAttempt+ " попыток");
}
}
alert(answerArray.join(" "));
if (numberAttempt > 0) {
alert("Отлично! Было загадано слово " + word);
} else {
alert("Плохо! Вас повесили! Было загадано слово " + word);
}
showAnswerAndCongratulatePlayer(answerArray);
</script>
</body>
</html>
|
рони,
Отлично! Все работает. Еще раз спасибо. |
Еще раз вечер добрый, подскажите как вывести с input (id) переменную без перезагрузки страницы?
<input id="proso_engine_02" value=""/> <input id="proso_table_02" value=""/> <?php $ak_price_engine = $_POST['proso_engine_02']; $ak_price_table = $_POST['proso_table_02']; echo $ak_price_engine; echo $ak_price_table; ?> |
Александр83,
это лучше к специалистам php |
хорошо! а если все таки скриптом в этом коде?
<input id="proso_engine_02" value="1"/> <input id="proso_table_02" value="2"/> <p>тут значение value</p> |
простите немного по другому, во так!
<input id="proso_engine_02" value="1"/> <input id="proso_table_02" value="2"/> <p>тут значение value от id="proso_engine_02"</p> <p>тут значение value от id="proso_table_02"</p> |
Александр83,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<script>
window.addEventListener('DOMContentLoaded', function() {
var p = document.querySelectorAll('p.temp');
[].forEach.call(document.querySelectorAll('input.temp'), function(item,i) {
item.addEventListener('input', function() {
p[i].textContent = item.value;
});
});
});
</script>
</head>
<body>
<input id="proso_engine_02" value="1" class="temp"/>
<input id="proso_table_02" value="2" class="temp"/>
<p class="temp">1</p>
<p class="temp">2</p>
</body>
</html>
|
рони,
спасибо вам огромное! |
Доброго времени суток!, подскажите как решить данную задачу?
<select width="100%" id="proso_table">
<option value="0" title="" price-table="0">по умолчанию</option>
<option value="http://test_01.ru/" title="" price-table="100">Наименование №1 - сумма 100 руб.</option>
<option value="http://test_02.ru/" title="" price-table="200">Наименование №1 - сумма 200 руб.</option>
</select>
[JS]
document.querySelector('#proso_table').onchange = function() {
var a = document.querySelector('#proso_table_01 a');
a.href=this.value;
a.textContent=this.value!='0'?'ссылка на контент':'';
document.querySelector('#proso_table_02').value = this.options[this.selectedIndex].getAttribute('price-table');
};
[/JS]
<div class="none_div" id="proso_table_01"><a target="_blank"></a></div>
<input id="proso_table_02"/>
Данный выше код - работает и выдает результаты, но проблема в том что - последнее значение от input нужно вывести в переменную php переменная php - $ak_price_table грубо по коду хотел решить его так - <? echo $ak_price_table = '<input id="proso_table_02"/>';?> но таким образом значение в переменную не сохраняются! данная функция нужна для сложения результатов без перезагрузки страницы к примеру сумма по умолчанию 100 руб + значение от выбранного инпута = итого: Прошу помощь в данном вопросе - вознаграждение на пиво) гарантирую. |
прошу прощения не правильно выставил JS
<select width="100%" id="proso_table"> <option value="0" title="" price-table="0">по умолчанию</option> <option value="http://test_01.ru/" title="" price-table="100">Наименование №1 - сумма 100 руб.</option> <option value="http://test_02.ru/" title="" price-table="200">Наименование №1 - сумма 200 руб.</option> </select>
document.querySelector('#proso_table').onchange = function() {
var a = document.querySelector('#proso_table_01 a');
a.href=this.value;
a.textContent=this.value!='0'?'ссылка на контент':'';
document.querySelector('#proso_table_02').value = this.options[this.selectedIndex].getAttribute('price-table');
};
<div class="none_div" id="proso_table_01"><a target="_blank"></a></div> <input id="proso_table_02"/> |
или подскажите, если нет данного решения, хоть как значение не в input
а div
document.querySelector('#proso_table').onchange = function() {
var a = document.querySelector('#proso_table_01 a');
a.href=this.value;
a.textContent=this.value!='0'?'ссылка на контент':'';
document.querySelector('#proso_table_02').value = this.options[this.selectedIndex].getAttribute('price-table');
};
<div id="proso_table_02"/></div> |
Александр83,
что не так?
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>
<body>
<select width="100%" id="proso_table">
<option value="0" title="" price-table="0">по умолчанию</option>
<option value="http://test_01.ru/" title="" price-table="100">Наименование №1 - сумма 100 руб.</option>
<option value="http://test_02.ru/" title="" price-table="200">Наименование №1 - сумма 200 руб.</option>
</select>
<script>
document.querySelector('#proso_table').onchange = function() {
var a = document.querySelector('#proso_table_01 a');
a.href=this.value;
a.textContent=this.value!='0'?'ссылка на контент':'';
document.querySelector('#proso_table_02').value = this.options[this.selectedIndex].getAttribute('price-table');
};
</script>
<div class="none_div" id="proso_table_01"><a target="_blank"></a></div>
<input id="proso_table_02"/>
</body>
</html>
|
все верно работает, только с
<input id="proso_table_02"/> не могу вывести переменную в php! выдает пустое значение Как можно сделать вывод значения не в input а в div <div id="proso_table_02"></div> с возможностью передачи его на сервер по переменной $ak_price_table |
Цитата:
Цитата:
Цитата:
|
Александр83,
JS на клиенте, РНР на сервере. Каким образом js-переменные могут оказаться на сервере? Они на нем в любом случае не появятся. Можно отправить на сервер методом POST/GET значения полей формы, значения js-переменных. А скрестить РНР с JS вот так <? echo $ak_price_table = '<input id="proso_table_02"/>';?> не получится. |
Цитата:
POST/GET не походит, что то другое нужно, а так все печально!!!, придется искать обход.... спасибо за ответ. |
рони,
вам спасибо, много раз выручали, напишите в личку закину на телефон или яндекс. |
Цитата:
|
Хорошо, а можно тогда взять эту переменную посредством GET, без перезагрузки страницы?, я не сильна в php да и js тоже, поэтому не судите строго!
|
Александр83,
Ajax запрос методом GET |
Александр83,
https://learn.javascript.ru/ajax |
Доброго вечера! Помогите с этим....
<form method="POST" action="#" id="form_engine" name="form_engine"> <select class="proso_engine" width="100%" id="proso_engine" name="engine_php"> <option value="0" title="" price-engine="0">по умолчанию</option> <option value="ссылка на контент 1" title="" price-engine="цена с сервера 1" product="Имя продукта с сервера 1">Имя продукта с сервера 1 - цена с сервера 1 руб</option> <option value="ссылка на контент 2" title="" price-engine="цена с сервера 2" product="Имя продукта с сервера 2">Имя продукта с сервера 2 - цена с сервера 2 руб</option> </select> Нужно отправить данные на сервер файл ajax.handler.php по атрибутам (price-engine, product) вот скрипт но он не работает...(((
$("select.proso_engine").change(function() {
alert("Тест формы!");
$.ajax({
type: "POST",
url: '/ajax.handler.php',
data : { proso_engine: $(this).val() },
});
});
HELP!!! |
рони,
можете мне с помочь, не могу сообразить как написать JS правильно..? |
Цитата:
|
рони, здравствуйте! подскажите как, вывести переменную в нижней строке?
<script>
document.querySelector('#proso_engine').onchange = function() {
var a = document.querySelector('#proso_engine_01 a');
a.href=this.value;
a.textContent=this.value!='0'?'<?=GetMessage("AK_03");?>':'';
document.querySelector('#proso_engine_02').innerHTML = this.options[this.selectedIndex].getAttribute('price-engine');
var engine = "вывести переменную от выбранного option атрибут - [COLOR="Red"]price-engine[/COLOR]????
};
</script>
заранее спасибо. |
Александр83,
не понимаю |
document.querySelector('#proso_engine').onchange = function() {
var a = document.querySelector('#proso_engine_01 a');
a.href=this.value;
a.textContent=this.value!='0'?'<?=GetMessage("AK_03");?>':'';
document.querySelector('#proso_engine_02').innerHTML = this.options[this.selectedIndex].getAttribute('price-engine');
var engine = ???
};
дописать в переменную engine значение атрибута price-engine чтобы потом эту переменную передать в document.write(engine); |
рони,
??? |
Александр83,
var engine = this.options[this.selectedIndex].getAttribute('price-engine');
либо вы просите то что у вас есть, либо вас не понимаю, в document.write уже ничего не передать, document.write используют только при загрузке страницы, смотрите про innerHTML или value |
Здравствуйте! Подскажите как правильно сложить арифметически три переменных?
var head_itog = '<?=intval($arResult["CURRENT_HEAD_PRICE"])?>';
var table_itog = this.options[this.selectedIndex].getAttribute('price-table');
var engine_itog = this.options[this.selectedIndex].getAttribute('price-engine');
var summ_comp = head_itog + engine_itog;
$("#result_02").append(summ_comp);
также к примеру переменные с атрибутов равны (head_itog = 100, table_itog = 200, engine_itog = 300) значения здесь могут быть разные - это пример! если как есть то всё отображается так 100200300, мне соответственно необходимо все сложить = и получить общую сумму. |
также интересен вопрос сброса кеша при каждой подгрузки данного JS?
|
| Часовой пояс GMT +3, время: 02:44. |