Java: Auto-Simulator
07.12 2008 17:08

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
- Noch keine Kommentare vorhanden.
- Dieser Eintrag kann nicht mehr kommentiert werden.
