Помогите с 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, время: 19:18. |