У меня проблемы с серией и подсчетом процента побед в моей игре на JavaScript

Я пытаюсь внедрить таблицу статистики в свою игру. В настоящее время это очень глючит: полоса работает, когда оператор 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));
}
}

Они не используют пунктуацию в вашей шее леса? Я добавил несколько запятых и точек, и теперь это, по крайней мере, читается, не запыхавшись ;)

mplungjan 17.03.2022 16:05

Также переместите window.localStorage.setItem("dataWordle", JSON.stringify(LSdataWordle)); за пределы if. Вы делаете то же самое в обоих случаях

mplungjan 17.03.2022 16:06

Можете ли вы дать больше контекста для переменных, которые вы используете? Трудно понять, правильно ли то, что у вас есть, не зная, что представляют собой guessedLetters.length, figureGuessWordsLength, LSdataWordle.CurrrentStreak и LSdataWordle.MaxStreak. Как ты сейчас считаешь дни? Вы проверяете на основе того, какое слово было решено, или на основе того, когда оно было решено?

Jacob K 17.03.2022 16:07

Что должен представлять WinPercentage? Я никогда раньше не видел концепт max streak/days played

maraaaaaaaa 17.03.2022 16:11

Таким образом, слова отображаются каждый день только один раз, пользователь должен угадывать слова по одной букве за раз, как палач. Таким образом, figureGuessWordsLength — это скрытое слово, которое нужно угадать, а GuessWords.length — это пользовательский ввод. Текущая серия увеличивается, если утверждение верно, а максимальная серия рассчитывается, если вы теряете серию и не угадываете слово.

Asn 17.03.2022 16:12

WinPercentage рассчитывается как maxStreak / daysPlayed * 100

Asn 17.03.2022 16:13
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
48
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я вижу одну вещь: вы не пересчитываете процент выигрыша при проигрыше. Вот почему иногда это, вероятно, не имеет смысла для вас. Так что полностью исключите это из операторов 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));

Я имею в виду, что они совпадают, потому что полоса увеличивается, когда вы выигрываете, и не увеличивается, когда вы проигрываете. Единственный раз, когда полоса не увеличивается, это когда вы выигрываете, затем проигрываете, а затем снова выигрываете!

Asn 17.03.2022 16:28

Так что в этом случае прервите первый оператор if и убедитесь, что эти числа совпадают, в случае, о котором вы говорите. То, что они совпадают в некоторых случаях правильно, не означает, что они всегда будут совпадать, когда вы ожидаете от них.

maraaaaaaaa 17.03.2022 16:31

Хорошо, это работает, и проблема была в том, что я не обновлял, когда ответ был неправильным, спасибо за помощь!

Asn 17.03.2022 20:27

Другие вопросы по теме