Используйте интерфейсный метод, чтобы бросить вызов игре Chrome Dinosaur.

внешний интерфейс Apple игра Chrome

Этот сайт использует лицензионное соглашение «Signature 4.0 International (CC BY 4.0)», добро пожаловать на перепечатку или изменение для использования, но вам необходимо указать источник.Атрибуция 4.0 Международная (CC BY 4.0)

Автор этой статьи: Су Ян

Время создания: 13 сентября 2018 г. Количество: 4298 слов Время чтения: 9 минут чтения Ссылка на эту статью:Поиск TEARY.com/2018/09/13/...


Используйте интерфейсный метод, чтобы бросить вызов игре Chrome Dinosaur.

Сегодня посмотрел форум и нашел, что кто-то писал об этомChrome周年庆祝В игру "Маленький динозавр" встроено новое меню, которое можно трогать рукамиторти что ты получишь, когда прикоснешься к немушляпа на день рождения.

Глядя на улучшение пасхального яйца «Маленький динозавр» сейчас, прошлое живо вспоминается мне. Но вскоре кто-то разместил в посте высокий балл и привлек мое внимание: хотя эта игра проста, после того, как счет достигнет определенного уровня, ускорение заставит игрокатрудныйПродолжить игру.

Я помню, как играть в эту игру в аэропорту давным-давно, я получил его из моей памятиболее 3000 балловЭто все еще довольно сложно, не говоря уже оВосемь тысяч очковПоэтому я спекусирую этот игрок здесь должен иметь некоторые «особые навыки».

Как правило, есть не более трех способов добиться невероятно высокого результата в игре:

  1. Практика: усердно учись, практика делает совершенным, плюс чрезвычайное терпение.
  2. Инструменты: для имитации действий человека используются некоторые вспомогательные средства.
  3. Плагины: измените сложность или количество очков, или напрямую измените результаты, или даже нарушайте правила игры.

Первый способ мы пока пропустим.Если мы действительно будем бездействовать позже, мы попробуем еще раз.Начнем сразу попытку последних двух схем.

Вспомогательные средства для письма

奔跑的小恐龙

Характер джентльмена не отличается от других, и он хорош в фальсификации вещей.

Иностранец в Интернете однажды написал программу, которая автоматически прыгает в соответствии с расстоянием между маленьким динозавром и предметами перед ним в направлении оси X. После небольшой модификации вставьте следующий код в консоль, чтобы завершить автоматическую бег маленького динозавра. .

Здесь добавлен код, чтобы маленький динозавр не мог перепрыгнуть через торт и избежать еды, а также отрегулировать оценку высоты препятствия для прыжка, чтобы маленький динозавр не увидел низколетящую птицу в лоб.Конечно, он также может выполняться при выполнении кода, после чего игра запускается автоматически.

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

Если вы хотите поиграть в игру «Маленький динозавр» в настольном браузере, в дополнение к операции отключения сети вы также можете напрямую посетитьchrome://dino/Этот адрес.

Если вы хотите испытать автоматический запуск маленьких динозавров на своем мобильном телефоне, выполните следующие действия:

  1. Откройте Chrome после режима полета, а затем перейдите на любую страницу, чтобы вызвать интерфейс маленького динозавра.
  2. Вставьте приведенный выше код в адресную строку.
  3. Вручную плюс перед адресной строкойjavascript:, затем подтвердите.

Ваш маленький динозавр просто ушел сам по себе, но здесь вы по-прежнему получаете очки с той же скоростью, что и обычный игрок, а маленький динозавр делает один шаг и зарабатывает одно очко.

Итак, давайте изменим путь.

Переписать логику оценки

Вместо того, чтобы переписывать, лучше сказать "угон". ES5 имеет очень старый API,Object.defineProperty(), с помощью этого API мы можем легко изменить свойства существующего объекта и сотрудничать с переопределением конкретного содержимого объекта.getter,setterЗнакомы дескрипторы, которые могут выполнять операции захвата атрибутов? Да, это решение также является одним из решений реализации двусторонней привязки данных клишированного фреймворка MVVM.

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

Выполнив приведенный выше код, снова запустите программу, и вы обнаружите, что скорость вашего счета увеличилась в тысячу раз.

Если вы объедините первую схему с кодом этой схемы, вы получите «умного маленького динозавра», который может автоматически запускаться и получать высокие баллы.

Однако, поскольку наш «плагин» основан на таймере для расчета расстояния и имитации действий пользователя, когда вы набираете очень высокий балл, препятствия продвигаются слишком быстро, как только вы переключаете окна вперед и назад, игра приостанавливается и При переключении состояния игры велика вероятность того, что работа "плагина" будет задержана, в результате чегоGAME OVER.

Как этого избежать, поговорим о третьей рутине.

Нарушение правил Дафа

Если первая программа, по крайней мере, существует стоимость времени, проигрыватель симуляции работает по шагу, чтобы получить оценку класса; вторая программа ворует день, один шаг составляет одну тысячу шагов; тогда следующая программа очень бесстыльна.

Runner.instance_.gameOver=function(){};

Следующий код после выполнения очищает логическую игру прерывания, при быстром доступе к кодовым точкам второго варианта можно пройти через препятствие, способное на маленьких динозавров: Перед смело Нет, никогда не останавливайтесь, сохраняйте рост очков до появления ошибки .

разное

Я нажал соответствующий код наGitHubНа, заинтересованные студенты также могут посетить, чтобы узнать больше.

Сначала напишите сюда, сходите на конференцию Apple.

--EOF


Теперь у меня есть небольшая группа по метанию, в которую входят друзья, которые любят метать.

В отсутствие рекламы мы будем вместе болтать о софте, HomeLab и вопросах программирования, а также время от времени будем делиться технической информацией о салоне в группе.

Друзья, которые любят бросать, могут отсканировать код, чтобы добавить друзей. (Пожалуйста, укажите источник и цель, иначе не пройдет проверку) Эти вещи о том, чтобы бросить группу в группу

Эти вещи о том, чтобы бросить группу в группу