我在画布中编写了 HTML5 游戏,但遇到了问题。
我像这样使用var:
var score = 0;
// another code
++score;
但用户可以编辑该变量(例如在 FireBug 或 Chrome 编辑器中)——得分被黑。
有任何想法吗?
我在画布中编写了 HTML5 游戏,但遇到了问题。
我像这样使用var:
var score = 0;
// another code
++score;
但用户可以编辑该变量(例如在 FireBug 或 Chrome 编辑器中)——得分被黑。
有任何想法吗?
Javascript是客户端执行的。客户端上发生的任何事情都可以由它控制。没有其他办法了。您可以尝试混淆您的代码,但这只会使找出如何作弊变得更加困难。它无法阻止一个足够坚定的人。
设计防作弊游戏的唯一方法是在服务器上完成所有游戏机制。这当然在技术上更具挑战性,当用户连接不良时会损害游戏体验,并且会因为您需要更多服务器容量而花费您额外的资源,但这是唯一的方法。
顺便说一句:我们有一个姊妹网站http://gamedev.stackexchange.com专门针对有关游戏开发的问题。你可能会在那里得到一些更好的答案。
您实际上无法保护在客户端运行的任何代码!
因此,您无法保护变量的内容。你只能让破解变得更加困难——就像 Guffa 说的那样。
您可以将 score 变量作为局部变量放在类构造函数中,这样更难获得:
function MyClass() {
var score = 0;
this.somethingHappened = function() {
if (someondition) {
score++;
}
}
this.getScore = function() {
return score;
}
}
当然仍然可以破解代码,但它根本不像更改全局变量那么简单。
您无法采取任何措施来避免这种情况。您可以通过混淆代码使其更难,但仍然有可能破解分数。
一种更难的方法是双重保存分数,并在循环或某些函数中检查它是否在游戏逻辑之外发生了变化,这样用户需要找到这两个变量。
如果第二个分值是另一个分值的两倍,则通过将当前得分与所有变量得分进行比较,更难找到。
http://www.crockford.com/javascript/private.html
请参阅 Crockford 的关于 js 中的私有和公共 var 的文章