Skip to content

Instantly share code, notes, and snippets.

@FaAway
Created February 14, 2016 20:36
Show Gist options
  • Save FaAway/1219572e9bdfad7ce523 to your computer and use it in GitHub Desktop.
Save FaAway/1219572e9bdfad7ce523 to your computer and use it in GitHub Desktop.
level21.lesson16.big01
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();
}
}
}
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;
}
}
Задание 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