Задание 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(лошадь)

 

package com.javarush.test.level21.lesson16.big01;

import java.util.ArrayList;

/**
 * Created by promoscow on 18.01.17.
 */
public class Hippodrome {
    ArrayList<Horse> horses = new ArrayList<>();

    public ArrayList<Horse> getHorses() {
        return horses;
    }

    public static Hippodrome game;

    public static void main(String[] args) throws InterruptedException {
        game = new Hippodrome();
        game.getHorses().add(new Horse("Ангел Апокалипсиса", 3, 0));
        game.getHorses().add(new Horse("Жнец Ада", 3, 0));
        game.getHorses().add(new Horse("Коса смерти", 3, 0));
        game.run();
        game.printWinner();
    }

    public void run() throws InterruptedException {
        for (int i = 1; i <= 100; i++) {
            move();
            print();
            Thread.sleep(200);
        }
    }

    public void move() {
        for (Horse horse : horses) {
            horse.move();
        }
    }

    public void print() {
        for (Horse horse : horses) {
            horse.print();
        }
        System.out.println();
        System.out.println();
    }

    public Horse getWinner() {
        int winner = 0;
        for (int i = 0; i < horses.size(); i++) {
            if (horses.get(i).distance > horses.get(winner).distance) winner = i;
        }
        return horses.get(winner);
    }

    public void printWinner() {
        System.out.println("Winner is " + getWinner().name + "!");
    }
}

 

package com.javarush.test.level21.lesson16.big01;

/**
 * Created by promoscow on 18.01.17.
 */
public class Horse {
    String name;
    double speed;
    double distance;

    public Horse(String name, double speed, double distance) {
        this.name = name;
        this.speed = speed;
        this.distance = distance;
    }

    public String getName() {
        return name;
    }

    public double getSpeed() {
        return speed;
    }

    public double getDistance() {
        return distance;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setSpeed(double speed) {
        this.speed = speed;
    }

    public void setDistance(double distance) {
        this.distance = distance;
    }

    public void move() {
        distance += speed * Math.random();
    }

    public void print() {
        for (int i = 0; i < (int) distance; i++) {
            System.out.print(".");
        }
        System.out.println(name);
    }
}