Javascript井字棋计时器
Javascript tic-tac-toe timer
本文关键字:计时器 Javascript 更新时间:2023-09-26
我正在制作一款井字游戏,有人建议我制作一个计数器,告诉我还有多少时间可以移动。比方说10秒。如何让计时器在后台运行并在每次移动完成时重置,或者阻止游戏使未及时移动的人成为失败者?这是我的HTML:
<html>
<header>
<link rel="stylesheet" href="styles/style.css"/>
</header>
<body>
<div class="centered" id="content">
<div class="row" id="r1">
<div class="field empty" id="f1"></div>
<div class="field empty" id="f4"></div>
<div class="field empty" id="f7"></div>
</div>
<div class="row" id="r2">
<div class="field empty" id="f2"></div>
<div class="field empty" id="f5"></div>
<div class="field empty" id="f8"></div>
</div>
<div class="row" id="r3">
<div class="field empty" id="f3"></div>
<div class="field empty" id="f6"></div>
<div class="field empty" id="f9"></div>
</div>
</div>
<script type="application/javascript" src="scripts/jquery/jquery-3.1.1.min.js"></script>
<script type="application/javascript" src="scripts/scripts.js"></script>
</body>
</html>
javascript/jquery:
var changeTurn = false;
var turn = true;
var classCross = "cross";
var classCircle = "circle";
var classEmpty = "empty";
$('.field').click(function(event) {
event.stopImmediatePropagation();
var div = $(this);
changeTurn = false;
if (turn) {
if (fieldIsFree(div)) {
div.removeClass(classEmpty);
div.addClass(classCircle);
changeTurn = true;
}
}
else {
if (fieldIsFree(div)) {
div.removeClass(classEmpty);
div.addClass(classCross);
changeTurn = true;
}
}
if (changeTurn)
turn = !turn;
return false;
});
function fieldIsFree(tmpdiv) {
if (tmpdiv.hasClass(classCross))
return false;
if (tmpdiv.hasClass(classCircle))
return false;
return true;
}
我已经实现了一个非常无聊的游戏,它向你展示了如何做到这一点。您需要注意的主要事情是跟踪setTimeout的返回值。此值应用于取消当前超时(使用clearTimeout
),您将希望在每次玩家移动或游戏暂停或停止时执行此操作。
"use strict";
var timer;
var button;
var timeLeft;
var label;
function countdown() {
if (timeLeft) {
label.innerHTML = timeLeft;
timeLeft--;
timer = setTimeout(countdown, 1000);
} else {
label.innerHTML = "Fail";
timer = undefined;
}
}
function takeMove() {
// timer will only be undefined if the game is not started
if (typeof(timer) === "undefined") {
button.innerHTML = "Move";
timeLeft = 10;
countdown();
} else {
clearTimeout(timer);
timeLeft = 10;
countdown();
}
}
function init() {
button = document.getElementById("move");
label = document.getElementById("label");
button.addEventListener("click", takeMove);
}
document.addEventListener("DOMContentLoaded", init, false);
<div id="game-board">
<button id="move">Start</button>
</div>
<div id="output">
Time left: <span id="label"><span>
</div>
你可以这样做:
全局定义超时引用
var timeoutReference;
转弯开始/转弯处
// the previous player made his move on time, clear his timeout
clearTimeout(timeoutReference);
// set a new timeout for the new player
timeoutReference = setTimeout(function(player) {
return function() { setLose(player); }
}(currentPlayer), 10000);
其中currentPlayer
是十字或圆形,setLose
是处理提前结束游戏并显示玩家输了而另一个玩家赢了的函数。
在setTimeout
中,我们使用了一个闭包来保持在函数范围内超时后丢失的播放器引用。
相关文章:
- 如何在窗体打开时从javascript倒计时计时器值中节省时间
- 我如何才能确保计时器设置为每天4点半,所以我不会;不用在Javascript中提及某个日期
- 如果弹出窗口关闭,Javascript停止/重置计时器
- Javascript倒计时计时器倒计时未正确更新秒/分钟
- 设置Javascript倒计时计时器的初始值
- JavaScript图像横幅计时器HTML
- 计时器自动运行,而不是单击javascript按钮
- JavaScript倒计时计时器不会显示两次
- 如何设置此javascript倒计时计时器的样式
- 在 Node.Js 脚本中使用 Javascript 计时器在特定时间触发事件
- 如何在 JavaScript 中计算秒表/计时器
- Javascript 倒数计时器 - 客户端时间与 mySQL 时间
- 如何运行javascript并每分钟重新加载DIV容器(计时器)
- Javascript 计时器只调用一次 Code 隐藏方法
- 如何用JavaScript编写倒计时计时器
- 重置图像滑块的Javascript计时器
- 设置计时器并使用javascript/PHP进行检查
- 正在停止Javascript计时器
- 暂停倒计时计时器(JavaScript)
- 如何在 Django 模板中创建计时器 JavaScript 组件