前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小恐龙の得分秘籍

小恐龙の得分秘籍

作者头像
ZC.TigerRoot
发布2020-04-30 00:55:49
8040
发布2020-04-30 00:55:49
举报
文章被收录于专栏:ZC.TigerRootZC.TigerRoot

小恐龙の得分秘籍

前几天看到有群友在群里晒他玩chrome://dino/的战绩,我微微一笑:

法一:让小恐龙自动浪

先上代码

代码语言:javascript
复制
function TrexRunnerBot() {
 
  const makeKeyArgs = (keyCode) => {
    const preventDefault = () => void 0;
    return {keyCode, preventDefault};
  };
 
  const upKeyArgs = makeKeyArgs(38);
  const downKeyArgs = makeKeyArgs(40);
  const startArgs = makeKeyArgs(32);
 
  if (!Runner().playing) {
    Runner().onKeyDown(startArgs);
    setTimeout(() => {
      Runner().onKeyUp(startArgs);
    }, 500);
  }
 
  function conquerTheGame() {
    if (!Runner || !Runner().horizon.obstacles[0]) return;
 
    const obstacle = Runner().horizon.obstacles[0];
 
    if (obstacle.typeConfig && obstacle.typeConfig.type === 'SNACK') return;
 
    if (needsToTackle(obstacle) && closeEnoughToTackle(obstacle)) tackle(obstacle);
  }
 
  function needsToTackle(obstacle) {
    return obstacle.yPos !== 50;
  }
 
  function closeEnoughToTackle(obstacle) {
    return obstacle.xPos <= Runner().currentSpeed * 18;
  }
 
  function tackle(obstacle) {
    if (isDuckable(obstacle)) {
      duck();
    } else {
      jumpOver(obstacle);
    }
  }
 
  function isDuckable(obstacle) {
    return obstacle.yPos === 50;
  }
 
  function duck() {
    Runner().onKeyDown(downKeyArgs);
 
    setTimeout(() => {
      Runner().onKeyUp(downKeyArgs);
    }, 500);
  }
 
  function jumpOver(obstacle) {
    if (isNextObstacleCloseTo(obstacle))
      jumpFast();
    else
      Runner().onKeyDown(upKeyArgs);
  }
 
  function isNextObstacleCloseTo(currentObstacle) {
    const nextObstacle = Runner().horizon.obstacles[1];
 
    return nextObstacle && nextObstacle.xPos - currentObstacle.xPos <= Runner().currentSpeed * 42;
  }
 
  function jumpFast() {
    Runner().onKeyDown(upKeyArgs);
    Runner().onKeyUp(upKeyArgs);
  }
 
  return {conquerTheGame: conquerTheGame};
}
 
let bot = TrexRunnerBot();
let botInterval = setInterval(bot.conquerTheGame, 2);

复制便捷版

代码语言:javascript
复制
function TrexRunnerBot(){function f(){Runner().onKeyDown(d);setTimeout(function(){Runner().onKeyUp(d)},500)}var b=function(a){return{keyCode:a,preventDefault:function(){}}},c=b(38),d=b(40),e=b(32);Runner().playing||(Runner().onKeyDown(e),setTimeout(function(){Runner().onKeyUp(e)},500));return{conquerTheGame:function(){if(Runner&&Runner().horizon.obstacles[0]){var a=Runner().horizon.obstacles[0];if((!a.typeConfig||"SNACK"!==a.typeConfig.type)&&50!==a.yPos&&a.xPos<=18*Runner().currentSpeed)if(50=== a.yPos)f();else{var b=Runner().horizon.obstacles[1];if(b&&b.xPos-a.xPos<=42*Runner().currentSpeed)Runner().onKeyDown(c),Runner().onKeyUp(c);else Runner().onKeyDown(c)}}}}}var bot=TrexRunnerBot(),botInterval=setInterval(bot.conquerTheGame,2);

法二:在分数上动点手脚

代码拿走

代码语言:javascript
复制
let hackScore = 0;

Object.defineProperty(Runner.instance_, 'distanceRan', {
  get: () => hackScore,
  set: (value) => hackScore = value + Math.floor(Math.random() * 1000),//1000是分数的倍数
  configurable: true,
  enumerable: true,
});

复制便捷版

代码语言:javascript
复制
var hackScore=0;Object.defineProperty(Runner.instance_,"distanceRan",{get:function(){return hackScore},set:function(a){return hackScore=a+Math.floor(1E3*Math.random())},configurable:!0,enumerable:!0});

将上面代码执行之后,再次运行程序,你会发现你获取分数的速度提升了一千倍。

如果你将第一个方案和这个方案的代码结合,会获得一个能够自动奔跑获得高分的“智能小恐龙”。

不过因为我们的“外挂”是基于计时器进行距离计算并模拟用户操作的,当你获得很高很高的分数之后,障碍物推进速度过快,一旦你进行窗口的来回切换,游戏进行暂停和游玩的状态切换,很大概率上“外挂”操作会延时,导致 GAME OVER

如何能避免这个事情呢,我们来讲讲第三个套路。

法三:直·接·开·挂话说前两个不算开挂吗

诺,代码

代码语言:javascript
复制
Runner.instance_.gameOver=function(){};

上面代码在执行之后,会清空游戏的中断逻辑,配合第二个方案的快速获得分数的代码,你可以得到一只拥有穿越障碍物能力的小恐龙:勇往无前,永不停歇,分数不停的增长,直到报错。

最重要的:食用方法

chrome://dino中按下F12,调到console,在里面输入你想要的代码就好啦!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 小恐龙の得分秘籍
    • 法一:让小恐龙自动浪
      • 法二:在分数上动点手脚
        • 法三:直·接·开·挂话说前两个不算开挂吗
          • 最重要的:食用方法
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档