Большая задача: Пишем игру на Java - 1

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

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

— Теперь будем учиться писать большие проекты. В связи с этим, появился новый тип заданий – «большая задача». Это одна большая задача, разбитая на много маленьких. Решая очередную «маленькую задачу» ты будешь дописывать новый код к нынешнему коду, а не писать что-то с нуля. Будущее федерации в твоих руках.

— Есть, сэр!

— Цель первых пяти «больших задач» научиться писать большие и сложные проекты. Сначала описание «маленьких задач» довольно детальное, иногда даже чересчур. Затем оно будет становиться все более общим, а размер задач расти. Сначала будут небольшие кусочки «моего» кода. Потом большие. И наконец – целые фреймворки (библиотеки).

— Я готов, сэр!

— Я постарался сделать описание задач максимально однозначным. Но если что-то не получается:

а) подумай, как еще можно понять условие. Возможно, не все так однозначно, как хотелось бы.

б) попробуй решить несколькими разными способами.

в) попроси помощи/напиши нам — это же новые задачи и мы с радостью их «отполируем».

Вот тебе первое задание:

Сегодня мы напишем небольшую игру под названием «Ипподром».

Когда я говорю мы – я имею в виду тебя. Я же буду работать наставником.

— А где же условие?

— Какое условие, рядовой? Ты что, до сих пор в учебке? Это же секретная военная программа. Запускай Intellij IDEA – там будет первая часть этого задания. Каждое следующее задание будет доступно только после того, как ты успешно выполнишь предыдущее.Приступай немедленно.

— Есть, приступать немедленно!

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

6
Задача
Java Multithreading, 1 уровень, 16 лекция
Недоступна
Ипподром(1)
Сегодня мы напишем небольшую игру под названием "Ипподром". Когда я говорю мы - я имею ввиду тебя. Я же буду работать наставником. Для начала нам понадобятся классы "ипподром" и "лошадь". Создай классы Hippodrome (ипподром), Horse (лошадь).
6
Задача
Java Multithreading, 1 уровень, 16 лекция
Недоступна
Ипподром(2)
Раз это ипподром, то на нем должны быть лошади. Значит наш ипподром должен хранить список всех его лошадей. Добавь поле horses типа List<Horse> в класс Hippodrome. А чтобы лошадей не украли - сделай это поле приватным. Добавь getter для этого поля.
6
Задача
Java Multithreading, 1 уровень, 16 лекция
Недоступна
Ипподром(3)
Несмотря на то что мы объявили переменную horses, сам список еще не создан (если ты конечно не успел опередить нас). Создай конструктор класса Hippodrome с одним параметром типа List. Сохрани в поле horses полученный в качестве параметра список (инициализируй поле horses).
6
Задача
Java Multithreading, 1 уровень, 16 лекция
Недоступна
Ипподром(4)
Теперь вернемся к лошадям. У каждой лошади на скачках должны быть известны имя (name) и скорость (speed). Наши лошади будут бежать просто определенное время (100 секунд/"шагов"). Будем определять победителя, как лошадь, пробежавшую наибольшую дистанцию.
6
Задача
Java Multithreading, 1 уровень, 16 лекция
Недоступна
Ипподром(5)
Закончим написание класса лошадь (Horse). Добавь конструктор с параметрами (name, speed, distance). Добавь getter'ы и setter'ы для всех полей класса Horse. Делай все методы public, если явно не указано обратное.
12
Задача
Java Multithreading, 1 уровень, 16 лекция
Недоступна
Ипподром(6)
Теперь перейдем к классу Hippodrome и методу main. Нам нужно создать объект типа Hippodrome и добавить ему несколько лошадей. Для начала, в классе Hippodrome создай статическое поле game типа Hippodrome. В методе main требуется:
6
Задача
Java Multithreading, 1 уровень, 16 лекция
Недоступна
Ипподром(7)
Но и это еще не все - надо чтобы лошади бежали. Добавь в класс Hippodrome void методы run, move и print. Без параметров. Метод move будет управлять движением всех лошадей. Метод print отрисовывать их на экран. А метод run - управлять всем этим.
6
Задача
Java Multithreading, 1 уровень, 16 лекция
Недоступна
Ипподром(8)
В методе run сделай цикл от 1 до 100. Это и будет наш забег. В теле цикла вызываем сначала move, затем print. Чтобы весь цикл не отработал за долю секунды - добавь в него еще Thread.sleep(200);
6
Задача
Java Multithreading, 1 уровень, 16 лекция
Недоступна
Ипподром(9)
Теперь вернемся к методам move и print. Начнем с move. В методе move класса Hippodrome в цикле у каждой лошади мы вызываем метод move. Да ты прав, его еще нет у класса Horse. Поэтому в класс Horse надо добавить свой метод move :) И метод print, кстати тоже.
6
Задача
Java Multithreading, 1 уровень, 16 лекция
Недоступна
Ипподром(10)
Еще нужно написать метод print класса Hippodrome. В нем тоже все просто: в цикле для каждой лошади вызываем ее метод print. Ну, и еще выведи после цикла 10 пустых строк: System.out.println() - чтобы было красивее.
6
Задача
Java Multithreading, 1 уровень, 16 лекция
Недоступна
Ипподром(11)
С классом Hippodrome почти закончили. Добавь в конец метода main вызов run(). Подсказка: run() - это нестатический метод, поэтому вызвать его можно только у объекта. А где взять объект? Подсказка 2: game.run();
6
Задача
Java Multithreading, 1 уровень, 16 лекция
Недоступна
Ипподром(12)
Осталось совсем немного - дописать класс Horse. Каждый ход у лошади будет вызываться метод move. Когда у лошади вызывают метод move, лошадь должна пробежать некоторую дистанцию. Дистанция зависит от скорости лошади (speed).
6
Задача
Java Multithreading, 1 уровень, 16 лекция
Недоступна
Ипподром(13)
Теперь вернемся к методу print класса Horse. Т.к. мы работаем с консолью, то все лошади на бегах будут выглядеть примерно так: ........Slevin <- лошадь Слевин, ....Lucky <- лошадь Лаки, ..........Homer <- лошадь Гомер.
6
Задача
Java Multithreading, 1 уровень, 16 лекция
Недоступна
Ипподром(14)
Запускаем и любуемся. У нас каждые полсекунды отображается новый кадр с ситуацией на ипподроме. Мышкой уменьши размер консоли так, чтобы был виден только один "кадр" и на том же самом месте. Тогда можно наблюдать забег в живую и даже покомментировать: - Старт. - Гомер неожиданно обходит Лаки.
6
Задача
Java Multithreading, 1 уровень, 16 лекция
Недоступна
Ипподром(15)
Добавим определение победителя. В классе Hippodrome сделаем два метода: public Horse getWinner() и public void printWinner() Метод getWinner должен возвращать лошадь пробежавшую самую большую дистанцию. Метод printWinner выводит на экран имя победителя в виде: Winner is <name>!
6
Задача
Java Multithreading, 1 уровень, 16 лекция
Недоступна
Ипподром(16)
Теперь уже точно все. Добавь вызов метода printWinner в конец метода main. Запускай и любуйся своей первой компьютерной игрой :)