Zum Menü springen Zum Inhalt springen

iamBlog

Java: Auto-Simulator

07.12 2008 17:08

Auto-Simulator

Um ein Auto wie in Aufgabe 8 zu simulieren, benötigen wir zuerst ein paar Dateien: Traffic.java, Car.java und CarTest.java. Wir sollen nun die Klasse Car anpassen und das Ganze dann in der Klasse CarTest testen.

Car

Hier einmal die Car-Klasse um ein paar Variablen erweitert, so dass wir die Getter-Methoden gleich anpassen können ;)

  • float fuel für den aktuellen Benzinstand
  • float maxFuel für den maximalen Benzinstand
  • float speed für die aktuelle Geschwindigkeit
  • float maxSpeed für die maximale Geschwindigkeit
  • float delta für den Zeitunterschied zwischen long last (letzte Zeit) und long current (aktuelle Zeit)
  • sowie boolean running (ob der Motor läuft oder nicht)

public class Car  {
   private float x, y, fuel, maxFuel, speed, maxSpeed, delta;
   private long last, current;
   private boolean running;

   public float getX()  {
      return x; 
   }
    
   public float getY()  {
      return y;
   }
    
   public boolean getMotorOn() {
      return running;
   }
    
   public float getFuelTankCapacity() {
      return maxFuel;
   }
    
   public float getFuel() {
      return fuel;
   }
    
   public float getMaxSpeed() {
      return maxSpeed;
   }
    
   public float getSpeed() {
    return speed;
   }
}

Nun fügen wir unserem Auto noch einen schönen Konstruktor hinzu:

Car


   public Car(float maxSpeed, float maxFuel){
       this.maxSpeed = maxSpeed;
       this.maxFuel = maxFuel;
       fuel = maxFuel;
       x = 0;
       y = 50;
       running = false;
   }

setSpeed

Damit unser Auto nicht immer nur so langweilig in der Gegend rumsteht, bauen wir hier eine Methode setSpeed ein, die unserem Auto ein bisschen Schub verleihen soll. Natürich darf es nur fahren, wenn genügend Benzin vorhanden ist. Zusätzlich setzen wir hier unseren Zeitstempel für last.


   public void setSpeed(float value){
       if(value != 0 && fuel > 0){
           running = true;
           last = System.currentTimeMillis();
           speed = value;
           if(speed > maxSpeed){
               speed = maxSpeed;
           }
       } else if (value == 0) {
           running = false;
       }
   }

tanken

Natürlich ist es doof wenn man ein super Auto hat, dass dann nicht fährt weil man es nicht tanken kann. Darum bauen wir diese durchaus nützliche Funktion jetzt ein ;)


       setSpeed(0);
       
       fuel += benzin;
       if(fuel > maxFuel){
           fuel = maxFuel;
       }

Vor dem Tanken halten wir natürlich mit setSpeed(0) an.

distance

Bis jetzt bleibt unser Auto - obwohl es evtl. getankt sein könnte - an einer Stelle kleben. Und das liegt an unserem x.

Die Methode distance berechnet aufgrund der aktuellen Geschwindigkeit und der Zeitdifferent zwischen current und last den zurückgelegten Weg.


   private float distance(float speed){
       float ret = 0;
       current = System.currentTimeMillis();
       delta = (current - last);
       ret = speed * (delta / 1000) ;
       last = current;
       return ret;
   }

Bis jetzt wird bei der Methode getX nur x zurückgegeben, ohne dass die Möglichkeit besteht, dass sich unser Auto fortbewegt. Wenn wir getX jetzt anpassen sollte unser Auto schön schnurren.


   public float getX()  {
          if(fuel > 0 && running){
              x += distance(speed);
          }
          return x; 
   }

Nein?

Stimmt! Wir müssen es ihm zuerst sagen dass es fahren soll!

Und zwar in der Klasse CarTest:

CarTest

So. Nun ist es endlich so weit und wir können unser tolles Auto testen! Ich habe hier z. B. ein Auto erstellt, das maximal 360 km/h fahren kann und einen maximalen Tankinhalt von 60 Litern hat.


public class CarTest  {  
    public static void main(String[] args) { 
        Car car = new Car(100, 60);  
        Traffic traffic = new Traffic(car);
        traffic.setSize(1000, 200);
        traffic.setVisible(true);  
     
       
        traffic.start();
        Traffic.waitAWhile(1000);
        car.setSpeed(12);
        Traffic.waitAWhile(1000);
        car.setSpeed(24);
        Traffic.waitAWhile(1000);
        car.setSpeed(50);
        Traffic.waitAWhile(1000);
        car.setSpeed(100);
        Traffic.waitAWhile(3000);
        car.tanken(30);
        Traffic.waitAWhile(1000);
        car.setSpeed(2);
        Traffic.waitAWhile(1000);
        System.out.println(car.getX());
    } 
}

Hinweis

Unser Auto sollte jetzt schon fahren, aber es verbraucht momentan noch keinen Sprit. Aber das dürft ihr nun einbauen ;)

Kommentare

  1. Noch keine Kommentare vorhanden.
  2. Dieser Eintrag kann nicht mehr kommentiert werden.

Nächster Eintrag: Java: VHS-Kurs

Vorheriger Eintrag: Java: Stack & UPN Taschenrechner

Über den iamBlog

Der iamBlog ist von und für Studenten der FH Augsburg und alle Leute die sich für Design, Medien und Multimedia interessieren.

Namensgebend war der Studiengang InterAktive Medien an der FH Augsburg.

Der Blog befindet sich Moment noch im Aufbau. Wir entschuldigen uns für eventuell fehlende Funktionen und den ein oder anderen Fehler im System.

Die neuesten Links

Kategorien

Das neueste Design

Avant von pichfl

Zum Auswählen eines Designs einfach oben links auf den Button Hintergrund ändern klicken.

Feeds

Die Einträge im Blog lassen sich als Atom-Feed abonnieren. Außerdem gibt es einen kombinierten Atom-Feed, der Blogeinträge und Links enthält.
Diese Feeds werden z.B. von Browsern wie Safari oder Mozilla Firefox, Newsreadern wie NetNewsWire oder Feadreader oder Onlinediensten wie Google Reader unterstützt und werden automatisch aktualisiert, wenn neue Einträge im iamBlog vorhanden sind.

Werbung

Disclaimer

This page will never work with Internet Explorer. If you use Internet Explorer to view this page, all styles and features are deactivated. Use Firefox, Safari or Opera to see all the beautiful colours of the internet.