- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在为我的类(class)制作一个猜谜游戏,我们应该实现一个存储在本地的记分系统。我以为我理解了这个概念,但它并没有按照我预期的方式工作。当我玩游戏时,这些值存储在 localStorage 中,但是当我刷新时,这些值会重置......任何见解都会很棒!下面是我的脚本的开头,下面是我的 HTML 文件。
编辑:我将分数初始化为 1 的原因是因为只要用户猜对了,就会增加 4 分(产生 +3),而当用户猜错时,就会减去 1 分(产生 -2)。每次点击重启按钮,用户都会再失去 1 分。
编辑 2:为了更清晰,不妨粘贴我脚本的其余部分:P
编辑 3:JSfiddle 很棒! http://jsfiddle.net/2pdaoeu6/
'use strict';
//Define a container for the game, its variables and its methods.
var game = {
answerPosition: 0, // position of the current answer in the answersList - start at 0
display: '', // the current dash/guessed letters display - ex '-a-a--r--t'
wrong: '', // all the wrong letters guessed so far
answer: '', // the correct answer - one word from game.answersList
wrongCount: 0, // the number of wrong guesses so far
over: false, // is the game over?
score: 1, // 1 - 1 = 0
answersList: [ // list of answers to cycle through
'JavaScript',
'document',
'element',
'ajax',
'jQuery',
'event',
'json',
'listener',
'transition',
'window'
]
};
game.restart = function () {
localStorage.setItem('localScore', game.score - 1);
var localScore = Number(localStorage.getItem('localScore'));
// var localScore = localStorage.localScore;
// Initialize the game at the beginning or after restart
// Initialize the game variables - the model
game.answer = game.answersList[game.answerPosition].toLowerCase(); // get the word for this round
// use the modulo operator to cycle through the answersList
game.answerPosition = (game.answerPosition + 1) % game.answersList.length;
game.display = game.dashes(game.answer.length);
game.wrong = '';
game.wrongCount = 0;
game.over = false;
game.score = localScore;
// Initialize the web page (the view)
$('progress').val('0'); // initialize the progress bar
$('#display').text(game.display);
$('#wrong').text('');
$('#guessedletter').val('');
$('#score').text(localScore); // initialize score
// The focus method invoked on an input element allows the user to type in that input without having to click it.
$('#guessedletter').focus();
};
game.play = function () {
// Invoked when the user clicks on GUESS
if (game.over) {// if the game is over
$('#wrong').text('Press RESTART to play again.'); // user has to restart
} else {
//if the game is not over yet
var guess = $('#guessedletter').val().toLowerCase();
if (game.check(game.answer, guess)) {
// if the guess is valid
$('#display').text(game.display);
} else if (guess) {
// If it's a wrong non-empty guess
game.wrong = guess + ' ' + game.wrong;
game.wrongCount++;
$('#wrong') .text(game.wrong);
$('progress').val(game.wrongCount);
}
// reinitialize the guess
$('#guessedletter') .val('');
$('#guessedletter').focus();
// check for a win or loss
game.outcome();
}
};
game.dashes = function (number) {
// this function takes a number as a parameter
// and returns a string with that many dashes
var result = '';
for (var i = 1; i <= number; i++) {
result = result + '-';
}
return result;
};
game.check = function (answer, letter) {
// Checks all occurrences of the letter guessed against game.answer.
// Returns true if the guess is correct and false otherwise.
// Updates the game dash display variable game.display if applicable.
var position;
var result = false;
if (letter) { // check that guess is not the empty string
// Find the first occurrence of guess in the answer
position = game.answer.indexOf(letter);
// if the guessed letter is found in the answer
if (position > - 1) {
result = true;
}
while (position >= 0) {
// update the dash display and find all remaining occurrences
game.display = game.display.substring(0, position) + letter + game.display.substring(position + 1);
// get the next occurrence
position = game.answer.indexOf(letter, position + 1);
}
}
return result;
};
game.outcome = function () {
// check if the game is won or lost
if (game.answer === game.display) {
$('#wrong') .text('Congratulations! You win! +3 points.');
// game.score = (game.score + 4);
game.score = Number(localStorage.getItem('localScore')) + 4;
// localStorage['localScore'] = Number(localStorage.getItem('localScore')) + 4;
game.over = true; // game is over. User has to restart to play again
setTimeout(function(){game.restart()}, 3000);
} else if (game.wrongCount >= 10) {
$('#wrong') .text('No more guesses; the answer was: ' + game.answer
+ '! -2 points :(');
// game.score = (game.score - 1);
game.score = Number(localStorage.getItem('localScore')) - 1;
// localStorage['localScore'] = Number(localStorage.getItem('localScore')) - 1;
game.over = true; // game is over. User has to restart to play again
setTimeout(function(){game.restart()}, 3000);
}
};
// Main program starts here
$(document).ready(function () {
game.restart();
$('#guessbutton').click(game.play);
$('#restart').click(game.restart);
});
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Guessing Game</title>
<link rel="stylesheet" type="text/css" href="guess.css" media="all">
</head>
<body>
<h2>Guess a Letter</h2>
<p id="display" class="letters"></p>
<input id="guessedletter" type="text" maxlength='1' class="letters" autofocus>
<div>
<input id="guessbutton" type="button" value="GUESS">
</div>
<p>Wrong Letters</p>
<p id="wrong" class="letters wrong"> </p>
<progress value="0" max="10"></progress>
<div>
<input id="restart" type="button" value="RESTART">
</div>
<p>Score: <span id="score"></span></p>
<script defer src="../scripts/jquery-1.11.3.js"></script>
<script defer src="../scripts/guess.js"></script>
</body>
</html>
最佳答案
据我所知,您在加载应用程序时调用了 game.restart()
。在你的 restart()
方法中,你这样做:
localStorage.setItem('localScore', game.score - 1);
当您的应用程序启动时,您每次都在重置 localStorage
键 localScore
,而您最后的分数消失了。尝试检查值是否存在,如果存在,则跳过 setItem
,如下所示:
game.restart = function () {
// if the localScore is not set, initialize it with your default value
// otherwise don't set the localScore -> it would overwrite the saved values
if(localStorage.getItem('localScore') === null) {
localStorage.setItem('localScore', game.score - 1);
}
// .... rest of your function
}
关于javascript - 为什么刷新页面时 localStorage 条目会重置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30860132/
尝试使用集成到 QTCreator 的表单编辑器,但即使我将插件放入 QtCreator.app/Contents/MacOS/designer 也不会显示。不过,相同的 dylib 文件确实适用于独
在此代码示例中。 “this.method2();”之后会读到什么?在返回returnedValue之前会跳转到method2()吗? public int method1(int returnedV
我的项目有通过gradle配置的依赖项。我想添加以下依赖项: compile group: 'org.restlet.jse', name: 'org.restlet.ext.apispark', v
我将把我们基于 Windows 的客户管理软件移植到基于 Web 的软件。我发现 polymer 可能是一种选择。 但是,对于我们的使用,我们找不到 polymer 组件具有表格 View 、下拉菜单
我的项目文件夹 Project 中有一个文件夹,比如 ED 文件夹,当我在 Eclipse 中指定在哪里查找我写入的文件时 File file = new File("ED/text.txt"); e
这是奇怪的事情,这个有效: $('#box').css({"backgroundPosition": "0px 250px"}); 但这不起作用,它只是不改变位置: $('#box').animate
这个问题在这里已经有了答案: Why does OR 0 round numbers in Javascript? (3 个答案) 关闭 5 年前。 Mozilla JavaScript Guide
这个问题在这里已经有了答案: Is the function strcmpi in the C standard libary of ISO? (3 个答案) 关闭 8 年前。 我有一个问题,为什么
我目前使用的是共享主机方案,我不确定它使用的是哪个版本的 MySQL,但它似乎不支持 DATETIMEOFFSET 类型。 是否存在支持 DATETIMEOFFSET 的 MySQL 版本?或者有计划
研究 Seam 3,我发现 Seam Solder 允许将 @Named 注释应用于包 - 在这种情况下,该包中的所有 bean 都将自动命名,就好像它们符合条件一样@Named 他们自己。我没有看到
我知道 .append 偶尔会增加数组的容量并形成数组的新副本,但 .removeLast 会逆转这种情况并减少容量通过复制到一个新的更小的数组来改变数组? 最佳答案 否(或者至少如果是,则它是一个错
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
noexcept 函数说明符是否旨在 boost 性能,因为生成的对象中可能没有记录异常的代码,因此应尽可能将其添加到函数声明和定义中?我首先想到了可调用对象的包装器,其中 noexcept 可能会产
我正在使用 Angularjs 1.3.7,刚刚发现 Promise.all 在成功响应后不会更新 angularjs View ,而 $q.all 会。由于 Promises 包含在 native
我最近发现了这段JavaScript代码: Math.random() * 0x1000000 10.12345 10.12345 >> 0 10 > 10.12345 >>> 0 10 我使用
我正在编写一个玩具(物理)矢量库,并且遇到了 GHC 坚持认为函数应该具有 Integer 的问题。是他们的类型。我希望向量乘以向量以及标量(仅使用 * ),虽然这可以通过仅使用 Vector 来实现
PHP 的 mail() 函数发送邮件正常,但 Swiftmailer 的 Swift_MailTransport 不起作用! 这有效: mail('user@example.com', 'test
我尝试通过 php 脚本转储我的数据,但没有命令行。所以我用 this script 创建了我的 .sql 文件然后我尝试使用我的脚本: $link = mysql_connect($host, $u
使用 python 2.6.4 中的 sqlite3 标准库,以下查询在 sqlite3 命令行上运行良好: select segmentid, node_t, start, number,title
我最近发现了这段JavaScript代码: Math.random() * 0x1000000 10.12345 10.12345 >> 0 10 > 10.12345 >>> 0 10 我使用
我是一名优秀的程序员,十分优秀!