Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Java] Гонки 
:(
    Опции темы
turtles
Дата 30.11.2011, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 17.2.2011

Репутация: нет
Всего: нет



Подскажите мне нужно дополнить задание? Не могу понять как сделать! Если можно маленький пример! В заранее благодарен!
Добавить дополнительный параметр автомобиля – цвет и графическое отображение хода всего заезда вместо вывода данных на консоль;
Добавить считывание данных автомобилей-участников из конфигурационного файла вместо «прошивания» их в программе;
Добавить автоматическое формирование последующих заездов победителей предварительных заездов с выбыванием и определением абсолютного чемпиона.

Код1:
Код

package dragracing;
/**
* Методы интерфейса CarInterface
*/
public interface CarInterface {

    public int getId();

    public void setId(int id);

    public String getDriver();

    public void setDriver(String driver);

    public String getManufacturer();

    public void setManufacturer(String manufacturer);

    public int getMaxSpeed();

    public void setMaxSpeed(int maxSpeed);

    public String getModel();

    public void setModel(String model);

    public int getVelocity();

    public void setVelocity(int velocity);

    public long getCurrentSpeed();

    public void setCurrentSpeed(long currentSpeed);

    public long getRunDistance();

    public void setRunDistance(long runDistance);

    public int getRunTime();

    public void setRunTime(int runTime);
}
/**
* Поля класса Car интерфейса CarInterface
*/
class Car implements CarInterface {

    /**
    * Номер автомобиля
    */
    private int id;
    /**
    * Марка
    */
    private String manufacturer;
    /**
    * Модель
    */
    private String model;
    /**
    * Ускорение в м/с2
    */
    private int velocity;
    /**
    * Максимальная скорость
    */
    private int maxSpeed;
    /**
    * Текущая скорость
    */
    private long currentSpeed = 0;
    /**
    * Пройденная дистанция в заезде
    */
    private long runDistance = 0;
    /**
    * Время заезда
    */
    private int runTime = 0;
    /**
    * Гонщик
    */
    private String driver;

   /**
   * Конструктор класса Car с входными параметрами элемента класса Car
   */
    public Car(Car car) {
        this.id = car.id;
        this.manufacturer = car.manufacturer;
        this.model = car.model;
        this.velocity = car.velocity;
        this.maxSpeed = car.maxSpeed;
        this.driver = car.driver;
        this.currentSpeed = 0;
        this.runDistance = 0;
        this.runTime = 0;
    }

    /**
    * Конструктор класса Car с входными параметрами
    */
    public Car(int id, String manufacturer, String model, int velocity, int maxSpeed, String driver) {
        this.id = id;
        this.manufacturer = manufacturer;
        this.model = model;
        this.velocity = velocity;
        this.maxSpeed = maxSpeed;
        this.driver = driver;
    }

    public int getId() {
        return this.id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getDriver() {
        return this.driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }

    public String getManufacturer() {
        return this.manufacturer;
    }

    public void setManufacturer(String manufacturer) {
        this.manufacturer = manufacturer;
    }

    public int getMaxSpeed() {
        return this.maxSpeed;
    }

    public void setMaxSpeed(int maxSpeed) {
        this.maxSpeed = maxSpeed;
    }

    public String getModel() {
        return this.model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public int getVelocity() {
        return this.velocity;
    }

    public void setVelocity(int velocity) {
        this.velocity = velocity;
    }

    public long getCurrentSpeed() {
        return this.currentSpeed;
    }

    public void setCurrentSpeed(long currentSpeed) {
        this.currentSpeed = currentSpeed;
    }

    public long getRunDistance() {
        return this.runDistance;
    }

    public void setRunDistance(long runDistance) {
        this.runDistance = runDistance;
    }

    public int getRunTime() {
        return this.runTime;
    }

    public void setRunTime(int runTime) {
        this.runTime = runTime;
    }
}


Код2:

Код

package dragracing;

import java.util.HashMap;
import java.util.Map;

public class Dragracing {

    private static Map<Integer, Car> cars = new HashMap<Integer, Car>();

    /**
    * Длина трассы в метрах
    */
    private static final int TRACK_LENGTH = 402;

    /**
    * Метод сбора списка гонщиков, участвующих в заездах
    */
    private static void setCars() {
        cars.put(1, new Car(1, "Toyota", "Celica", 6, 250, "Alex"));
        cars.put(2, new Car(2, "Dodge", "Viper", 7, 310, "Steve"));
        cars.put(3, new Car(3, "Porsche", "911", 9, 320, "Martin"));
        cars.put(4, new Car(4, "Dodge", "Challenger", 9, 250, "Andrew"));
        cars.put(5, new Car(5, "Toyota", "MR2", 5, 250, "Jim"));
        cars.put(6, new Car(6, "Honda", "NSX", 8, 280, "Hiroki"));
        cars.put(7, new Car(7, "Chevrolet", "Camaro", 8, 270, "Ricky"));
        cars.put(8, new Car(8, "Nissan", "GTR", 8, 310, "Kito"));
        cars.put(9, new Car(9, "Lamborghini", "Countach", 8, 300, "Linda"));
        cars.put(10, new Car(10, "VAZ", "2107", 8, 200, "Vasiliy"));
    }

    /**
    * Метод, обновляющий текущее состояние автомобиля в заезде: скорость и пройденную дистанцию
    */
    private static void refresh(Car car, int time) {
        long maxSpeed = Math.round(car.getMaxSpeed()/3.6);        //Узнаем максимальную скорость автомобиля в м/с и округлим
        long curSpeed = Math.round(car.getVelocity() * time);    //Вычислим текущую скорость автомобиля в м/с
        if(curSpeed > maxSpeed)
            curSpeed = maxSpeed;//Если вычисленная текущая скорость выше максимальной, то текущую делам равной максимальной
        car.setRunDistance(car.getRunDistance() + curSpeed > TRACK_LENGTH ? TRACK_LENGTH : car.getRunDistance() + curSpeed);//Обнавляем пройденное расстояние
        car.setCurrentSpeed(Math.round(curSpeed*3.6));            //Обновляем текущую скорость
    }

    /**
    * Метод производящий вычисления заездов
    */
    public static void main(String[] args) throws InterruptedException {
        HashMap<Integer, Car> results = new HashMap<Integer, Car>();
        setCars();//Получим список гонщиков, участвующих в заезде
        int runNum = 1;//Номер заезда
        for(int i = 1; i < cars.size(); i++) {//обходим список участников
            Car left = new Car(cars.get(i++));//устанавливаем первого гонщика, i++ что бы обходить список парами
            Car right = new Car(cars.get(i));//устанавливаем второго гонщика
            System.out.println("Run " + runNum + ": " + left.getDriver() + " on " + left.getManufacturer() + " " + left.getModel() + " vs. " + right.getDriver() + " on " + right.getManufacturer() + " " + right.getModel());
            Thread.sleep(3000);
            System.out.println("Ready!");
            Thread.sleep(1000);
            System.out.println("Steady!");
            Thread.sleep(1000);
            System.out.println("GO!");
            boolean run = true;//заезд в процессе
            int seconds = 0;//секунд с момента старта
            while(run) {
                System.out.println("Run " + runNum + ": " + left.getDriver() + " on " + left.getManufacturer() + " " + left.getModel() + " vs. " + right.getDriver() + " on " + right.getManufacturer() + " " + right.getModel());
                System.out.println(left.getDriver() + ": " + left.getRunDistance() + " meters, " + left.getCurrentSpeed() + " km/h");
                System.out.println(right.getDriver() + ": " + right.getRunDistance() + " meters, " + right.getCurrentSpeed() + " km/h");
                Thread.sleep(1000);
                seconds++;
                if(left.getRunTime() == 0)//если гонщик ещё не финишировал
                    refresh(left, seconds);//обновим его информацию
                if(right.getRunTime() == 0)
                    refresh(right, seconds);
                if(left.getRunTime() > 0 && right.getRunTime() > 0)//если оба гонщика финишировали
                    run = false;//завершим заезд
                if(left.getRunDistance() >= TRACK_LENGTH && left.getRunTime() == 0) {//если гонщик финишировал
                    left.setRunTime(seconds);//установим его время заезда
                    results.put(cars.size() - results.size(), left);//добавим в список результатов
                }
                if(right.getRunDistance() >= TRACK_LENGTH && right.getRunTime() == 0) {
                    right.setRunTime(seconds);
                    results.put(cars.size() - results.size(), right);
                }
            }
            runNum++;//обновим номер заезда
        }
        for(Map.Entry<Integer, Car> set : results.entrySet())//обойдём список результатов
            System.out.println(set.getValue().getRunTime() + " seconds: " + set.getValue().getDriver() + " on " + set.getValue().getManufacturer() + " " + set.getValue().getModel());//и выведем на экран
    }
}

PM MAIL   Вверх
jk1
Дата 1.12.2011, 03:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 1
Всего: 75



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.2896 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.