- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一些 jQuery:
$("#pink").click(function() {
user_seq.push(1);
});
$("#blue").click(function() {
user_seq.push(2);
});
$("#yellow").click(function() {
user_seq.push(3);
});
$("#green").click(function() {
user_seq.push(4);
});
例如,如果用户单击 #blue
、#yellow
和 #green
,我希望它推送到数组[2,3,4]
。
然后,如果数组长度与另一个数组的长度匹配,则该数组清空,并再次开始相同的过程。
但是,当我对数组进行 console.log 时,在第一轮之后的每一轮新一轮中,其中的值都会被推送比需要的次数更多的次数。这是控制台日志的样子,用户序列应该与计算机序列匹配:
最终目标是比较两个数组,如果它们匹配,则向游戏添加另一个步骤。这是fiddle 。单击绿色小圆圈开始游戏/继续添加回合。
整个JS在这里,最后一部分(function check()
)我还没有使用过:
/***************
* Presets
***************/
var round = 0;
var user_count = 0; //how many times the player has pressed a button
var strict = false; //strict mode on/off
var user_seq = []; //the order the player has pressed the buttons
var right_seq = []; //the right sequence of presses
/*************
* Start Game
*************/
$("#start").click(function() {
//strict mode on
$("#strict").click(function() {
$(this).addClass("disabled");
strict = true;
});
gen_sequence();
})
/****************************
* Generate a random sequence
****************************/
function gen_sequence() {
round++;
$("#round-text").text(round); //display round number
var n = Math.floor(Math.random() * 4) + 1; //generate a random number from 1-4
right_seq.push(n); //push the number to the sequence array
show_sequence();
};
/***********************
* Display the sequence
***********************/
function show_sequence() {
var k = right_seq.length;
//assign each button a number
//when the loop goes over it that button's animation plays
(function animation(i) {
if (i >= right_seq.length) {
return;
}
setTimeout(function() {
if (right_seq[i] == 1) {
setTimeout(function() {
TweenMax.from("#pink", 2, {opacity: 0.8, scale: 0.2, ease: Elastic.easeOut});
one.play();
}, 1000);
} else if (right_seq[i] == 2) {
setTimeout(function() {
TweenMax.from("#blue", 2, {opacity: 0.8, scale: 0.2, ease: Elastic.easeOut});
two.play();
}, 1000);
} else if (right_seq[i] == 3) {
setTimeout(function() {
TweenMax.from("#yellow", 2, {opacity: 0.8, scale: 0.2, ease: Elastic.easeOut});
three.play();
}, 1000);
} else {
setTimeout(function() {
TweenMax.from("#green", 2, {opacity: 0.8, scale: 0.2, ease: Elastic.easeOut});
four.play();
}, 1000);
}; //end for loop
animation(++i);
}, 500);
})(0);
user_input();
}
/********************
* User sequence
********************/
//what the user inputs after seeing the sequence play out
//on each click the count goes up
//the number of the button is pushed to the user's array to be compared with the correct sequence
function user_input() {
$("#pink").click(function() {
user_seq.push(1);
});
$("#blue").click(function() {
user_seq.push(2);
});
$("#yellow").click(function() {
user_seq.push(3);
});
$("#green").click(function() {
user_seq.push(4);
});
console.log("computer: " + right_seq);
console.log("user: " + user_seq);
};
/**************************************************
* Check if user's sequence matches the correct one
**************************************************/
function check() {
if (right_seq.length === user_seq.length && user_seq === right_seq) {
if (round <= 20) {
//display message
user_seq = [];
right_seq = [];
gen_sequence();
$(".circle").removeClass("disabled");
} else {
//display message
//instructions to restart game
}
} else if (strict = true) {
round = 0;
user_seq = [];
real_seq = [];
//display message
} else {
show_sequence();
}
}
最佳答案
看起来你的 show_sequence 函数正在运行 user_input ,它在每次调用时向每个按钮添加一个新的单击处理程序。由于每次显示模式时都会运行 show_sequence,因此每次新一轮都意味着额外的单击处理程序以及按下按钮时的额外插入。
要查看此操作(在 Chrome 中),请检查其中一个按钮,然后在“元素”选项卡中单击右侧面板上的“事件监听器”。如果您打开“点击下拉列表”,您应该能够看到当前分配的所有点击监听器。当你开始新一轮时,将会添加越来越多的听众,这就是你的问题的原因。
我建议仅在页面加载时调用 user_input 以避免这种情况。
关于javascript - 数组中的项目推送超出了需要的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39809094/
在文档中我们可以找到 The limits are based on a moving window that tracks the number of requests you send per h
我试图了解使用 Windows Azure 托管 Web 服务的正确方法。在阅读了一些可用的文档后,我已经达到以下几行: Windows Azure takes the following actio
我正在使用 unboundid ldap sdk 来执行 ldap 查询。运行 ldap 搜索查询时遇到一个奇怪的问题。当我对包含 50k 个条目的组运行查询时出现异常。我的异常(exception)
我有以下 docker-compose 文件: version: "2.4" services: auto_check: image: python mem_limit: 97M
我有副本集(托管在亚马逊上),其中有: 主要 中学 仲裁者 它们都是 3.2.6 版本,这个副本正在我的分片集群中创建一个分片(如果这很重要,尽管我认为它不重要)。 当我在 primary 上键入 r
我知道在 C++ 中访问缓冲区边界是未定义的行为。 这是来自 cppreference 的示例: int table[4] = {}; bool exists_in_table(int v) {
嗨,我有一个表单的 div。我希望当鼠标离开 div 时禁用单击事件。所以我尝试了这个,但它不起作用,div 仍然可以点击。有什么想法吗?? var flag = false; $("#foo").l
我正在使用我的客户端获取有关存储在我的 Swift 对象存储中的某个文件的一些信息,该文件可以通过 REST Api 访问。在 Swift 中,指向指定对象的 HEAD 方法和 url 返回它的元数据
如何在 Excel 的 CONCATENATE 函数中使用超过 255 个字符?我实际上也在 EXCEL 的 HYPERLINK 函数中使用 CONCATENATE 函数。一个例子如下: =HYPER
在 java 6 web 应用程序中,我尝试从执行的命令中检索大量输出。我在 javaworld article 上“借用/窃取/基于”它。我面临的问题是,由于输出被截断,长度似乎超出了大小限制。我已
我有一个更改事件,当选择框更改时会触发该事件。然而,选择框位于被替换的 div 内,因此会重新生成选择框。由于此错误可能是由于无限循环造成的,因此我猜测创建选择框时也必须触发我的触发事件。我尝试了很多
我正在 visual studio 2013 中用 c# 创建一个网络服务。我已连接到数据库并使用以下代码返回 json。 [WebMethod] [ScriptMethod(ResponseForm
我使用 php 脚本解析远程 xml 文件并将网页上的输出打印到 div 中。由于我需要输出必须与当前播放的轨道同步,所以我使用 Javascript 每 20 秒重新加载一次 div 内容。在测试页
#define MAX_BUFF_SIZE 64 char input[MAX_BUFF_SIZE]; int inSize = read(0, input, MAX_BUFF_SIZE); if
我在申请公司时遇到了问题。 我将总结系统的关键要素: 我公司的系统几年前就在 Windows XP 和 7(家庭版、专业版、基本版)机器上运行。 它是用 .NET 4.0 编写的,基于 WCF。 它使
我有一个渲染循环,用于监听数位板输入并从顶点/索引缓冲区(以及其他内容)中绘制。顶点数据可以增长,当它达到一定水平时,DispatchMsg(&msg) 会遇到这种情况: Unhandled exce
我通过 Postgres JDBC 驱动程序使用 Java 1.7 和 Postgres。将从 Web 服务使用数据库连接。在测试中,我得到了以下错误: FATAL: connection limit
我想知道当超过 Firebase 实时数据库的限制时会发生什么。问题是我知道我可以拥有的最大连接数仅为 100。现在,假设我的 Android 应用程序有 1,000 个活跃用户,并且我实现了实时数据
我正在将一组图像上传到我的 node.js Express 服务器,但收到错误 - “错误:超出 maxFieldsSize”。看起来默认的 maxFieldsSize 是 2MB。我需要能够上传最多
我正在使用 Django 构建一个小型 Web 项目,该项目有一个包含 ImageField 的模型 (Image)。当我尝试使用管理界面上传图片时,我遇到了这个问题(删除了个人身份信息): Runt
我是一名优秀的程序员,十分优秀!