— Привет, Амиго!
— Привет!
— Ты как разговариваешь со старшим по званию?
— Виноват, сэр.
Здравия желаю, Капитан Бобров.
— То-то же.
У тебя сегодня новая секретная миссия.
Нужно написать симуляцию космической войны.
— Круто. То есть я хотел сказать, я — готов, сэр.
У меня как раз есть идея. Как насчет:
— Нет, слишком сложно.
Для начала начнем с чего-то попроще:
— М-да.
— Что, опять сложно? Тогда еще проще.
Обратитесь за заданием к агенту 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 побольше и можно играть!
Наслаждайся игрой :)
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ