Я пытаюсь внедрить таблицу статистики в свою игру. В настоящее время это очень глючит: полоса работает, когда оператор if истинен, но если я правильно понимаю слова один раз, полоса увеличивается, а если я снова получаю правильные слова, полоса увеличивается. Когда утверждение ложно, полоса возвращается к 0 (что я и хочу).
Проблема возникает, когда я снова правильно понимаю слова, полоса больше не увеличивается.
Также процент выигрыша иногда работает, а иногда расчеты неверны. Я неправильно настроил функцию?
if (guessedLetters.length == figureGuessWordsLength) {
LSdataWordle.CurrrentStreak++;
if (LSdataWordle.CurrrentStreak >= LSdataWordle.MaxStreak) {
LSdataWordle.MaxStreak = LSdataWordle.CurrrentStreak;
}
LSdataWordle.WinPercentage = (
(parseFloat(LSdataWordle.MaxStreak) /
parseFloat(LSdataWordle.DaysPlayed)) *
100
).toFixed(2);
window.localStorage.setItem("dataWordle", JSON.stringify(LSdataWordle));
} else {
LSdataWordle.CurrrentStreak = 0;
window.localStorage.setItem("dataWordle", JSON.stringify(LSdataWordle));
}
}
Также переместите window.localStorage.setItem("dataWordle", JSON.stringify(LSdataWordle));
за пределы if. Вы делаете то же самое в обоих случаях
Можете ли вы дать больше контекста для переменных, которые вы используете? Трудно понять, правильно ли то, что у вас есть, не зная, что представляют собой guessedLetters.length
, figureGuessWordsLength
, LSdataWordle.CurrrentStreak
и LSdataWordle.MaxStreak
. Как ты сейчас считаешь дни? Вы проверяете на основе того, какое слово было решено, или на основе того, когда оно было решено?
Что должен представлять WinPercentage
? Я никогда раньше не видел концепт max streak/days played
Таким образом, слова отображаются каждый день только один раз, пользователь должен угадывать слова по одной букве за раз, как палач. Таким образом, figureGuessWordsLength — это скрытое слово, которое нужно угадать, а GuessWords.length — это пользовательский ввод. Текущая серия увеличивается, если утверждение верно, а максимальная серия рассчитывается, если вы теряете серию и не угадываете слово.
WinPercentage рассчитывается как maxStreak / daysPlayed * 100
Я вижу одну вещь: вы не пересчитываете процент выигрыша при проигрыше. Вот почему иногда это, вероятно, не имеет смысла для вас. Так что полностью исключите это из операторов if, как показано ниже, а вызов window.localstorage
кажется независимым от каких-либо условий.
Чтобы выяснить, почему он не будет увеличиваться при победе после серии поражений, это сводится к тому, что такое guessedLetters.length
и что такое figureGuessWordsLength
. поставьте точку останова и посмотрите, совпадают ли они даже при выигрыше, потому что то, как вы разместили свой код, как будто это наверняка, но это может быть не так.
if (guessedLetters.length == figureGuessWordsLength) {
LSdataWordle.CurrrentStreak++;
if (LSdataWordle.CurrrentStreak >= LSdataWordle.MaxStreak) {
LSdataWordle.MaxStreak = LSdataWordle.CurrrentStreak;
}
}
else {
LSdataWordle.CurrrentStreak = 0;
}
LSdataWordle.WinPercentage = (
(parseFloat(LSdataWordle.MaxStreak) /
parseFloat(LSdataWordle.DaysPlayed)) *
100
).toFixed(2);
window.localStorage.setItem("dataWordle", JSON.stringify(LSdataWordle));
Я имею в виду, что они совпадают, потому что полоса увеличивается, когда вы выигрываете, и не увеличивается, когда вы проигрываете. Единственный раз, когда полоса не увеличивается, это когда вы выигрываете, затем проигрываете, а затем снова выигрываете!
Так что в этом случае прервите первый оператор if и убедитесь, что эти числа совпадают, в случае, о котором вы говорите. То, что они совпадают в некоторых случаях правильно, не означает, что они всегда будут совпадать, когда вы ожидаете от них.
Хорошо, это работает, и проблема была в том, что я не обновлял, когда ответ был неправильным, спасибо за помощь!
Они не используют пунктуацию в вашей шее леса? Я добавил несколько запятых и точек, и теперь это, по крайней мере, читается, не запыхавшись ;)