Ранее я уже писал о программировании роботов на JavaScript. Но роботы быстро надоедают из-за отсутствия сюжета и, главное, из-за отсутствия возможности ломать логику.
Untrusted - наверное лучшая игра для JavaScript программистов. Слышна приятная музыка. На черной странице браузера зеленая собака(@) окруженная решетками(#). Стрелка влево и собака сдвинулась влево. Стрелка вправо, собака сдвинулась вправо. Вроде бы все просто. Думаю, нужно дойти до голубого символа. Скорее всего это и есть выход из первого уровня.
Стоп. Мы полностью окружены стеной из решеток, а выход снаружи и к нему не пробраться. Что это за ⌘? Подойдем поближе. Вау! Появились исходники первого уровня.
/*****************
* cellBlockA.js *
*****************
*
* Good morning, Dr. Eval.
*
* It wasn't easy, but I've managed to get your computer down
* to you. This system might be unfamiliar, but the underlying
* code is still JavaScript. Just like we predicted.
*
* Now, let's get what we came here for and then get you out of
* here. Easy peasy.
*
* I've given you as much access to their code as I could, but
* it's not perfect. The red background indicates lines that
* are off-limits from editing.
*
* The code currently places blocks in a rectangle surrounding
* you. All you need to do is make a gap. You don't even need
* to do anything extra. In fact, you should be doing less.
*/
Dr. Eval? Я? Символично, спасибо. Жаль только доступ не ко всему исходному коду, впрочем, иначе было бы не интересно. Итак, что мы имеем? Нужно убрать стены из нашего ASCII мира. Закомментируем один из циклов. Жмем Ctrl+5 и наш мир обновляется. Стен больше нет и путь ко второму уровню полностью открыт.
Теперь тут целый лабиринт из решеток и нам не пройти. Да и доступ есть всего к паре строк кода этого уровня. Хотя, зачем нам две строки? Хватит и одной! Никто ведь не запрещает создать свой выход на третий уровень с блэкджеком и нужными координатами.
Остальные 20 уровней будут все сложнее и сложнее. И если первые штук пять можно пройти имея базовые знания JS, то дальше нам их понадобится чуточку больше и все так же не мало смекалки. Эта игра затянет любого веб-разработчика своей простотой и невероятно интересной задумкой.
В следующих уровнях появляется больше интерактива. У вас будет телефон, способный вызывать соответствующий калбек. За вами будут охотиться дроны с авто-наводкой на цель. Вас забросят в лесной лабиринт и заставят переплывать реку. Скучно не будет, я уверяю.
А вот реальное читерство здесь не в ходу. eval() запрещен, доступ к window запрещен. Не получится и переписать ключевые функции самой игры, которые находятся в красной области. Конечно, можно обфусцировать вызов eval(), а сам код затрамбовать в отдельную строку, но будет совсем не интересно.