Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何防止主机在HTML5游戏中作弊?_Javascript_Html_Console - Fatal编程技术网

Javascript 如何防止主机在HTML5游戏中作弊?

Javascript 如何防止主机在HTML5游戏中作弊?,javascript,html,console,Javascript,Html,Console,我设计了一个HTML5游戏,其中一个方块可以射向其他方块。你有一定数量的生命并获得分数。如何防止用户进入控制台并执行以下操作: score=5000 planetHealth=200 游戏代码 $(文档).ready(函数(){ 国际之星(600); }); var FPS=60; 宽度=300; 高度=400; var gBackground=document.getElementById(“画布背景”).getContext(“2d”); var gPlayer=document.ge

我设计了一个HTML5游戏,其中一个方块可以射向其他方块。你有一定数量的生命并获得分数。如何防止用户进入控制台并执行以下操作:

score=5000
planetHealth=200 
游戏代码

$(文档).ready(函数(){
国际之星(600);
});
var FPS=60;
宽度=300;
高度=400;
var gBackground=document.getElementById(“画布背景”).getContext(“2d”);
var gPlayer=document.getElementById(“canvas_player”).getContext(“2d”);
var gEnemies=document.getElementById(“canvas_”).getContext(“2d”);
var GUI=document.getElementById(“canvas_ui”).getContext(“2d”);
var=[];
var=[];
var-shottimer=0;
var maxShootTimer=15;
var得分=0;
var planetHealth=50;
var gameState=“菜单”;
变量键={
上:错,
唐:错,
左:错,
右:错
};
变量播放器={
宽度:16,
身高:16,
x:(宽度/2)-8,
速度:3,,
y:身高-20,
真的,
render:function(){
gPlayer.fillStyle=“#24430A”;
gPlayer.fillRect(this.x,this.y,this.width,this.height);
},
勾选:函数(){
如果(Key.left&&this.x>0)this.x-=this.speed;
如果(Key.right&&this.xobj2.x&&
obj1.yobj2.y
);
}
函数星(x,y){
这个.x=x;
这个。y=y;
this.size=Math.random()*2.5;
this.render=函数(){
gBackground.fillStyle=“白色”;
gBackground.fillRect(this.x,this.y,this.size,this.size)
};
this.tick=函数(){
这个.y++;
}
}
函数createStars(数量){

对于(i=0;i,您无法阻止用户篡改控制台,而浏览器的开发工具为您提供了许多方法来查看代码中的任何地方,即使是在闭包和精简代码中

但是…你可以让它变得更难

首先,你可以像Facebook那样做,在控制台上打印一个大红色警告,说“你不应该在这里”。我们实际上只是吓跑了用户,真的

另一种选择是将代码封装在闭包中,这样它就不会暴露在全局范围中。这避免了通过控制台直接操作

;(function(){

  // all code in here

());
更难的是使用缩小器和模糊器

minifier的主要目的是通过重命名名称和以较短的方式重写代码来减少文件大小。其副作用是,代码变得难以阅读,因为大多数情况下它与原始代码没有任何相似之处。如果不使用minifier,情况会更糟,并且可能需要数小时才能跟踪和理解

模糊处理程序重写代码时,代码的运行方式仍然相同,只是以不同且通常不可读的方式编写。它们甚至可以在base64中对重写后的代码进行编码。对于那些不知道base64是什么的人来说,它们已经消失了

同样,我们只是让你的代码更难获取,以抵御那些想要的“黑客”


一个更简单的方法是只在页面外进行验证,就像在服务器上一样,并使用各种方法来确定篡改数据。像快速打字这样的游戏会在一定的时间内施加最大分数,因为我们都知道我们不能每秒键入一百万字。如果数据看起来异常,有些游戏会涉及数据分析。

不要这样做。如果你的游戏完全是客户端的,那么你就无法真正阻止玩家作弊。你可以通过代码混淆或将变量移出全局范围来增加难度,但这并不能阻止真正想作弊的人


如果玩家连接到服务器进行多人游戏或其他任何操作,您可以实施服务器端检查,因为用户将无法触摸该代码。

您正在Javascript的主作用域上运行代码,即
窗口

创建全局变量时,此变量在
窗口中的作用域为
对象

因此,您可以这样做:

var a = 1;
console.log(a); // 1
console.log(window.a); // 1
使用著名的IIFE(代表立即调用的函数表达式)可以很容易地避免这种情况。您可以在

就是这样做:

(function() {
    // put all your code inside here
})();
当您执行此操作时,该函数中的所有变量都将包含在该函数的作用域中


但是要知道,你不能阻止用户欺骗游戏,你只能让它变得更难。

我懂一点PHP。你有什么链接或指导如何做到这一点吗?@CødePlay不抱歉,我不是一个游戏开发人员,只是使用我所知道的javascript和web开发人员。这不是世界上最简单的事情,而且它只会让人感觉到e来为多人游戏做这件事,因为你已经需要在上面获取数据了