4

任何玩家都可以通过浏览器控制台更改纸杯蛋糕的数量,轻松地在这款游戏中作弊。我想知道是否有办法阻止用户这样做。这也发布在github 上

var numberOfCupcakesDisplay = document.getElementById("numberOfCupcakes");
var cupcake = document.getElementById("cupcake");

function updateValues() {
    numberOfCupcakesDisplay.innerHTML = amountOfCupcakes.toString();
    //displays number of cupcakes to screen
    document.getElementById("amountOfToasters").innerHTML = amountOfToasters.toString();
    //displays number of toasters to screen
    document.getElementById("toasterButton").innerHTML = "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp" + Math.round(costOfToasters).toString() + " cc";
    //changes cost of toaster every time it is bought by 110%
}

cupcake.addEventListener('webkitAnimationEnd', function(e){
    e.preventDefault();
    this.style.webkitAnimationName = '';
}, false);

function clickCupcake() {
    ++amountOfCupcakes;
    cupcake.style.animation = "shiftCupcake";
    cupcake.style.webkitAnimationName = "shiftCupcake";
}

updateValues();
4

4 回答 4

7

是的!!正如其他答案所提到的,阻止用户从浏览器控制台更改值是不可能的换句话说,您只是在问如何编写 JS 代码,以便用户无法调试它。您总是可以使用一些让想要在游戏中作弊的人生活困难的方法。

1.混淆代码。

查看这些链接以获取有关混淆的更多信息。

2.不要将游戏的控制值存储在全局变量中。

不要将控制值存储在全局变量中。而是定义一个类并将这些变量作为私有变量,这样用户必须深入挖掘才能找出断点的放置位置。

3.Minify/压缩你的javascripts。

混淆或多或少也涵盖了缩小。

于 2013-12-15T03:05:28.353 回答
3

通过浏览器控制台更改纸杯蛋糕的数量

好吧,从技术上讲,您可以通过创建新范围来防止这种情况:

(function(){
    var cupcakes = 10;
})();

console.log(cupcakes); // ReferenceError: cupcakes is not defined

但请注意,即使有这种保护(即编辑 JS 源代码),仍然存在“作弊”的方法。如果你将结果发送到服务器......好吧,如果不是不可能的话,那将更加难以保护,因为你可以轻松地通过XMLHttpRequest.

于 2013-12-15T02:59:16.187 回答
3

你无法阻止这一点。你能做的最好的事情就是缩小 JS,这样玩家就很难找到正确的值来改变。事实上,您无法通过任何游戏或应用程序来阻止这种情况。用户的计算机控制着所有的信息,因此他们可以做任何他们想做的事情。

避免这种情况的唯一方法是在您控制的服务器上进行所有处理。即使如此,玩家也可以对他们的输入数据撒谎(因此是瞄准机器人或其他黑客)。

于 2013-12-15T02:51:43.090 回答
0

实际上可能有一种方法可以实现您的目标。但这取决于游戏的逻辑。

如果您可以在服务器上模拟游戏,您可以为蛋糕生成随机 ID,并且当游戏(在客户端)创建新蛋糕时,它会为其请求一个 ID。稍后当蛋糕被“销毁”时,它会联系服务器并提供蛋糕的 ID。然后在服务器上根据收到的 ID 计算最终分数。

通过这种方式,您可以跟踪用户实际所做的事情。

但是攻击者可以监听网络请求并确定创建新 ID 的请求。同样的方式他可以确定请求告诉服务器这个ID已经被“销毁”了。

如果您的游戏逻辑允许,您可以例如告诉服务器每 5 秒左右只生成一个 ID。您还可以将所有蛋糕都“摧毁”并且没有遗漏的所有结果标记为欺骗(如果游戏足够困难)。

因此,它仍然不是 100% 安全的,但您可能能够达到相对较高水平的欺骗保护。另一方面,它增加了很多代码复杂性,你必须权衡利弊。

于 2014-01-21T01:34:16.870 回答