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