Window.local storage
Добрый день уважаемые гуру.
Помогите пожалуйста разобраться. Пытаюсь сделать игру камень ножницы бумага: HTML:
<body>
<div>
<p>Камень ножницы бумага</p>
<button onclick="
resultsTableEntry(rockCode)
console.log(score);
" class="rock-btn">
Камень
</button>
<button onclick="
resultsTableEntry(scissorCode)
console.log(score);
" class="scissor-btn">
Ножницы
</button>
<button onclick="
resultsTableEntry(paperCode)
console.log(score)
" class="paper-btn">
Бумага
</button>
<button onclick="resetScore()">Сбросить счет!</button>
<p class="score-output"></p>
</div>
<script src="source/javascript/r_s_p.mjs"></script>
</body>
JS: Простите за кучу if else, позже обязательно попробую это все улучшить
//Переменные выбора пользователя, передаваемые в функцию
//для сравнения с выбором компьютера
const rockCode = 'Камень';
const scissorCode = 'Ножницы';
const paperCode= 'Бумага';
// Объект для хранения результатов игры
const resultsTable = {
ties: 0,
wins: 0,
losses: 0
};
// Пытаюсь записать результат в памяти компьютера, чтоб при
//обновлении страници не обнулялся resultTable
const score = JSON.parse(localStorage.getItem('resultsTable'));
// Рандомный выбор для компьютера
const randomNumb = () => {
let randomNumb = Math.random();
if (randomNumb.toFixed(3) <= 1 / 3) {
randomNumb = rockCode;
} else if (randomNumb.toFixed(3) > 1 / 3 && randomNumb.toFixed(3) < 2 / 3) {
randomNumb = scissorCode;
} else if (randomNumb.toFixed(3) > 2 / 3 && randomNumb.toFixed(3) < 1) {
randomNumb = paperCode;
}
return randomNumb;
};
//Сравнение выбора машины и выбора пользователя
const res = (userChoice) => {
const computerChoice = randomNumb();
let message;
if (userChoice === rockCode && computerChoice === rockCode){
message = 'Ничья не взяла';
}else if(userChoice === rockCode && computerChoice === scissorCode){
message = 'Usver WIN';
}else if(userChoice === rockCode && computerChoice === paperCode){
message = 'MACHINE WIN';
;
}else if(userChoice === scissorCode && computerChoice === rockCode){
message = 'MACHINE WIN';
}else if(userChoice === scissorCode && computerChoice === scissorCode){
message = 'Ничья не взяла';
}else if(userChoice === scissorCode && computerChoice === paperCode){
message = 'Usver WIN';
}else if(userChoice === paperCode && computerChoice === rockCode){
message = 'Usver WIN';
}else if(userChoice === paperCode && computerChoice === scissorCode){
message = 'MACHINE WIN';
}else if(userChoice === paperCode && computerChoice === paperCode){
message = 'Ничья не взяла';
}
return message;
};
// Сброс очков
const resetScore = () => {
resultsTable.wins = 0;
resultsTable.ties = 0;
resultsTable.losses = 0;
alert(`
Победы: ${resultsTable.wins}
Ничьи: ${resultsTable.ties}
Поражения: ${resultsTable.losses}`);
};
//Итоговая функция для сохранения очков в обьект resultsTable
const resultsTableEntry = (userChoice) => {
const duelResult = res(userChoice);
if (duelResult === 'Ничья не взяла') {
return resultsTable.ties += 1;
}
if (duelResult === 'Usver WIN') {
return resultsTable.wins += 1;
}
if(duelResult === 'MACHINE WIN') {
return resultsTable.losses += 1;
}
};
// Пытаюсь записать результат в памяти компьютера, чтоб при
//обновлении страници не обнулялся resultTable
localStorage.setItem('resultsTable', JSON.stringify(resultsTable));
В браузере все работает(кроме localStorage), но если пытаюсь скомпилировать это в vsCode выдает ошибку: ReferenceError: localStorage is not defined Грешу на то что код находится в подключаемом файле, и просто не видит объект Window.(но могу серьезно ошибаться) Пытался вбить в отдельный скрипт в HTML файле local.Storage тоже ничего не вышло. Подскажите куда копать. |
vscode не использую, но предполагаю что ты пытаешься запускать в нём код в режиме node.js(серверный js) - там нет никакого window(потому что нет окна) и никакого localStorage(потому что это браузерная фишка).
Скорее всего где-то там в настройках надо поменять режим запуска, но хз, возможно он так вообще не умеет и проверять тебе надо в обычном браузере. |
Режим запуска
Ну запускаю то я это все на локальном сервере, все срабатывает. Значение сохраненного в локальное хранилище объекта не меняется. Хотя объект resultsTable меняется
|
Думаю скорее всего дело в том, что подсчет идет в функции
|
Цитата:
Вот эта строка
// Пытаюсь записать результат в памяти компьютера, чтоб при
//обновлении страници не обнулялся resultTable
localStorage.setItem('resultsTable', JSON.stringify(resultsTable));
Она просто отрабатывает сразу, а не после выполнения какого то действия. |
Т.е. если я его запишу в последнюю выполняемую функцию, все должно сработать? В принципе объект находится в локальной зоне видимости, и на сколько я понимаю, localstorage должен его увидеть
|
| Часовой пояс GMT +3, время: 21:37. |