Chrome小恐龙游戏前端修改代码【含原理和代码】

已经授权"南华读书"公众号发表。
关注南华读书公众号


Chrome小恐龙前端修改代码分享

Chrome小恐龙是什么?

在Chrome(谷歌浏览器)断网之后访问在线页面,如a.com会出现以下界面,叫做Chrome小恐龙游戏.这是一个隐藏的彩蛋。除了断网以外,直接在Chrome里访问网站chrome://dino/也可以看到。
无连接后的彩蛋界面
这时按空格就可以开始游戏了。

怎么控制游戏?
按键中文名用途
UpKey箭头上跳跃
DownKey箭头下下蹲/快速降落
Space空格开始游戏/重新开始游戏/跳跃
修改代码使用说明

我提供的以下所有修改代码都可以这样使用!
第一步 打开Chrome浏览器打开这个网站
open第二步 按F12调出开发者工具
开发者工具第三步 点击下面图中的Console
点击Console
第四步 然后会弹出这个界面
console第五步 然后复制代码(这里选用下面的修改代码1中的压缩代码)
copy第六步 然后按一下回车,就可以运行代码了。
ok

修改代码1

将下面的代码贴到控制台中,即可完成小恐龙自动奔跑的神操作。
原版代码:

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

压缩版代码:

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

原理:
检测物体,自动按键模拟。这里还为了观看做了一点优化。

修改代码2

将下面的代码贴到控制台中,即可无视任何伤害。

Runner.instance_.gameOver=function(){}

原理:把gameOver函数置空。(好简单emmm)

修改代码3

积分提升速度修改为1000倍…
原版代码:

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

压缩版代码:

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

原理:
借助Object.defineProperty(),我们能够轻易的修改现有对象上的属性,配合重新定义对象具体内容的 gettersetter 描述符,可以做到对于属性的劫持操作。

修改代码4

刷分BUG,输进控制台按回车后再开始游戏即可

Runner.instance_.setSpeed(99999);

恢复正常请输入:

Runner.instance_.setSpeed(10);

倒退模式(没有什么用)请输入:

Runner.instance_.setSpeed(-10);
特别提示:

这些代码可以叠加使用。
在输入完一个代码后按回车,然后输入另一个代码再按回车即可实现叠加。

小彩蛋

其他浏览器也可以玩:https://2980077544.github.io/demo/chromexiaokonglong/

  • 26
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
以下是 Chrome恐龙游戏的 C 语言实现,可以在控制台中运行: ```c #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <windows.h> #define WIDTH 50 #define HEIGHT 10 int score = 0; int speed = 100; void clrscr() { system("cls"); } void gotoxy(int x, int y) { COORD pos = {x, y}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); } void draw(int x, int y) { gotoxy(x, y); printf("*"); } void erase(int x, int y) { gotoxy(x, y); printf(" "); } void print_score() { gotoxy(WIDTH + 5, 1); printf("Score: %d", score); } void print_speed() { gotoxy(WIDTH + 5, 2); printf("Speed: %d", speed); } int main() { int dino_x = 10; int dino_y = HEIGHT - 2; int obs_x = WIDTH; int obs_y = dino_y; int jump = 0; clrscr(); while (1) { // draw dino draw(dino_x, dino_y); // draw obstacle erase(obs_x, obs_y); if (obs_x == 1) { obs_x = WIDTH; score += 10; if (score % 50 == 0 && speed > 10) { speed -= 10; } } else { draw(obs_x, obs_y); obs_x--; } // print score and speed print_score(); print_speed(); // check collision if (dino_x == obs_x && dino_y == obs_y) { break; } // jump if (_kbhit()) { char c = _getch(); if (c == ' ') { jump = 1; } } if (jump == 1) { dino_y--; } else { if (dino_y < HEIGHT - 2) { dino_y++; } } if (jump == 1 && dino_y == HEIGHT - 5) { jump = 0; } // delay Sleep(speed); } clrscr(); printf("Game Over! Score: %d", score); return 0; } ``` 该代码实现了一个简单的控制台小游戏,玩家需要控制小恐龙躲避障碍物,直到碰到障碍物游戏结束。玩家可以通过空格键使小恐龙跳跃,得分会随着时间的推移而增加,游戏难度也会随之增加。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值