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

Зомбор: игра Дика Уорда

Крутые биты

Эта игра появилась после того, как я закончил учебник Pluralsight и хотел добавить в нее больше сложности. Версия в конце обучения случайным образом выбирала оружие, а затем выбрасывала случайное число, чтобы увидеть, выживет ли пользователь. Я решил, что хочу добавить немного сложности, например, очки жизни зомби, различия в оружии и дополнительные случайные элементы. Один из моих фаворитов происходит, когда пользователь выбирает бой с зомби, а затем выбирает нож в качестве оружия.

if (weapon.toLowerCase() === ‘нож’){ for (i = 3; i › 0; ){ random = Math.random()

alert («Вы атакуете зомби своим ${weapon.toLowerCase()}.`)

if (random › 0.75){ alert («Критический удар! О, чувак, ты снес этому зомбору морду прямо с головы») i = 0

}

else if (random › 0.25 && i › 1) { alert («Вы попали в зомби своим ${weapon.toLowerCase()}! `) i– alert («Потребуется еще ${i} ударов чтобы убить зомби!`) } else if (random › .25 && i === 1){ alert («Ты приканчиваешь зомби своими крутыми ножевыми движениями. Такой крутой. Ты.») i = 0

}

else { alert («Ты взмахиваешь ножом, и он пронзает плоть зомби»). Оповещение "Вы") ("Вы") оповещение ("Умер")

i = 0

То, как это работает, довольно круто. Цикл начинается с переменной i, которой присвоено число три. Это мой способ сделать некоторые закулисные хитпойнты для зомби. Если случайное число меньше 0,25, они мгновенно проигрывают, а если меньше 0,75 — мгновенно выигрывают. Но когда он находится между этими двумя, он регистрирует попадание и сообщает игроку, что ему нужно ударить зомби еще i раз, прежде чем он умрет.

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

Где я застрял

Есть два больших места, где я застрял в этой игре, и первое было самым очевидным и самым трудоемким для решения. По сути, у меня была фигурная скобка не на месте. Это простая проблема при написании большого количества кода — и для меня это много. У меня есть циклы for внутри операторов if внутри функций, и это быстро сбивает с толку. После того, как я разобрался, почему логика моего оператора finale else не работает, я внимательно посмотрел на то, что делала моя программа, произнес часть этого вслух и нашел свою дополнительную скобку. Бум, решено. Вторая проблема заключалась в том, что мой генератор случайных чисел создавал только одно случайное число, а затем использовал его во всей программе, а это означало, что крутой бой на ножах сверху будет только в одном направлении. Я думал, что каждый раз, когда я вызываю «случайную» переменную, она будет генерировать новое случайное число.

var random = Math.random()

Вышеприведенный код не говорит «случайному» каждый раз получать новое случайное число — он просто сообщает «случайному» любое число, которое Math.random генерирует в этом случае. Чтобы исправить это в бою на ножах, я поместил еще один random = Math.random() в начало цикла for. Это означает, что каждый раз, когда программа возвращается к началу цикла, она генерирует новое случайное число для результата.

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

О, и безумный реквизит, если вы получили референс🙂

Первоначально опубликовано на сайте thedickward.com 1 сентября 2017 г.