Все вражеские пули будем хранить в переменной enemyBullets класса SpaceInvadersGame. Добавим их отрисовку и движение в соответствующие методы.
Чтобы удалить потраченные пули, создадим и реализуем метод removeDeadBullets() в классе SpaceInvadersGame.
Для удаления можно либо использовать итератор, либо создать копию списка enemyBullets
и проходить по ней циклом.
Если в результате проверки объект нужно удалить из списка, вызываем enemyBullets.remove(bullet).
К потраченным пулям относятся те, которые вылетели за пределы экрана, и те, которые попали в цель (isAlive == false).
Добавим вспомогательный метод check().
На данном этапе он будет вызывать метод removeDeadBullets(). Впоследствии в нем будут происходить различные проверки на каждом шаге игры.
С такой же частотой мы будем вызывать метод fire() у флота, при котором один из вражеских кораблей может выстрелить.
Если выстрел произошел, метод вернет пулю, которую нужно добавить в список.
- В классе SpaceInvadersGame должно существовать приватное поле enemyBullets типа List<Bullet>.
- Поле enemyBullets должно быть проинициализировано в методе createGame() новым объектом типа ArrayList<Bullet> до вызова метода drawScene().
- В методе drawScene() после вызова метода drawField() у каждого объекта из списка enemyBullets должен быть вызван метод draw(Game). В качестве параметра передай в метод "this".
- В методе moveSpaceObjects() у каждого объекта из списка enemyBullets должен быть вызван метод метод move().
- В классе SpaceInvadersGame должен существовать приватный метод void removeDeadBullets().
- В методе removeDeadBullets() необходимо из списка enemyBullets удалить все "неживые" пули и те, которые вылетели за пределы экрана (координата y пули больше либо равна HEIGHT - 1).
- В классе SpaceInvadersGame должен существовать приватный метод void check().
- В методе check() необходимо вызвать метод removeDeadBullets().
- В методе onTurn(int) класса SpaceInvadersGame необходимо вызвать метод check() до вызова метода drawScene().
- В методе onTurn(int) необходимо один раз вызвать у объекта enemyFleet метод fire(Game) с параметром "this" до вызова метода drawScene().
- Если результат вызова метода fire(Game) у объекта enemyFleet вернул не null, необходимо в список enemyBullets добавить этот результат. Добавление выполняется до вызова метода drawScene().