Вы можете прочитать Enemy-Rain часть 1 по ссылке ниже.

Вражеский дождь, часть 1



Когда я впервые начал писать код для игры, у меня не было намерения создавать более одного героя, потому что требовалось создать одного героя. Исходя из этого, весь код был написан для выполнения этого требования. Однако, когда я узнал о классах объектов и их использовании, я подумал, почему бы не создать класс Hero, чтобы я мог создать более одного героя, чтобы сделать его многопользовательской игрой.

После создания класса Hero и успешного создания более одного героя я столкнулся с проблемой, когда при столкновении героя с врагом только один герой может убивать, а второй нет. Это произошло потому, что метод move() в классе Enemy был написан таким образом, чтобы он сравнивал значение left противника с значением left onlyHero, когда он выполнял оператор if, выполняя убивающую часть. Таким образом, часть kill метода move() работала только для onlyHero, а не для secondHero.

Чтобы исправить это, я дал методу move() параметр heroName для передачи аргумента, чтобы я мог сравнить значение слева обоих героев с значением слева противника.

Однако была одна проблема. Мне приходилось вызывать метод перемещения каждый раз, когда создавался новый герой.

Это вызвало проблему, когда метод move() вызывался дважды одновременно, хотя его нужно было вызвать только один раз.

Это не было бы проблемой, если бы был только один герой, но поскольку их больше одного, каждый раз, когда добавляется новый герой, должен был бы вызываться метод move().

Первый подход, который у меня был, заключался в попытке создать метод kill(), который передавался бы классу Hero, чтобы всякий раз, когда герой встречал врага (герой знает конкретное значение левой стороны врага), он убивал его. Но проблема с этим подходом заключалась в том, что было трудно получить левое значение врага, столкнувшегося с героем, потому что не было определенного имени или переменной для идентификации врага. Поэтому я попытался создать массив врагов и запустить цикл, чтобы найти врага, который столкнулся с героем. Но количество врагов всегда будет меняться, поэтому будет сложно найти конкретного врага, которого я хочу.

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

Итак, я поместил двух героев в массив с именем myHeroes и запустил метод forEach() в операторе if, чтобы враг был убит. Таким образом, я смог вызвать метод move() только один раз, и проблема была устранена. Хотя это может быть не самый эффективный и действенный способ решить эту проблему, я надеюсь найти лучшее решение позже, когда я больше узнаю о javascript.