如何检测玩家是否通过开发者控制台在点击器游戏中作弊?
问题分析
你的作弊检测逻辑完全无效,核心原因是这段代码的逻辑自相矛盾:
a = i b = a + 1 i += 1; if (i == b) { alert("No Cheats") } else { alert("Cheater!") }
这里b被赋值为i+1,紧接着i加1,所以i必然等于b,永远只会弹出"No Cheats",不管玩家有没有作弊。
除此之外,客户端变量i完全暴露在控制台,玩家可以直接修改它的值,你的检测逻辑完全依赖这个不可信的客户端变量,根本无法阻止作弊。
修复方案
要实现有效的点击作弊检测,你需要:
- 记录每次点击前的数值,对比点击后的数值变化,正常点击应该只增加1
- 尽量避免依赖完全可修改的全局变量(虽然客户端逻辑终究能被破解,但至少能挡住基础作弊)
修改后的代码如下:
HTML
<!DOCTYPE HTML> <title>Clicker</title> <noscript>turn on javascript man</noscript> <head> </head> <html> <body> <div id="one">Click the button to get your first dimension!</div> <button onclick="myFunc()"> Dimension Creator </button> </body> </html>
CSS
#one { width: 200px; height: 200px; border: 1px solid blue; } button { width: 200px; background: yellow; box-shadow: 4px 4px 4px #333; }
JavaScript
// 用变量记录上一次和当前的数值 let lastCount = 0; let currentCount = 0; function myFunc() { const statusElement = document.getElementById("one"); if (statusElement.innerHTML === "Click the button to get your first dimension!") { currentCount = 1; lastCount = currentCount; statusElement.innerHTML = "You have one dimension."; } else { // 正常点击后数值应该是上次值+1 const expectedNextCount = lastCount + 1; if (currentCount !== expectedNextCount) { alert("Cheater!"); // 重置数值到合理状态 currentCount = expectedNextCount; } else { alert("No Cheats"); } currentCount++; lastCount = currentCount - 1; // 更新上次值为本次增加前的数值 statusElement.innerHTML = `You have ${currentCount} dimensions.`; } }
补充说明
- 这个方案能检测玩家直接修改
currentCount的作弊行为,比如玩家在控制台执行currentCount = 100,下次点击时就会触发作弊提示 - 注意:客户端逻辑无法完全阻止作弊,真正安全的作弊检测需要在服务器端处理,但对于简单的点击器游戏,这个方案足够挡住大部分基础作弊
内容的提问来源于stack exchange,提问作者WinwinTheDumbguy
相关产品推荐
相关产品推荐

