Cave Escape был моим проектом Unit 1 и первым крупным проектом, над которым я работал с тех пор, как начал курс WDI. При просмотре подсказки одной из идей, которая привлекла мое внимание, была «Текстовое приключение». Мне вспомнилось смутное воспоминание об игре в текстовое приключение, в котором я вводил команды для навигации по темной пещере, поэтому я решил попробовать создать свою собственную версию этой игры.

Я решил использовать классы JavaScript для хранения данных для каждой секции пещеры. Функция конструктора помечала каждую секцию как комнату, а переменная для каждой комнаты получала имя в зависимости от того, чем они были. Обычные участки были $r, тупики были $de, а также были стартовая и финишная зоны. Каждая комната будет иметь пять свойств: по одному для каждого из четырех направлений, в которых может двигаться игрок, и одно для описательного текста, который должен отображаться, когда игрок находится внутри этой области. Каждое направление будет иметь переменную для смежной комнаты в этом направлении со стенами, определяемыми логическим значением false. Это была довольно простая, но трудоемкая часть моего кода. Единственная проблема, которую я обнаружил, заключалась в том, что если я определял одно свойство комнаты как другую комнату, определенную ниже в моем коде, оно возвращалось как неопределенное. Это было легко исправить, записав каждое направление как ложное и переопределив правильные направления с соответствующими комнатами после того, как каждая комната была определена в моем коде. Я написал описательный текст в документе Google, скопировал и вставил его в код, как только закончил создание базовой карты.

Первой функционирующей частью игры, которую я разработал, была функция «Начать игру». Игрок нажимал кнопку СТАРТ, и она исчезала, когда появлялось игровое окно. Это было довольно просто создать. После разметки необходимых элементов в HTML и CSS я написал функцию, которая меняет непрозрачность кнопки СТАРТ на 0 при нажатии, одновременно изменяя непрозрачность игрового окна с 0 на 1. Я использовал переход CSS, чтобы придать ей эффект появляется и исчезает, а не меняется мгновенно.

Безусловно, самой сложной частью игровой логики было написание функции для перемещения игроков по комнатам. Я знал, что хочу, чтобы игроки писали команды для движения, поэтому я создал форму, которая будет захватывать текст, который напишет игрок, и вызывать функцию, которая будет действовать соответствующим образом. Комната, в которой в данный момент находился игрок, сохранялась в переменной, а текст внутри игры менялся в зависимости от свойства текста этой комнаты. Мне потребовалось некоторое время, чтобы понять, как поставить все части на свои места, но мне удалось написать функцию, которая будет запускаться, когда игрок отправляет текст через форму. Сначала функция проверила, чтобы убедиться, что игрок ввел команду, если он этого не сделал, ничего не произошло. Если игрок ввел правильную команду, функция проверит и увидит, какая комната находится в соответствующем направлении. Если false, игрок получит предупреждение о том, что он ударился головой о стену. Если бы в этом направлении была другая комната, текущая комната изменилась бы на эту комнату, и текст в окне игры также изменился бы. Последняя комната была другой, так как все четыре свойства направления были булевыми истинными, что вместо этого давало игроку предупреждение, подтверждающее, что он прошел игру. Я также запрограммировал кнопку повтора, которая меняет текущую комнату обратно на начальную при нажатии на случай, если игрок застрянет или захочет повторить попытку, когда закончит.

В качестве последнего небольшого штриха в игре я решил включить песню, когда игрок дойдет до предпоследней комнаты, чтобы дать ему понять, что он почти в конце. Я встроил mp3-файл в HTML-код своей страницы и написал функцию, в которой песня будет воспроизводиться, когда игрок нажимает клавишу ввода, а текущая переменная комнаты является предпоследней комнатой. Первоначально я хотел, чтобы эта функция была частью функции отправки для перемещения комнат, но даже после того, как я задал вопрос о переполнении стека, я не мог понять это. Было несколько песен, которые я обсуждал, но в конце концов я решил пойти с Silver Scrapes Дэнни Маккарти, потому что это была единственная песня, которая соответствовала звучанию «близкого конца», к которому я стремился. У него также был шанс немного побеспокоить одного из моих инструкторов, что было дополнительным бонусом.

На этой неделе я решил прочитать эту статью о создании Node.js API. Я нашел это довольно интересным и еще одним способом взглянуть на использование узла, экспресса и почтальона для создания API. Сначала это было немного повторяющимся, так как начало касалось понятий и инструкций, которые мы прошли в классе на этой неделе. Я бы хотел, чтобы я наткнулся на эту статью перед тем, как приступить к домашнему заданию, потому что она помогла мне лучше понять, как использовать Node и написать правильный JavaScript для того, что я хотел сделать.

Они углубляются в статью немного глубже, чем мы узнали до сих пор, но, поскольку она относится к контексту разработки CRUD-приложения, она должна быть актуальна. На самом деле мы мало рассмотрели PUT или Update и пока ничего не узнали об Delete. Я до сих пор не совсем понимаю, почему синтаксис такой, как у node, но я уверен, что с практикой я пойму его лучше. Точно так же я относился к vanilla JS, когда впервые начал его изучать.