Chrome小恐龍前端修改代碼代碼總結
偶然間發現谷歌瀏覽器的離線小恐龍游戲,上網查找的攻略總結。
Chrome小恐龍是什么?
在Chrome(谷歌瀏覽器)斷網之后訪問在線頁面,如a.com
會出現以下界面,叫做Chrome小恐龍游戲.這是一個隱藏的彩蛋。
除了斷網以外,直接在Chrome里訪問網站chrome://dino/
也可以看到的。
這時按空格就可以開始游戲了。
怎么控制游戲?
按鍵 | 名稱 | 用途 |
---|---|---|
UpKey | 箭頭上 | 跳躍 |
DownKey | 箭頭下 | 下蹲/快速降落 |
Space | 空格 | 開始游戲/重新開始游戲/跳躍 |
修改代碼使用說明
提供的以下所有修改代碼都可以這樣使用!
第一步 打開Chrome瀏覽器打開這個網站
第二步按F12
調出開發者工具
第三步 點擊下面圖中的Console
第四步 然后會彈出這個界面
第五步 然后復制代碼(這里選用下面的修改代碼1
中的壓縮代碼即可
第六步 然后按一下回車,就可以運行代碼了。
修改代碼1 (復制壓縮版即可)
將下面的代碼貼到控制台(console)中,即可完成小恐龍自動奔跑的神操作。
原版代碼:
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倍…(數值可以自己定義 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()
,我們能夠輕易的修改現有對象上的屬性,配合重新定義對象具體內容的 getter
、setter
描述符,可以做到對於屬性的劫持操作。
修改代碼4
刷分BUG,輸進控制台按回車后再開始游戲即可
Runner.instance_.setSpeed(99999);
恢復正常請輸入:
Runner.instance_.setSpeed(10);
倒退模式(沒有什么用)請輸入:
Runner.instance_.setSpeed(-10);
最后特別提示:
這些代碼可以疊加使用。
在輸入完一個代碼后按回車,然后輸入另一個代碼再按回車即可實現疊加。
總結
游戲還得自己慢慢玩才有意思,當修改之后,這個游戲就失去原有的味道了…..
總之,想有意思地玩的話,建議還是不修改以上代碼,自己慢慢地好好玩,靠自己玩得的分數才有意義。
以上修改相關代碼,僅供參考。最后,祝大家愉快。