Chrome Dino 小恐龙作弊?控制台解决|技术点评

吐槽君 分类:javascript

Drawable

不知道你是否对 chrome://dino 这个网址有些什么印象?你最多拿了多少分?

Dinosaur Game(也被称为 T-雷克斯 游戏),最初代号为 Program Bolan,由塞巴斯蒂安·加布里埃尔(Sebastien Gabriel)于 2014 年构建的,是 Chrome 浏览器内置的一个小游戏。

Chrome 浏览器在无网络连接的错误页面埋了一个彩蛋:按下空格键,一只小恐龙雷克斯就会倒腾它的两条小短腿在沙漠中跑起来。我们可以用空格键或者 键控制起跳,用 键控制下蹲,帮它跳过大大小小的仙人掌、躲过突然飞来的翼龙。

但 其 实!

游戏把它的 instance 暴露在了全局变量中 —— window.Runner

console.log(window.Runner.instance_);
 

Console 输出

我想,聪明的你,早就已经明白了,我们应该干什么了吧~

云海

Instance 中的一个变量名很是显眼 —— config,再加之其中的变量名也很是显眼,就先让我们来玩一玩配置吧:

image.png

疾跑

window.Runner.instance_.setSpeed(100);
 

不过值得注意的是,跑得太快,脚下的陆地会被雷克斯像在地毯上那样,直接给你掀了~

Chrome Dino 小恐龙作弊?控制台解决|技术点评

高跳

window.Runner.instance_.tRex.setJumpVelocity(100);
 

跳太高,看不见,一摔下来扎屁屁(

Chrome Dino 小恐龙作弊?控制台解决|技术点评

没障碍物

window.Runner.instance_.playingIntro = true;
 

没有障碍物,一览无余~

Chrome Dino 小恐龙作弊?控制台解决|技术点评

无敌

window.Runner.instance_.gameOver = () => {};
 

无敌是多么,多么寂寞~

Chrome Dino 小恐龙作弊?控制台解决|技术点评

自动化

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);
 

Chrome Dino 小恐龙作弊?控制台解决|技术点评

分数速度

let hackScore = 0;

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

在不影响雷克斯速度的情况下加快分数的速度

Chrome Dino 小恐龙作弊?控制台解决|技术点评

设置分数

Object.defineProperty(Runner.instance_, 'distanceRan', {
    get: () => 99999,
    set: (value) => 99999,
    configurable: true,
    enumerable: true,
});
 

  • 本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情

回复

我来回复
  • 暂无回复内容