JavaRush /Курсы /Java Collections /Большая задача: Создание игры на Java

Большая задача: Создание игры на Java

Java Collections
3 уровень , 15 лекция
Открыта

— Привет, Амиго!

— Привет!

— Ты как разговариваешь со старшим по званию?

— Виноват, сэр.

Здравия желаю, Капитан Бобров.

— То-то же.

У тебя сегодня новая секретная миссия.

Нужно написать симуляцию космической войны.

— Круто. То есть я хотел сказать, я — готов, сэр.

У меня как раз есть идея. Как насчет:

Большая задача: Создание игры на Java - 1

— Нет, слишком сложно.

Для начала начнем с чего-то попроще:

Большая задача: Создание игры на Java - 2

— М-да.

— Что, опять сложно? Тогда еще проще.

Обратитесь за заданием к агенту Intellij IDEA. Оно уже у него.

— Разрешите вопрос, сэр?

— Говори.

— А почему вы называете Intellij IDEA – агентом, сэр? Это же программа.

— Сам ты – программа.

IDEA – это искусственный интеллект и штатный сотрудник нашего корабля. Все понятно? Иди уже.

— Есть, идти выполнять приказание.

8
Задача
Java Collections, 3 уровень, 15 лекция
Недоступна
Space (1)
Давай напишем новую компьютерную игрушку. У нас будет космический корабль, который стреляет ракетами в НЛО. А НЛО в свою очередь сбрасывает на корабль бомбы. Ну и, конечно, всё дело происходит в космосе. Нам понадобятся классы: Space(космос), SpaceShip(космический корабль) и Ufo(НЛО). Создай классы
8
Задача
Java Collections, 3 уровень, 15 лекция
Недоступна
Space (2)
У нас будут бомбы и ракеты. Значит нам нужны классы Bomb(бомба) и Rocket(ракета). Создай их. У наших объектов будет много общего. Они будут перемещаться по космосу и отрисовываться. Значит у них у всех будут координаты и размер. А еще методы move() - для перемещения и draw() для отрисовки. Есть ин
8
Задача
Java Collections, 3 уровень, 15 лекция
Недоступна
Space (3)
Для чего нам нужен класс Space? Чтобы хранить в себе все объекты и управлять их взаимодействием. А какие параметры должны у него быть? width (ширина), height (высота). Тип int. А еще?
8
Задача
Java Collections, 3 уровень, 15 лекция
Недоступна
Space (4)
Чего не хватает классу Space? Правильно - методов run() и draw(). run управляет всей логикой игры, если ты помнишь. А draw отвечает за отрисовку очередного "кадра". А еще нам пригодится метод sleep(int ms). Создай их.
8
Задача
Java Collections, 3 уровень, 15 лекция
Недоступна
Space (5)
Теперь перейдем к классу BaseObject. Я хочу сделать несколько предложений. Во-первых. Для простоты, считать все объекты у нас в космосе круглыми. Нет, отрисовывать их мы будем фигурными, как и раньше. А вот при расчетах их взаимодействия исходить из того, что они круглые. Так - гораздо проще.
14
Задача
Java Collections, 3 уровень, 15 лекция
Недоступна
Space (6)
Но и это еще не все. Классу BaseObject нужны еще методы. Пока это будут пустые методы draw() и move(). Классы-наследники должны будут переопределить их у себя и реализовать необходимую функциональность. Еще добавь метод die() - объект умирает (isAlive=false) А еще нам нужно будет определять попала
8
Задача
Java Collections, 3 уровень, 15 лекция
Недоступна
Space (7)
Теперь займемся классом Canvas. Он у нас будет содержать матрицу, куда мы будем рисовать. У матрицы есть ширина и высота. А еще будем в ней хранить не числа(int), а символы (char). В классе Canvas необходимо: а) Добавить в класс две переменные width и height; б) Добавить в класс переменную matrix (char[][]);
28
Задача
Java Collections, 3 уровень, 15 лекция
Недоступна
Space (8)
Что мы будем делать с Canvas? Мы будем рисовать на нем (в его матрице). Поэтому нам понадобятся два метода: public void setPoint(double x, double y, char c), public void drawMatrix(double x, double y, int[][] matrix, char c). Первый метод - setPoint будет "ставить точку в координатах x,y цветом c".
8
Задача
Java Collections, 3 уровень, 15 лекция
Недоступна
Space (9)
Еще Canvas понадобится два метода, напиши их. а) метод public void clear(); Этот метод будет очищать матрицу, чтобы на ней снова можно было рисовать. Например заменить все символы матрицы на пробелы. б) метод public void print(); Этот метод отрисовывает матрицу на экран.
8
Задача
Java Collections, 3 уровень, 15 лекция
Недоступна
Space (10)
Теперь напишем класс Bomb. Тут все просто. Bomb унаследован от BaseObject. Нужно: а) изменить конструктор: Конструктор Bomb должен выглядеть примерно так: public Bomb(double x, double y) { super(x, y, 1); } x и y переданные в конструктор Bomb мы передаем дальше в конструктор BaseObject с помощью supe
8
Задача
Java Collections, 3 уровень, 15 лекция
Недоступна
Space (11)
Теперь напишем класс Rocket. Практически совпадает с классом Bomb. Только: а) Ракета летит вверх (т.е. y уменьшается на 1); б) Рисуем не букву "B", а букву "R".
8
Задача
Java Collections, 3 уровень, 15 лекция
Недоступна
Space (12)
Теперь займемся кораблем. Для сложности сделаем так: если пользователь нажал кнопку влево, то корабль начинает все время двигаться влево. Если нажал кнопку вправо - все время вправо до упора. Поэтому заведем специальную переменную dx, которая будет хранить направление движения корабля. если dx = 1,
14
Задача
Java Collections, 3 уровень, 15 лекция
Недоступна
Space (13)
Теперь перейдем к методам draw, move. В методе public void move() нужно: а) увеличить x на dx; б) проверить, не вылез ли корабль за границы космоса [0, Space.game.getWidth(), ...]. Используй метод checkBorders. Метод draw я напишу сам - просто объяви пустой метод.
14
Задача
Java Collections, 3 уровень, 15 лекция
Недоступна
Space (14)
Теперь напиши класс Ufo. Он чуть сложнее класса Bomb и проще SpaceShip. Тебе понадобятся методы draw(), move(), fire(). Также не забудь о конструкторе. Типы параметров double, а радиус ufo будет равен 3. Метод draw() сделай по аналогии с SpaceShip. Рисовать UFO будем символом 'U'. И добавь матрицу,
8
Задача
Java Collections, 3 уровень, 15 лекция
Недоступна
Space (15)
Нужно еще закончить класс Space. Напиши код метода getAllItems: Метод должен возвращать один общий список всех объектов типа BaseObject. Напиши код метода moveAllItems: Метод должен двигать все объекты по одному разу.
14
Задача
Java Collections, 3 уровень, 15 лекция
Недоступна
Space (16)
И еще немного. Напиши код метода createUfo(): - если список НЛО пуст - создай один корабль в центре сверху. Напиши код метода checkBombs(): - нужно проверить не пересеклись ли между собой какая-нибудь бомба и корабль; - если пересеклись - корабль и бомба умирают: die();
8
Задача
Java Collections, 3 уровень, 15 лекция
Недоступна
Space (17)
Надо закончить метод draw(). Поступим по аналогии с методом move() - сегодня я напишу его сам.
8
Задача
Java Collections, 3 уровень, 15 лекция
Недоступна
Space (18)
Поставь width & height побольше и можно играть! Наслаждайся игрой :)
Комментарии (174)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
I'll kick them all Уровень 5
5 сентября 2025
Качество задачи конечно оставляет желать лучшего. Вначале пишем, что нужно создать приватные переменные и геттеры. Затем подсовываем вместо пользовательского кода свою реализацию, которая смотрит прямо в поля, что ломает компиляцию, можно не заметить, и запороть трай. Затем заставляем использовать метод checkBorders, который мы не реализовывали.
Ioanna Polyak Уровень 31
16 июля 2025
Ссылка на расписание решений (Спойлер)
Ioanna Polyak Уровень 31
16 июля 2025
https://a.d-cd.net/Sf3H8FCxqR-ACGZfJR2uLYW13VY-1920.jpg
Бобёр Андрей - Уровень 2
18 марта 2025
{Java_Shark} Уровень 36
10 февраля 2025
++
18 ноября 2024
Т.к. объекты мы условно считаем кругами, то предлагаю такую формулу взаимодействия: eсли центр круга одного объекта попал в круг другого, то будем считать, что они столкнулись. Это условие мне показалось странным. По идее, столкновение объектов должно считаться если круги пересеклись (ведь круг и есть вся площадь нашего объекта).
Denis Odesskiy Уровень 47
26 октября 2024
Это очередной убийца эпилептиков? Придется наверное потом переписать на libGDX?
safelogj Уровень 51
30 сентября 2024
агент Ctrl-C и агент Ctrl-V готовы к выполнению задания.
Григорий Уровень 27
20 августа 2024
Лень проверять почему такой случился триггер, но в Space (12) у меня валидатор не брал код из-за комментария вид

    /**
     * Устанавливаем вектор движения вправо
     */
Юрий Уровень 25
26 марта 2024
Д14-15 еще возможно решать. 15 по сути забагована полностью. нужно все копировать из правильного решения. Вообще задание полная фигня, странно что оно тут есть. Но игры которые есть в разделе "Игры" - хорошие.