我有一个用JavaScript编写的游戏,基本上要做的是启动十秒钟的计时器,并在计时器弹出之前单击用户可以单击某个按钮的次数。
代码如何工作:
当用户单击按钮时,使用push
函数将元素添加到数组中,然后在单击的次数时返回数组的长度。
此问题:
如果用户打开Dev工具并改变了每次点击数个数组的元素的次数,这将改变结果的结果。
我的方法:
我决定要做的是在运行push
函数之前以及运行push
功能之前存储长度,然后比较它们的差异,如果它大于1
,则意味着某些东西是不对的。这似乎在我的脑海中起作用,直到我用代码写下来并发现,如果用户在检查差异之前多次推动,那么它将不会引起注意。请大脑大家,帮助我。
我的代码:
$('body').on('click', '.btn.z', function () {
// start listening
startCountingClicks()
})
var timerStarted = false;
var tc = [];
function startCountingClicks () {
$('.btn.z').html('ClickZed');
$('.Score').html('Your Score: '+gettc()+" clicks");
if (timerStarted == false) {
startTimer(10, $('#time'));
}
// user does multiple push before this function: startCountingClicks is called
var previous_length = tc.length; // get length before push
tc.push(1);
var new_length = tc.length; // get length after push
if (new_length - previous_length !== 1) {
console.log("fraud"); // this is supposed to catch a thief!!!
}
console.log(new_length+" "+previous_length);
timerStarted = true;
}
function gettc (){
// get number of clicks
return tc.length ;
}
一个完全破坏此问题的代码:
$('button').click(function(){tc.push(1); tc.push(1)})
编辑:
我不希望防止开发工具,尽管如果它起作用,我不反对这种方法。我只是希望获得一种更好的计算点击的方法,这是在开发工具上编写代码不会影响的一种方式。
您不能真正阻止人们在客户端做事。试图防止这一点是毫无意义的。您可以做的最好的事情是确保发送的任何发送的匹配与服务器端的期望。