Created
February 14, 2016 20:36
-
-
Save FaAway/1219572e9bdfad7ce523 to your computer and use it in GitHub Desktop.
level21.lesson16.big01
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.javarush.test.level21.lesson16.big01; | |
import java.util.ArrayList; | |
/** | |
* Created by FarAway on 14.02.2016. | |
*/ | |
public class Hippodrome { | |
private static ArrayList<Horse> horses = new ArrayList<>(); | |
public static Hippodrome game; | |
public static void main(String[] args) { | |
game = new Hippodrome(); | |
Horse horse1 = new Horse("First", 3, 0); | |
Horse horse2 = new Horse("Second", 3, 0); | |
Horse horse3 = new Horse("Third", 3, 0); | |
horses.add(horse1); | |
horses.add(horse2); | |
horses.add(horse3); | |
game.run(); | |
game.printWinner(); | |
} | |
public Horse getWinner() { | |
int indexOfHorseMaxDist = 0; | |
for (int i = 1; i < horses.size(); i++) { | |
if (horses.get(i).getDistance() > horses.get(indexOfHorseMaxDist).getDistance()) | |
indexOfHorseMaxDist = i; | |
} | |
return horses.get(indexOfHorseMaxDist); | |
} | |
public void printWinner() { | |
System.out.println("Winner is " + getWinner().getName() + "!"); | |
} | |
public ArrayList<Horse> getHorses() { | |
return horses; | |
} | |
public void run() { | |
try { | |
for (int i = 0; i < 100; i++) { | |
move(); | |
print(); | |
Thread.sleep(200); | |
} | |
}catch (InterruptedException e) { | |
} | |
} | |
public void move() { | |
for (Horse horse : horses) { | |
horse.move(); | |
horse.print(); | |
} | |
} | |
public void print() { | |
for (Horse horse : horses) { | |
horse.print(); | |
System.out.println(); | |
System.out.println(); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.javarush.test.level21.lesson16.big01; | |
/** | |
* Created by FarAway on 14.02.2016. | |
*/ | |
public class Horse { | |
private String name; | |
private double speed; | |
private double distance; | |
public void move() { | |
distance += speed * Math.random(); | |
} | |
public void print() { | |
StringBuilder sb = new StringBuilder(); | |
for (int i = 0; i < Math.round(distance); i++) { | |
sb.append("."); | |
} | |
sb.append(name); | |
System.out.print(sb.toString()); | |
} | |
public double getSpeed() { | |
return speed; | |
} | |
public void setSpeed(double speed) { | |
this.speed = speed; | |
} | |
public String getName() { | |
return name; | |
} | |
public void setName(String name) { | |
this.name = name; | |
} | |
public double getDistance() { | |
return distance; | |
} | |
public void setDistance(double distance) { | |
this.distance = distance; | |
} | |
public Horse(String name, double speed, double distance) { | |
this.name = name; | |
this.speed = speed; | |
this.distance = distance; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Задание 16 | |
Теперь уже точно все. | |
Добавь вызов метода printWinner в конец метода main. | |
Запускай и любуйся своей первой компьютерной игрой :) | |
Задание 15 | |
Добавим определение победителя. | |
В классе Hippodrome сделаем два метода: | |
public Horse getWinner() и public void printWinner() | |
Метод getWinner должен возвращать лошадь пробежавшую самую большую дистанцию. | |
Метод printWinner выводит на экран имя победителя в виде: | |
Winner is <NAME>! | |
Пример: | |
Winner is Lucky! | |
Задание 14 | |
Запускаем и любуемся. | |
У нас каждые полсекунды отображается новый кадр с ситуацией на ипподроме. | |
Мышкой уменьши размер консоли так, чтобы был виден только один "кадр" и на том же самом месте. | |
Тогда можно наблюдать забег в живую и даже покомментировать: | |
- Старт. | |
- Гомер неожиданно обходит Лаки. | |
- Слевин вырывается вперед. | |
- Вперед Лаки! | |
- 10 баксов на Слевина. | |
- Похоже Лаки сбросил жокея и расслабился. | |
- Гомер уверенно вырывается вперед. | |
- Неожиданно для всех побеждает Гомер. Вот это номер! | |
Задание 13 | |
Теперь вернемся к методу print класса Horse. | |
Т.к. мы работаем с консолью, то все лошади на бегах будут выглядеть примерно так: | |
........Sleven <- лошадь Слевин | |
....Lucky <- лошадь Лаки | |
..........Gomer <- лошадь Гомер | |
Другими словами, в методе print надо вывести на экран строку состоящую из точек и имени лошади. | |
Количество точек равно distance, округленному до целого числа. | |
Задание 12 | |
Осталось совсем немного - дописать класс Horse. | |
Каждый ход у лошади будет вызываться метод move. | |
Когда у лошади вызывают метод move, лошадь должна пробежать некоторую дистанцию. | |
Дистанция зависит от скорости лошади (speed). В самом простом варианте, выглядеть этот метод должен примерно так: | |
distance += speed; | |
Но, чтобы было интереснее, давай сделаем так, чтобы скорость все время немного менялась. | |
Для этого умножь speed на случайное число. | |
Случайное число можно получить с помощью метода Math.random() | |
Задание 11 | |
С классом Hippodrome почти закончили. | |
Добавь в конец метода main вызов run(). | |
Подсказка: | |
run() - это нестатический метод, поэтому вызвать его можно только у объекта. | |
А где взять объект? | |
Подсказка 2: | |
game.run(); | |
Задание 10 | |
Еще нужно написать метод print класса Hippodrome. | |
В нем тоже все просто: в цикле для каждой лошади вызываем ее метод print. | |
Ну, и еще выведи после цикла пару пустых строк: System.out.println() - чтобы было красивее. | |
Задание 9 | |
Теперь вернемся к методам move и print. Начнем с move. | |
В методе move класса Hippodrome в цикле у каждой лошади мы вызываем метод move. | |
Да ты прав, его еще нет у класса Horse. | |
Поэтому в класс Horse надо добавить свой метод move :) | |
И метод print, кстати тоже. | |
Если я не говорю ничего насчет параметров метода, значит метод без параметров. | |
Делай все методы public, если явно не указано обратное. | |
Задание 8 | |
В методе run сделай цикл от 1 до 100. Это и будет наш забег. | |
В теле цикла вызываем сначала move, затем print. | |
Чтобы весь цикл не отработал за долю секунды - добавь в него еще Thread.sleep(200); | |
Задание 7 | |
Но и это еще не все - надо чтобы лошади бежали. | |
Добавь в класс Hippodrome методы run, move и print. Без параметров. | |
Метод move будет управлять движением всех лошадей. | |
Метод print отрисовывать их на экран. | |
А метод run - управлять всем этим. | |
Задание 6 | |
Теперь перейдем к методу main. | |
Нам нужно создать в нем объект класса Hippodrome и добавить ему несколько лошадей. | |
Для начала: | |
Создай статическую переменную game типа Hippodrome. | |
Должно получиться что-то вроде: | |
public static Hippodrome game; | |
В методе main надо: | |
а) Создать объект типа Hippodrome и сохранить его в переменную game. | |
б) Создать три объекта "лошадь". Имена придумай сам. Начальные скорость у всех лошадей - 3, дистанция - 0. | |
в) Добавить созданных лошадей в список лошадей ипподрома (horses). Используйте для этого геттер. | |
Задание 5 | |
Закончим написание класса "лошадь" | |
Добавь конструктор с параметрами (name, speed, distance). | |
Добавь getter'ы и setter'ы для всех полей класса Horse. | |
Делай все методы public, если явно не указано обратное. | |
Задание 4 | |
Теперь вернемся к лошадям. У каждой лошади на скачках должны быть известны имя(name) и скорость(speed). | |
Наши лошади будут бежать просто определенное время (100 секунд/"шагов"). | |
Будем определять победителя, как лошадь, пробежавшая наибольшую дистанции. | |
Поэтому нам понадобится хранить расстояние(distance), которое лошадь уже пробежала. | |
Добавь в класс Horse переменные name (String), speed (double), distance(double). | |
Задание 3 | |
Раз это ипподром, то на нем должны быть лошади. | |
А, значит наш ипподром должен хранить список всех его лошадей. | |
Добавь переменную horses типа ArrayList<Horse> в класс Hippodrome. | |
Добавь getter для этого поля. | |
Задание 2 | |
Любая программа начинается с выполнения метода main. | |
Добавь метод main в класс Hippodrome. | |
Задание 1 | |
Сегодня мы напишем небольшую игру под названием "Ипподром". | |
Когда я говорю мы - я имею ввиду тебя. Я же буду работать наставником. | |
Для начала нам понадобятся классы "ипподром" и "лошадь". | |
Создай классы Hippodrome (ипподром), Horse(лошадь) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment