You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测玩家是否通过开发者控制台在点击器游戏中作弊?

问题分析

你的作弊检测逻辑完全无效,核心原因是这段代码的逻辑自相矛盾:

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. 记录每次点击前的数值,对比点击后的数值变化,正常点击应该只增加1
  2. 尽量避免依赖完全可修改的全局变量(虽然客户端逻辑终究能被破解,但至少能挡住基础作弊)

修改后的代码如下:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:01:22