Биржа маркетинга Каталог услуг Проверка на антиплагиат SEO-анализ текста Адвего Лингвист Проверка орфографии

Свободная тема — Форум Адвего

боковая панель
Разное / Свободная тема
Максим Сергеев (advego)
JavaScript и все-все-все
Написал: Максим Сергеев (advego) , 15.04.2022 в 12:10
Комментариев: 176
Комментарии

Показано 52 комментария
SergejLukash
За  2  /  Против  0
SergejLukash  написал  15.04.2022 в 08:55
День добрый! Я активно боролся с плохим настроением :) В разработке только один рассказ, написано 30%. Учу javascript и english. Делал домашку, нужно было переписать маленькую игру "поле чудес" на функции. Намучился с одной функцией, никак не получалось ее правильно составить, не считала она количество правильно угаданных букв :)))
#16.1
950x874, jpeg
98.9 Kb

                
Lika1977
За  0  /  Против  0
Lika1977  написала  15.04.2022 в 09:14  в ответ на #1
Я процентов на 70, осталось оформить его под будущую тему. Вы детскую книжку что ли изучаете)) Ну я рада, что с вами хоть все нормально.)

                
SergejLukash
За  0  /  Против  0
SergejLukash  написал  15.04.2022 в 09:28  в ответ на #2
Угу, javascript для детей. Домашкой валят не по-детски :)) Для начала самое оно, я прям как-то втянулся, понял базовые вещи, прошел первую часть из 9-ти глав. Вот начинаю вторую часть книги, в ней расскажут теорию (dom, jquery..) и на закрепление сделаем игру "спрятанное сокровище", куда ж без практики :))
#21.1
444x613, jpeg
77.7 Kb

                
Lika1977
За  0  /  Против  0
Lika1977  написала  15.04.2022 в 09:38  в ответ на #3
Сижу теперь над вашей функцией, разгадываю)

                
Lika1977
За  0  /  Против  0
Lika1977  написала  15.04.2022 в 09:44  в ответ на #5
Вам нужно сделать несколько заготовок рассказов, потом подходящий оформить под ту тему, которую выберут, вдруг первое место займёте.

                
SergejLukash
За  0  /  Против  0
SergejLukash  написал  15.04.2022 в 10:36  в ответ на #5
Я разгадку описал ниже, в ответе Виктору (mpnz) :)

                
Lika1977
За  0  /  Против  0
Lika1977  написала  15.04.2022 в 10:57  в ответ на #15
Здесь обсуждаем рассказы!

                
mpnz
За  0  /  Против  0
mpnz  написал  15.04.2022 в 09:37  в ответ на #1
Прикольно, только все манипуляции с ansverArray кмк остаются в рамках вашей функции, т.е. функция его не изменила.
Привет :)

                
SergejLukash
За  1  /  Против  0
SergejLukash  написал  15.04.2022 в 09:46  в ответ на #4
Привет :) Верно, функция должна была только посчитать к-во угаданных букв. Она принимает три аргумента:
1) Букву, введенную пользователем
2) Зашифрованное слово, в виде массива, где элементы это буквы
3) И массив угаданных/не угаданных букв

В функции идет цикл, сверяется на совпадение каждая буква, если угадана то переписывается, к примеру звездочка, угаданной буквой и добавляется единица в счетчик (к-во угаданных). А вот далее, когда вызывается эта функция и возвращается число (если что-то угадано), то минусуем от к-ва букв в слове (выбирается рандомно из массива слов) к-во угаданных букв и так до бесконечности, пока не угадаем все буквы, далее игровой цикл заканчивается и нас поздравляют..па-пам молодец все угадал! :)

                
mpnz
За  0  /  Против  0
mpnz  написал  15.04.2022 в 09:56  в ответ на #7
Это-то я понял. Но вот этот момент
// если угадана то переписывается
остался внутри функции, вы же из нее не вывели измененный массив ansverArray?
Он же не мог глобально измениться, с тех пор как вы его передали в функцию - он существует в ней как переменная.
Если он вам далее не нужен, то и манипуляции с ним лишние, и можно было его не передавать.
Это наверное во мне сеошник говорит, стремление все вокруг оптимизировать.

                
SergejLukash
За  0  /  Против  0
SergejLukash  написал  15.04.2022 в 10:28  в ответ на #9
В книжке это задание как упражнение с функциями, не то чтобы этот код максимально идеально написан, или оптимизирован. Но чтобы потренироваться. Автор книги написал игровой процесс, где вызывал функции, а далее говорит напишите теперь функции ))) До этого мы делали эту игру без функций, то есть какие-то приемы/подходы уже известны, но не все. Потренировался я неплохо, часа 4 убил ))

                
mpnz
За  0  /  Против  0
mpnz  написал  15.04.2022 в 10:39  в ответ на #13
Вы не подумайте, что я огульно хаю, мне на самом деле интересно разобраться.
Можете кинуть весь код? Скажем, в своем профиле, а потом удалите. Или в моем, я скопирую и удалю

                
mpnz
За  0  /  Против  0
mpnz  написал  15.04.2022 в 10:46  в ответ на #13
А все, не надо, я понял, наверное...

                
SergejLukash
За  0  /  Против  0
SergejLukash  написал  15.04.2022 в 09:54  в ответ на #4
#30.1
854x529, jpeg
47.6 Kb

                
mpnz
За  0  /  Против  0
mpnz  написал  15.04.2022 в 10:04  в ответ на #8
Это тоже примерно понятно. Единственное, что меня взволновало - судьба несчастного ansverArray, позабытого в уголочке updateGameState. Хотя, если там тепло и кормят...

                
SergejLukash
За  1  /  Против  0
SergejLukash  написал  15.04.2022 в 10:24  в ответ на #10
Не хотел скринить всю программу, поэтому оно и не совсем понятно :) answerArray это массив, который:
var setupAnswerArray = function (word) {
for (var i=0; i<word.length; i++) {
answerArray[i] = "_";
}
return answerArray;
};
var answerArray = setupAnswerArray(word);

выглядит в итоге так: _ _ _ _ _ _

Функция обновляет элемент массива вот тут:
if (word[j] === guess) {
answerArray[j] = guess;

если угадал букву то получится: a _ a _ _ _ _ (просто пример)

Плюс функция считает к-во угаданных букв, ее результат попадает в переменную correctGuess. То есть все ок с answerArray, его никто не забыл, программа работает :)
#37.1
1028x290, jpeg
21.1 Kb

                
mpnz
За  0  /  Против  0
mpnz  написал  15.04.2022 в 10:35  в ответ на #12
Вот все что вы пишете - я понимаю.
Не понимаю только, в каком месте срабатывает изменение массива.
Чего-то я не знаю про js - ну не спец, не скрываю.
В функции setupAnswerArray есть строка "return answerArray" - все понятно, нет вопросов.
А где вывод answerArray из функции updateGameState?
В ней я вижу только вывод счетчика букв.

                
SergejLukash
За  1  /  Против  0
SergejLukash  написал  15.04.2022 в 10:51  в ответ на #14
Я сам тож не спец, только начал учить js :)
Попробую объяснить как сам понимаю:

1) Создался answerArray (тут понятно я так понял, мы получили для вывода _ _ _ _ _)

2) Вся игра это цикл while, в начале каждого игрового цикла мы вызываем
showPlayerProgress(answerArray );

где showPlayerProgress - это алерт, окошко в браузере, в котором выводится answerArray

var showPlayerProgress = function (answerArray) {
return alert(answerArray.join(" "));
};

3) Каждый цикл игры вызывает функцию updateGameState, в которой вот тут:

if (word[j] === guess) {
answerArray[j] = guess;

присваивается элементу массива answerArray угаданная буква, то есть мы переписываем "_" на букву. Новый игрвой цикл нам снова алертом показывает обновленный элемент answerArray, где пользователь кликает Ок и у него запрашивается новая буква..

if (word[j] === guess) - условие, если буква слова равна букве, которую ввел пользователь, то
answerArray[j] = guess; - элемент массива становится буквой пользователя

к примеру:
word = python
guess = y
answerArray = ["_", "_",...]

answerArray[1] = _
word[1] = y

прошел апдейт нашей функции..

if (word[1] === guess) {
answerArray[1] = guess;

стало:
answerArray = ["_", "y",...]

                
mpnz
За  0  /  Против  0
mpnz  написал  15.04.2022 в 11:06  в ответ на #18
Моя вина, тупанул немного спросонья. Надеюсь, вас не очень напряг.
Напрочь забыл, что переменная может быть глобальной, и вы не обязаны ее выводить из функции, просто изменили - и все. Смутило, что вы массив передаете в функцию - кмк глобальные не нужно передавать, они во всем пространстве существуют с момента объявления. Хотя хз, могу наврать.

Как бы в теории я это знал, но не помню, чтоб пользовался.
В php часто пользуюсь глобальными массивами, там их точно передавать не надо. Но и то, стараюсь глобальные не изменять - мало ли еще пригодятся, лучше отдать значение другой переменной.
Спасибо за просветление :)

                
SergejLukash
За  0  /  Против  0
SergejLukash  написал  15.04.2022 в 11:39  в ответ на #20
Не напрягли, мне даже интересно было поговорить об этом :) Когда кому-то что-то начинаешь объяснять, то сам потом лучше запоминаешь.

Каждый язык, что php что js имеет, я так понимаю, свои особенности. Я долго и упорно хотел передать из функции два значения. Либо ноль, если пользователь ничего не угадал, либо к-во угаданных букв. И ничего не работало )) я думал без ноля будет ошибка, функция ничего не вернет, а потом же идет вычитание.

Я на каком-то этапе написания программы получал в браузере ошибку NaN на значение к-ва не отгаданных букв и вылетал из игрового цикла очень быстро )) ведь функция сама по себе ничего не возвращает если пользователь ничего не угадал.

remainingLetters -= correctGuess; (у меня если пользователь не угадывает букву в correctGuess ничего не попадает, correctGuess = NaN). Если просто считать 5-NaN то будет ошибка. А с переменной и через -= (отнять и присвоить) то js нормально съел. remainingLetters -= NaN нормально работает :) типа 5 = 5-NaN и получаем 5..и цикл работает дальеш, потому что 5>0.

Мозг можно сломать с этими компьютерами :)))

                
Lika1977
За  0  /  Против  0
Lika1977  написала  15.04.2022 в 12:53  в ответ на #21
Про переменные это сложно понять, да. То есть когда вводишь какую-то переменную и присваиваешь ей значение. Я понимаю просто принцип, я не знаю этот язык. Но как вижу, что общие моменты есть с тем, которым я интересовалась.
Можно присвоить число, а можно вот такую сложную комбинацию, а можно присвоить функцию опять же какую-нибудь.

                
SergejLukash
За  1  /  Против  0
SergejLukash  написал  15.04.2022 в 11:45  в ответ на #20
Напрочь забыл, что переменная может быть глобальнойЦитатаКстати это фишка javascript, читал в другой книге. Он так работает, интерпретатор все переменные типа var выносит наверх, и видит их до выполнения всех функций, циклов и т.д. Но это приводило проблемам, если переменные повторялись и появился тип локальной переменной lat кажись, как раз для циклов или функций, если не хочешь чтобы она была видна за функцией, то пишешь lat myCode = .., а тип var myCode = ... подымет ее над всем кодом, где б ты ее не объявил :))

                
mpnz
За  1  /  Против  0
mpnz  написал  15.04.2022 в 11:59  в ответ на #22
let и var, только это не типы переменных, а способы их объявления, как я понимаю. Но углубляться не буду, а то закопаюсь. Сам часто пишу без объявления, тупо присваиваю переменной значение. Работает - и ладно.

var check = 0;
return check;
Должно отдавать ноль, а не NaN, по логике.
Странно...

                
mpnz
За  0  /  Против  0
mpnz  написал  15.04.2022 в 12:22  в ответ на #22
А, нас не попросили, а перенесли.
Ну я еще маленькую поправку попробую внести, пока не пришли настоящие программисты и не надавали по шеям.

function(){ var a = 1; } - объявляется локальная переменная а, которая будет работать только внутри функции. Если ранее объявлена глобальная переменная а - глобальная не изменится.

function(){ a = 1; } - присваиваем глобальной переменной а значение. Если глобальной переменной с таким именем не было - по идее она создастся.

                
Lika1977
За  0  /  Против  0
Lika1977  написала  15.04.2022 в 12:29  в ответ на #24
//А, нас не попросили, а перенесли.
Слава богу, что все обошлось именно так!

                
SergejLukash
За  0  /  Против  0
SergejLukash  написал  15.04.2022 в 12:30  в ответ на #24
Похоже вы правы :)) Хмм, с функциями так не работает. Еще учится и учится :))
#26.1
409x162, jpeg
17.0 Kb

                
Lika1977
За  0  /  Против  0
Lika1977  написала  15.04.2022 в 12:41  в ответ на #24
Виктор, может быть вы знаете, что означает этот знак ^J

                
mpnz
За  0  /  Против  0
mpnz  написал  15.04.2022 в 12:59  в ответ на #30
Нет, не знаю. Похоже на одноглазый смайлик

                
Lika1977
За  0  /  Против  0
Lika1977  написала  15.04.2022 в 13:15  в ответ на #32
Точно? Нигде вам такой знак не попадался?

                
Lika1977
За  0  /  Против  0
Lika1977  написала  15.04.2022 в 12:37  в ответ на #14
Там же только часть программы приведена. Не показаны общие её моменты. Они просто не показаны, так как это пример. И в этом примере оно не нужно. Как я думаю.

                
SergejLukash
За  1  /  Против  0
SergejLukash  написал  15.04.2022 в 14:31  в ответ на #29
Давайте я загружу весь код сюда:

<script type="text/javascript">
// Створюємо масив зі слів
var words = ["javascript", "monkey", "amazing", "pancake", "python", "angular", "mongodb", "node"];

// Обираємо випадкове слово
var pickWord = function () {
return words[Math.floor(Math.random() * words.length)];
};
var word = pickWord();
var remainingLetters = word.length;

// Встановлюємо масив відповідей
var answerArray = [];
var setupAnswerArray = function (word) {
for (var i=0; i<word.length; i++) {
answerArray[i] = "_";
}
return answerArray;
};
var answerArray = setupAnswerArray(word);

var showPlayerProgress = function (answerArray) {
return alert(answerArray.join(" "));
};

var getGuess = function () {
return prompt("Guess a letter, or click Cancel to stop playing.");
};
var updateGameState = function (guess, word, answerArray) {
var check = 0;
for (var j=0; j<word.length; j++) {
if (word[j] === guess) {
answerArray[j] = guess;
check++;
}
}
return check;
};

var showAnswerAndCongratulatePlaye r = function (answerArray) {
alert(answerArray.join(" "));
alert("Good job! The answer was " + word);
};

// ігровий цикл

while (remainingLetters > 0) {
showPlayerProgress(answerArray );
var guess = getGuess();
if (guess === null) {
break;
} else if (guess.length !==1) {
alert("Please enter a single letter")
} else {
var correctGuess = updateGameState(guess, word, answerArray);
remainingLetters -= correctGuess;
}
}

showAnswerAndCongratulatePlaye r(answerArray);

</script>

Не понял какой "знак" вы ищите..

                
Lika1977
За  0  /  Против  0
Lika1977  написала  15.04.2022 в 15:35  в ответ на #35
Знак ^J
Встречался где нибудь

                
SergejLukash
За  0  /  Против  0
SergejLukash  написал  15.04.2022 в 16:29  в ответ на #36
Знак ^JЦитатаА где вы его увидели? Я не вижу его нигде ))

                
Lika1977
За  0  /  Против  0
Lika1977  написала  15.04.2022 в 16:42  в ответ на #42
Смотрите на скриншот.
Т. е. вы понимаете, что это документы, которые я создаю. И этот знак я не ставила.
#46.1
1920x1200, jpeg
225 Kb

                
SergejLukash
За  0  /  Против  0
SergejLukash  написал  15.04.2022 в 17:23  в ответ на #46
Хмм, не знаю. Странно. Может быть после загрузки на onedrive какой-то символ из названия файла перевелся в такое ^J

                
Lika1977
За  0  /  Против  0
Lika1977  написала  15.04.2022 в 17:45  в ответ на #50
А ещё, я сначала в заметках записывала, то есть там интернет то вообще не нужен. Это программа как ежедневник или типо будильник, калькулятор, встроенная в функционал. Так вот в заметках подчёркивается слово и так и остаётся это подчеркивание. Хотя подчеркнуть слово там нет даже такой возможности.

                
SergejLukash
За  0  /  Против  0
SergejLukash  написал  15.04.2022 в 17:54  в ответ на #51
Не подскажу в чем проблема, не знаю :))

                
Lika1977
За  0  /  Против  0
Lika1977  написала  15.04.2022 в 15:50  в ответ на #35
Ещё и по украински, который я вообще не знаю
Первый абзац - это обозначен массив из следующих слов обезьяна, удивительный, панкейк, и т. д.
Далее функция, которая выбирает произвольно одно из этих слов
Правильно или нет?

                
Lika1977
За  0  /  Против  0
Lika1977  написала  15.04.2022 в 16:06  в ответ на #37
Далее переменной присваивается значение 0.
Вставляется массив. Массив для функции с переменной I. Если её значение больше 0 (Что такое i++ это для меня загадка) то печатает _

                
mpnz
За  1  /  Против  0
mpnz  написал  15.04.2022 в 16:16  в ответ на #38
Ну вот, вы уже почти программист.
i++ увеличивает значение i на единицу.
Теперь еще больше программист

                
Lika1977
За  0  /  Против  0
Lika1977  написала  15.04.2022 в 16:24  в ответ на #39
Ага). Меня больше всего интересует знак, который я вам и Сергею тоже написала.

                
mpnz
За  0  /  Против  0
mpnz  написал  15.04.2022 в 16:40  в ответ на #40
Вы скопируйте всю фразу или контекст, может и найдем

                
Lika1977
За  0  /  Против  0
Lika1977  написала  15.04.2022 в 16:44  в ответ на #45
#47.1
1920x1200, jpeg
225 Kb

                
mpnz
За  0  /  Против  0
mpnz  написал  15.04.2022 в 16:48  в ответ на #47
Это запятая похоже трансформировалась. Почему - хз

                
Lika1977
За  0  /  Против  0
Lika1977  написала  15.04.2022 в 17:03  в ответ на #48
Спасибо.

                
SergejLukash
За  1  /  Против  0
SergejLukash  написал  15.04.2022 в 16:25  в ответ на #38
Далее функция, которая выбирает произвольно одно из этих слов. Правильно или нет?ЦитатаДа, верно :)

var answerArray = []; - создается пустой массив, который записывается в переменную answerArray
Что такое i++ это для меня загадкаЦитатаfor (var i=0; i<word.length; i++) - это цикл фор, он выполняется до тех пор, пока верно условие.

1. Внутри него указывается переменная i=0, этот код выполняется перед циклом
2. Далее идет условие, цикл выполняется пока i меньше длинны word (в нашем случае тут будет к-во букв в рандомно вібранном слове, например 5)
3. Этот код выполняется пока условие верное, в нашем случае стоит инкремент, i++ это увеличение i на одну единицу. То есть начинается цикл i=0, потом 1, 2, 3, 4 и цикл заканчивается, потому что 5 не меньше 5 (если word.length = 5)

Тело цикла: answerArray[i] = "_";
Массив наполняется значениями _, на выходе мы получим answerArray = ["_", "_", "_", "_", "_"]

                
Lika1977
За  0  /  Против  0
Lika1977  написала  15.04.2022 в 16:31  в ответ на #41
А, количество букв определяет. Ну примерно понятно. Ну да это сложно уже, конечно. В слове может быть 5 или шесть букв. Пишет нужное количество значков _ под буквы. Если в слове 7 букв оно напишет под них 7 таких знаков.
_ _ _ _ _ _ _

                
SergejLukash
За  1  /  Против  0
SergejLukash  написал  15.04.2022 в 16:32  в ответ на #43
Да, верно :)

                
Lika1977
За  0  /  Против  0
Lika1977  написала  15.04.2022 в 10:07  в ответ на #8
Сергей, я под вашем рассказом про колобка написала вам. Откройте вашу страничку там. Или справа она сейчас должна появиться в темах форума.
#34.1
1920x1200, jpeg
485 Kb

                
Lika1977
За  0  /  Против  0
Lika1977  написала  15.04.2022 в 12:32  в ответ на #1
Как забавно получилось) теперь это выглядит, как то, что вы со всеми здороваетесь) ну и так далее...

                
SergejLukash
За  0  /  Против  0
SergejLukash  написал  15.04.2022 в 12:35  в ответ на #27
И не говорите :))

                
Lika1977
За  0  /  Против  0
Lika1977  написала  15.04.2022 в 13:21  в ответ на #28
Вот я и хотела перенести это все, чтобы уберечь вас.

                
Отправка жалобы...
Спасибо, ваша жалоба принята
Вы уже жаловались
Публикация комментариев и создание новых тем на форуме Адвего для текущего аккаунта ограничено.
Подробная информация и связь с администрацией: https://advego.com/v2/support/ban/forum/1186
Жаловаться можно только на чужой комментарий
Избранное
Добавить в избранное
Имя
URL
https://advego.com/blog/read/freestyle/7640012/?op=21315947