• Wir präsentieren Dir heute ein Stellenangebot für einen Frontend-Entwickler Angular / Java in Braunschweig. Hier geht es zur Jobanzeige

Thema Vererbung

N

noah_1492

Aktives Mitglied
Das Ziel der Aufgabe ist es 6 lkws zu erstellen, wo die rechten lkws sich um eine bestimmte Länge nacheinander bewegen sollen.
Ich habe nun ein Problem dabei diese lkws zu bewegen. Zum einen weiß ich nicht, wie ich es umsetzen soll, wann der lkw stoppen soll (eben nach der angegebenen Distanz. Mein anderes Problem ist, dass nicht alle Objekte zum Sprite hinzugefügt werden. Bei dem ersten Lkw bleibt z.B. der dritte Reifen stehen, während der LKW sich fortbewegt.
Das heißt konkret ich weiß nicht wie ich das mit dem Sprite machen soll. Und ich weiß nicht, wie ich das prüfen kann, wann der Lkw seine Distanz erreicht hat. Am besten soll der Lkw sich bis zum Ende der view bewegen. Ist vielleicht eine Möglichkeit zu überprüfen mit getXPosition ob diese der Länge der View entspricht. Würde mich über eine Antwort freuen.
Ich bin noch sehr frisch beim Programmieren. Deshalb hänge ich manchmal noch.
Hier mein Code:
Konsole:
/**
* Beschreiben Sie hier die Klasse Konsole.
*
* @author (Noah)
* @version (06.02.21)
*/
import sas.*;
import java.awt.Color;
public class Konsole
{
    /**
     * Konstruktor für Objekte der Klasse Konsole
     */
    private View view;
    private Lastwagen lkw0;
    private Lastwagen lkw1;
    private Lastwagen lkw2;
    private Kipper lkw3;
    private Lastwagen lkw4;
    private Lastwagen lkw5;
    Rectangle rechteck;
    public Konsole()
    {
        View view = new View(800,600, "Lastkraftwagen");
        lkw0 = new Lastwagen(20,100);
        lkw1 = new Tieflader(190,100);
        lkw2 = new Kipper(20,250);
        lkw3 = new Kipper(190,250);
        lkw4 = new Kastenwagen(20,400);
        lkw5 = new KastenwagenMitBeschriftung(190,400,"Müller");
        //fuehreAus();
        //lkw3.kippen();
        //lkw3.absenken();
    }

    /* public void fuehreAus(){
    rechteck = new Rectangle (0, 0, 800,600);
    rechteck.setTransparency(0);
    while (!(lkw1.contains(rechteck))){
    lkw1.bewege(330);
    view.wait(100);
    }
    while (!(lkw3.contains(rechteck))){
    lkw3.bewege(330);
    view.wait(100);
    }
    while (!(lkw5.contains(rechteck))){
    lkw5.bewege(330);
    view.wait(100);
    }
    } */
}
Lastwagen:
/**
* Beschreiben Sie hier die Klasse Lastwagen.
*
* @author (Noah)
* @version (06.02.21)
*/
import sas.*;
import java.awt.Color;
public class Lastwagen
{
    /**
     * Konstruktor für Objekte der Klasse Lastwagen
     */
    View view;
    Sprite lastwagen;
    Rectangle rechteck1;
    Rectangle rechteck2;
    Rectangle fenster;
    Circle rad1rand;
    Circle rad1;
    Circle rad2rand;
    Circle rad2;
    private double xPos;
    private double yPos;
    public Lastwagen(int pX, int pY)
    {
        xPos = pX;
        yPos = pY;
        lastwagen = new Sprite();
        rechteck1 = new Rectangle (pX, pY,150, 15, Color.BLUE);
        rechteck2 = new Rectangle (pX + 110, pY - 65, 40, 65, Color.BLUE);
        fenster = new Rectangle (pX + 112, pY - 63, 36, 25, Color.WHITE);
        rad1rand = new Circle (pX + 20, pY + 8, 7, Color.BLACK);
        rad1 = new Circle (pX + 21, pY+ 9, 6, Color.WHITE);
        rad2rand = new Circle (pX + 123, pY + 8, 7, Color.BLACK);
        rad2 = new Circle (pX + 124, pY+ 9, 6, Color.WHITE);
        lastwagen.add(rechteck1);
        lastwagen.add(rechteck2);
        lastwagen.add(fenster);
        lastwagen.add(rad1rand);
        lastwagen.add(rad2rand);
        lastwagen.add(rad1);
        lastwagen.add(rad2);
    }

    protected Sprite gibLKWGrafik() {
        return lastwagen;
    }

    protected double gibXPosition() {
        return xPos;
    }

    protected double gibYPosition() {
        return yPos;
    }

    public void bewege (int distance) {

        while (!(xPos == distance)) {
            this.gibLKWGrafik().move (10);
            xPos = xPos + 10;
        }
    }
}
Tieflader:
/**
* Beschreiben Sie hier die Klasse Tieflader.
*
* @author (Noah)
* @version (06.02.21)
*/
import sas.*;
import java.awt.Color;
public class Tieflader extends Lastwagen
{
    /**
     * Konstruktor für Objekte der Klasse Tieflader
     */
    public Tieflader(int pX, int pY)
    {
        super (pX, pY);
        Sprite tieflader = new  Sprite (this.gibLKWGrafik());
        Circle rad3rand = new Circle (pX + 39, pY + 8, 7, Color.BLACK);
        Circle rad3 = new Circle (pX + 40, pY+ 9, 6, Color.WHITE);
        tieflader.add(rad3rand);
        tieflader.add(rad3);
    }

    public void bewege (int distance) {
        super.bewege(distance);
    }
}
Kipper:
/**
* Beschreiben Sie hier die Klasse Kipper.
*
* @author (Noah)
* @version (06.02.21)
*/
import sas.*;
import java.awt.Color;
public class Kipper extends Lastwagen
{
    /**
     * Konstruktor für Objekte der Klasse Kipper
     */
    public Kipper(int pX, int pY)
    {
        super (pX, pY);
        Sprite kipper = new  Sprite (this.gibLKWGrafik());
        Rectangle ladeflaeche = new Rectangle (pX, pY - 35, 109.5, 35, Color.GREEN);
        kipper.add(ladeflaeche);
    }

    public void bewege (int distance) {
        super.bewege(distance);
    }
}
Kastenwagen:
/**
* Beschreiben Sie hier die Klasse Kastenwagen.
*
* @author (Noah)
* @version (06.02.21)
*/
import sas.*;
import java.awt.Color;
public class Kastenwagen extends Lastwagen
{
    /**
     * Konstruktor für Objekte der Klasse Kastenwagen
     */
    public Kastenwagen(int pX, int pY)
    {
        super (pX, pY);
        Sprite kastenwagen = new  Sprite (this.gibLKWGrafik());
        Rectangle ladeflaeche1 = new Rectangle (pX, pY - 65, 109.5, 65, Color.RED);
        kastenwagen.add(ladeflaeche1);
    }
}
KastenwagenMitBeschriftung:
/**
* Beschreiben Sie hier die Klasse KastenwagenMitBeschriftung.
*
* @author (Noah)
* @version (06.02.21)
*/
import sas.*;
import java.awt.Color;
public class KastenwagenMitBeschriftung extends Kastenwagen
{
    /**
     * Konstruktor für Objekte der Klasse KastenwagenMitBeschriftung
     */
    public KastenwagenMitBeschriftung(int pX, int pY, String pSchrift)
    {
        super (pX, pY);
        Text text = new Text (pX + 20, pY - 45, pSchrift, Color.YELLOW);
    }

}
 
mihe7

mihe7

Top Contributor
Java:
    public void bewege (int distance) {

        while (!(xPos == distance)) {
            this.gibLKWGrafik().move (10);
            xPos = xPos + 10;
        }
    }

Merk Dir in einer lokalen Variablen einfach, wie weit Du den LKW schon bewegt hast (xPos brauchst Du nicht). Außerdem wirst Du Dir überlegen müssen, dass distance nicht unbedingt ein Vielfaches von 10 sein wird.
 
N

noah_1492

Aktives Mitglied
Java:
    public void bewege (int distance) {

        while (!( i == distance)) {
            this.gibLKWGrafik().move (10);
            i = i + 10;
        }
    }
Würde das so gehen?
Und was ist mit dem Sprite? Weil da bleibt immer noch ein Rad hängen. Ich weiß nur nicht warum?
 
mihe7

mihe7

Top Contributor
N

noah_1492

Aktives Mitglied
Java:
    public void bewege (int distance){

        while (!( i == distance)) {
            this.gibLKWGrafik().move (1);
            i = i + 1;
            view.wait(100);
        }
Dann müsste das so sein. Das i ist ganz oben vor dem konstruktor deklariert worden. Nun kommt bei mir die Fehlermeldung null bei der Methode view.wait. Was ist dabei falsch

Ich habe mal versucht die view static zu setzten. Aber funktioniert auch nicht.
Hier mal kurz die Stellen.
Konsole:
/**
 * Beschreiben Sie hier die Klasse Konsole.
 *
 * @author (Noah)
 * @version (06.02.21)
 */
import sas.*;
import java.awt.Color;
public class Konsole
{
    /**
     * Konstruktor für Objekte der Klasse Konsole
     */
    public static View view;
    private Lastwagen lkw0;
    private Lastwagen lkw1;
    private Lastwagen lkw2;
    private Kipper lkw3;
    private Lastwagen lkw4;
    private Lastwagen lkw5;
    Rectangle rechteck;
    public Konsole()
    {
        View view = new View(800,600, "Lastkraftwagen");
        lkw0 = new Lastwagen(20,100);
        lkw1 = new Tieflader(190,100);
        lkw2 = new Kipper(20,250);
        lkw3 = new Kipper(190,250);
        lkw4 = new Kastenwagen(20,400);
        lkw5 = new KastenwagenMitBeschriftung(190,400,"Müller");
        fuehreAus();
        //lkw3.kippen();
        //lkw3.absenken();
    }

    public void fuehreAus(){
        rechteck = new Rectangle (0, 0, 800,600);
        rechteck.setTransparency(0);
        lkw1.bewege(330);
        view.wait(100);
    }

}
Lastwagen:
/**
 * Beschreiben Sie hier die Klasse Lastwagen.
 *
 * @author (Noah)
 * @version (06.02.21)
 */
import sas.*;
import java.awt.Color;
public class Lastwagen
{
    /**
     * Konstruktor für Objekte der Klasse Lastwagen
     */
    Sprite lastwagen;
    Rectangle rechteck1;
    Rectangle rechteck2;
    Rectangle fenster;
    Circle rad1rand;
    Circle rad1;
    Circle rad2rand;
    Circle rad2;
    private double xPos;
    private double yPos;
    double i;
    public Lastwagen(int pX, int pY)
    { 
        xPos = pX;
        yPos = pY;
        lastwagen = new Sprite();
        rechteck1 = new Rectangle (pX, pY,150, 15, Color.BLUE);
        rechteck2 = new Rectangle (pX + 110, pY - 65, 40, 65, Color.BLUE);
        fenster = new Rectangle (pX + 112, pY - 63, 36, 25, Color.WHITE);
        rad1rand = new Circle (pX + 20, pY + 8, 7, Color.BLACK);
        rad1 = new Circle (pX + 21, pY+ 9, 6, Color.WHITE);
        rad2rand = new Circle (pX + 123, pY + 8, 7, Color.BLACK);
        rad2 = new Circle (pX + 124, pY+ 9, 6, Color.WHITE);
        lastwagen.add(rechteck1);
        lastwagen.add(rechteck2);
        lastwagen.add(fenster);
        lastwagen.add(rad1rand);
        lastwagen.add(rad2rand);
        lastwagen.add(rad1);
        lastwagen.add(rad2);
    }

    protected Sprite gibLKWGrafik() {
        return lastwagen;
    }

    protected double gibXPosition() {
        return xPos;
    }

    protected double gibYPosition() {
        return yPos;
    }

    public void bewege (int distance){

        while (!( i == distance)) {
            this.gibLKWGrafik().move (1);
            i = i + 1;
            Konsole.view.wait(100);
        }
    }
}
 
Zuletzt bearbeitet:
mihe7

mihe7

Top Contributor
Das i ist ganz oben vor dem konstruktor deklariert worden.
Das nennt man Instanzvariable, eine lokale Variable existiert nur in der Methode. Dein i "überlebt" mehrere Methodenaufrufe, eine lokale Variable nicht.

Dann müsste das so sein.
Das wäre eine Möglichkeit, ja.

Ich habe mal versucht die view static zu setzten.
static hat den Zweck, Klassenvariablen-/methoden zu definieren. Das sind Variablen und Methoden, die ohne Objekt existieren und daher wenig mit Objektorientierung zu tun haben.

Konkret müsstest Du bei Deinem Code erst den Konstruktor von Konsole aufrufen (ein neues Konsole-Objekt erstellen), damit die Klassenvariable view auf ein View-Objekt gesetzt wird (so lange das nicht geschieht, ist sie mit null initialisiert). Das ist aber insgesamt nicht der Weg, der einzuschlagen wäre.

Mal eine andere Überlegung: sollte Deine Animation evtl. gar nicht in Lastwagen stehen?
 
N

noah_1492

Aktives Mitglied
Doch aber eigentlich alles. Wir haben ein Schulbuch. Vielleicht kennen Sie das i2net. Dort ist eine Implementierung vorgegeben, wo alles aus der Klasse Lastwagen entsteht. Nur ich wusste nicht wie ich alles aus dieser Klasse managen soll. Deshalb habe ich die Klasse Konsole hinzugefügt, die alles steuern soll.
Hier die Implementierung:


1612645223024.png

1612645284766.png

Bin gerade richtig überfragt mit der view und dem Sprite. Verstehe wirklich nicht, wo der Fehler liegt. Ich denke, Sie schon :)
 
mihe7

mihe7

Top Contributor
Hier die Implementierung:
Das ist ein Entwurf, die Implementierung wäre Code. Hieraus ist nicht zu entnehmen, dass irgendwo eine Animation stattfinden soll. Die bewege()-Methode in Lastwagen könnte einfach lkw.move(distance); aufrufen. Die Animation (Schleife) würde dann z. B. in der Konsole stattfinden.

Deshalb habe ich die Klasse Konsole hinzugefügt, die alles steuern soll.
Das war auch eine gute Idee, denn irgendwo muss das Programm ja starten. Es kann sein, dass Euer Lehrer Eure Klassen in eine von ihm geschriebene "Konsole" einbindet.
 
N

noah_1492

Aktives Mitglied
Achso ok das hört sich schlüssig an. Aber auf jeden fall müssen wir ein gesamtes Programm entwerfen. Weil wir es sonst auch immer ganz machen mussten. Das heißt ich sollte eine Schleife in der konsole machen und in Lastwagen einfach bewege als Methode, die ein Objekt fortbewegt. Dann bleibt jedoch immer die Frage offen, wie ich mein neuen Sprite bewege. Ich habe ja die Hauptklasse, jedoch soll das Objekt Tieflader sich bewegen. Dort habe ich ja die Klasse Lastwagen geerbt, jedoch dem Sprite was hinzugefügt. Nur wie kann ich dann jeweils für alle drei Objekte immer das neue Sprite verwenden (bewegen).
Und für die Schleife, welche Bedingung sollte diese haben. Solange das Objekt dieses unsichtbare nicht mehr ganz berührt. Nur dabei steht das das rechteck nicht vom Typ shape ist. Das wären dann die beiden Punkte die mir noch im Unklaren sind
 
mihe7

mihe7

Top Contributor
Mach es schrittweise. Hier mal eine einfache Konsole:
Java:
import sas.*;

public class Konsole {
    public static void main(String[] args) {
        View view = new View(800, 600, "Lastkraftwagen");
        Lastwagen lkw = new Lastwagen(100, 100);
        for (int i = 0; i < 100; i++) {
            lkw.bewege(5);
            view.wait(100);
        }
    }
}

Und jetzt nimmst Du Deinen Lastwagen dazu (pass auf die Bezeichner und vor allem auf die Sichtbarkeiten auf, dass diese dem Klassendiagramm entsprechen; die meisten Instanzvariablen brauchst Du nicht, kannst Du fast alle lokal im Konstruktor deklarieren).
 
N

noah_1492

Aktives Mitglied
Ok, danke dann werde ich das morgen früh probieren. Soll ich eine die for schleife so benutzen wie sie oder die Bedingung anders gestalten. Und die Methode bewege in Lastwagen soll so bleiben wie vorher gepostet von mir. Richtig? Und das mit dem Sprite wäre auch wichtig. Aber das die sich bewegen liegt erstmal im Vordergrund. Nur das wäre auch wichtig zu wissen. Danke schonmal im Vorraus
 
mihe7

mihe7

Top Contributor
Du kannst erstmal die Konsole verwenden, die ich gepostet habe. Die bewege-Methode in Lastwagen sieht zunächst (xPosition und yPosition musst Du später noch aktualisieren) einfach so aus:
Java:
    public void bewege(int distanz) {
        lkw.move(distanz);
    }

Wenn sich Dein LKW richtig bewegt, machst Du mit der nächsten Klasse weiter.

Und das mit dem Sprite wäre auch wichtig.
Das Problem mit dem Sprite habe ich hier nicht, darum schrittweise rantasten. :)
 
N

noah_1492

Aktives Mitglied
Mach es schrittweise. Hier mal eine einfache Konsole:
Java:
import sas.*;

public class Konsole {
    public static void main(String[] args) {
        View view = new View(800, 600, "Lastkraftwagen");
        Lastwagen lkw = new Lastwagen(100, 100);
        for (int i = 0; i < 100; i++) {
            lkw.bewege(5);
            view.wait(100);
        }
    }
}

Und jetzt nimmst Du Deinen Lastwagen dazu (pass auf die Bezeichner und vor allem auf die Sichtbarkeiten auf, dass diese dem Klassendiagramm entsprechen; die meisten Instanzvariablen brauchst Du nicht, kannst Du fast alle lokal im Konstruktor deklarieren).
Im Bezug darauf auf jeden Fall. Hatte ich auch vorher. Allerdings habe ich so alle Variablen zusammen oben gegeben. Deswegen habe ich alle nach oben geschrieben.
 
N

noah_1492

Aktives Mitglied
Ok der Lkw bewegt sich, jedoch bleibt mein Rad hängen irgendwas mache ich falsch. Das habe ich jetzt. Dabei bewegt sich auf jeden Fall schonmal der Tieflader. Aber halt mit dem alten Sprite und nicht mit dem neuen.
Hier mal die drei Klassen:
Konsole:
/**
 * Beschreiben Sie hier die Klasse Konsole.
 *
 * @author (Noah)
 * @version (06.02.21)
 */
import sas.*;
import java.awt.Color;
public class Konsole
{
    /**
     * Konstruktor für Objekte der Klasse Konsole
     */
    public static View view;
    private Lastwagen lkw0;
    private Lastwagen lkw1;
    private Lastwagen lkw2;
    private Kipper lkw3;
    private Lastwagen lkw4;
    private Lastwagen lkw5;
    private Rectangle rechteck;
    void main()
    {
        View view = new View(800,600, "Lastkraftwagen");
        lkw0 = new Lastwagen(20,100);
        lkw1 = new Tieflader(190,100);
        for (int i = 0; i < 100; i++) {
            lkw1.bewege(3);
            view.wait(100);
        }
        /* lkw2 = new Kipper(20,250);
        lkw3 = new Kipper(190,250);
        lkw4 = new Kastenwagen(20,400);
        lkw5 = new KastenwagenMitBeschriftung(190,400,"Müller");
        fuehreAus(); */
        //lkw3.kippen();
        //lkw3.absenken();
    }

    public void fuehreAus(){
        rechteck = new Rectangle (0, 0, 800,600);
        rechteck.setTransparency(0);
        lkw1.bewege(330);
        view.wait(100);
    }

    public static void main(String[] args) {
        Konsole konsole = new Konsole();
        konsole.main();
    }

}
Lastwagen:
/**
 * Beschreiben Sie hier die Klasse Lastwagen.
 *
 * @author (Noah)
 * @version (06.02.21)
 */
import sas.*;
import java.awt.Color;
public class Lastwagen
{
    /**
     * Konstruktor für Objekte der Klasse Lastwagen
     */
    Sprite lastwagen;
    Rectangle rechteck1;
    Rectangle rechteck2;
    Rectangle fenster;
    Circle rad1rand;
    Circle rad1;
    Circle rad2rand;
    Circle rad2;
    private double xPos;
    private double yPos;
    double i;
    public Lastwagen(int pX, int pY)
    { 
        xPos = pX;
        yPos = pY;
        lastwagen = new Sprite();
        rechteck1 = new Rectangle (pX, pY,150, 15, Color.BLUE);
        rechteck2 = new Rectangle (pX + 110, pY - 65, 40, 65, Color.BLUE);
        fenster = new Rectangle (pX + 112, pY - 63, 36, 25, Color.WHITE);
        rad1rand = new Circle (pX + 20, pY + 8, 7, Color.BLACK);
        rad1 = new Circle (pX + 21, pY+ 9, 6, Color.WHITE);
        rad2rand = new Circle (pX + 123, pY + 8, 7, Color.BLACK);
        rad2 = new Circle (pX + 124, pY+ 9, 6, Color.WHITE);
        lastwagen.add(rechteck1);
        lastwagen.add(rechteck2);
        lastwagen.add(fenster);
        lastwagen.add(rad1rand);
        lastwagen.add(rad2rand);
        lastwagen.add(rad1);
        lastwagen.add(rad2);
    }

    protected Sprite gibLKWGrafik() {
        return lastwagen;
    }

    protected double gibXPosition() {
        return xPos;
    }

    protected double gibYPosition() {
        return yPos;
    }

    public void bewege (int distance){
        lastwagen.move(distance);
    }
}
Tieflader:
/**
 * Beschreiben Sie hier die Klasse Tieflader.
 *
 * @author (Noah)
 * @version (06.02.21)
 */
import sas.*;
import java.awt.Color;
public class Tieflader extends Lastwagen
{
    /**
     * Konstruktor für Objekte der Klasse Tieflader
     */
    public Tieflader(int pX, int pY)
    {
        super (pX, pY);
        Sprite tieflader = new  Sprite (this.gibLKWGrafik());
        Circle rad3rand = new Circle (pX + 39, pY + 8, 7, Color.BLACK);
        Circle rad3 = new Circle (pX + 40, pY+ 9, 6, Color.WHITE);
        tieflader.add(rad3rand);
        tieflader.add(rad3);
    }

    public void bewege (int distance) {
        super.bewege(distance);
    }
}
 
mihe7

mihe7

Top Contributor
Konsole, Zeile 18: Kipper. Es gibt aber keine Klasse Kipper, sondern nur Lastwagen und Tieflader.

Außerdem solltest Du in der Konsole erstmal nur einen einzigen LKW bewegen. Mehr nicht. Wenn da das Rad stehen bleibt, hast Du einfach irgendein Anzeigeproblem, das ich nicht nachvollziehen kann, da hier weder mit der 5.7 noch mit der von Dir verlinkten Bibliothek ein Rad stehen bleibt.
 
N

noah_1492

Aktives Mitglied
Also bei mir gibt es ein Kipper als Klasse
Kipper:
/**
* Beschreiben Sie hier die Klasse Kipper.
*
* @author (Noah)
* @version (06.02.21)
*/
import sas.*;
import java.awt.Color;
public class Kipper extends Lastwagen
{
    /**
     * Konstruktor für Objekte der Klasse Kipper
     */
    public Kipper(int pX, int pY)
    {
        super (pX, pY);
        Sprite kipper = new  Sprite (this.gibLKWGrafik());
        Rectangle ladeflaeche = new Rectangle (pX, pY - 35, 109.5, 35, Color.GREEN);
        kipper.add(ladeflaeche);
    }

    public void bewege (int distance) {
        super.bewege(distance);
    }
}
Ich denke Sie haben es verstanden, aber möchte nochmal sicher gehen. Ich habe ja eine Oberklasse Lastwagen, der blau ist und zwei Reifen hat. Nun sollen sich jedoch nicht die linke Seite bewegen, sondern die rechte und dort steht ein Tieflader mit 3 Reifen. Und diesen Reifen füge ich eben in der Klasse Tieflader einem Sprite hinzu. Meine Vermutung ist, dass das Programm jedoch nicht das neue Sprite nimmt, sondern das Sprite aus der Klasse Lastwagen. Aber dieses Sprite beinhaltet eben nur 2 Reifen. Deshalb bleibt eins stehen.
 
N

noah_1492

Aktives Mitglied
Schön, aber in Deinem Kommentar #14 nicht. Ich weiß, dass Du eine Klasse Kipper in Deinem ersten Kommentar gepostet hast, wenn wir aber Fehler suchen wollen, müssen wir sicherstellen, dass wir auch beide den aktuellen Stand verwenden.
Verstehe aber die Kipper sachen sind ja auskommentiert, also die müssten jetzt nichts zur Sache tun glaube ich.
 
N

noah_1492

Aktives Mitglied
Es funktioniert. Was wäre dann der nächste Schritt. Das bei den anderen zwei Lkws oder?
Das funktioniert auch. Alle bewegen sich. Was wäre das nächste?
 
Zuletzt bearbeitet:
mihe7

mihe7

Top Contributor
Die Variablen, die die x-/y-Positionen speichern, müssen nach einer Bewegung (vermutlich) aktualisiert werden. Ansonsten hast Du nicht mehr geschrieben, als dass sich die Dinger bewegen sollen und das tun sie ja nun. Dem Diagramm nach brauchst Du kippen() und absenken() beim Kipper.
 
N

noah_1492

Aktives Mitglied
Die Variablen, die die x-/y-Positionen speichern, müssen nach einer Bewegung (vermutlich) aktualisiert werden. Ansonsten hast Du nicht mehr geschrieben, als dass sich die Dinger bewegen sollen und das tun sie ja nun. Dem Diagramm nach brauchst Du kippen() und absenken() beim Kipper.
Und die for schleife bleibt? Soll ich das in bewege in der Klasse Lastwagen machen. Und wie genau? Weil mein problem wäre jetzt, wie ich das gestalten muss. die for schleife sagt ja jetzt, wie lange die Methode bewege durchgeführt werden muss. Achso also einfach nur eine variable erstellen, die die Xposition speichert. Was bringt dann diese Xposition. Und soll das Ziel noch sein, das der lkw genau am Rand stehen bleibt oder nur die for schleife anpassen, sodass der lkw geanu am Rand stehen bleibt?
Die Xposition Variable wäre ja wichtig für das absenken oder?
 
mihe7

mihe7

Top Contributor
Und die for schleife bleibt?
In Konsole, ja. Wie gesagt: ich gehe nicht davon aus, dass der Lastwagen selbst eine Animation durchführen soll.

Soll ich das in bewege in der Klasse Lastwagen machen. Und wie genau?
Du schreibst mal wieder in Rätseln.

Achso also einfach nur eine variable erstellen, die die Xposition speichert. Was bringt dann diese Xposition.
Die Variable gibt es schon (lt. Diagramm). Was das bringt? Keine Ahnung, denn die x-Position wird ja im Sprite schon gespeichert. Denkbar wäre ein Versatz des Bezugpunkts.

Und soll das Ziel noch sein, das der lkw genau am Rand stehen bleibt oder nur die for schleife anpassen, sodass der lkw geanu am Rand stehen bleibt?
Woher soll jemand außer Dir und Deinem Lehrer wissen, was Deine Aufgabe ist?

Die Xposition Variable wäre ja wichtig für das absenken oder?
Möglich.
 
N

noah_1492

Aktives Mitglied
Also absenken funktioniert nun. Ich kann Ihnen mal mein Programm jetzt ganz zeigen und sie könnten vielleicht noch ein Vorschlag zur Verbesserung geben. Vielleicht die Entfernung der Lkws, aber ich denke das sollte so passen. Hier das vollständige Programm:
Konsole:
/**
 * Beschreiben Sie hier die Klasse Konsole.
 *
 * @author (Noah)
 * @version (06.02.21)
 */
import sas.*;
import java.awt.Color;
public class Konsole
{
    /**
     * Konstruktor für Objekte der Klasse Konsole
     */
    public static View view;
    private Lastwagen lkw0;
    private Lastwagen lkw1;
    private Lastwagen lkw2;
    private Kipper lkw3;
    private Lastwagen lkw4;
    private Lastwagen lkw5;
    private Rectangle rechteck;
    void main()
    {
        View view = new View(800,600, "Lastkraftwagen");
        lkw0 = new Lastwagen(20,100);
        lkw1 = new Tieflader(190,100);
        for (int i = 0; i < 100; i++) {
            lkw1.bewege(3);
            view.wait(100);
        }
        lkw2 = new Kipper(20,250);
        lkw3 = new Kipper(190,250);
        for (int i = 0; i < 100; i++) {
            lkw3.bewege(3);
            view.wait(100);
        }
        for (int i = 0; i < 45; i = i + 5) {
            lkw3.kippen();
            view.wait(50);
        }
        view.wait(1000);
        for (int i = 0; i < 45; i = i + 5) {
            lkw3.absenken();
            view.wait(50);
        }
        lkw4 = new Kastenwagen(20,400);
        lkw5 = new KastenwagenMitBeschriftung(190,400,"Müller");
        for (int i = 0; i < 100; i++) {
            lkw5.bewege(3);
            view.wait(100);
        }       
    }

    public static void main(String[] args) {
        Konsole konsole = new Konsole();
        konsole.main();
    }

}
Lastwagen:
/**
 * Beschreiben Sie hier die Klasse Lastwagen.
 *
 * @author (Noah)
 * @version (06.02.21)
 */
import sas.*;
import java.awt.Color;
public class Lastwagen
{
    /**
     * Konstruktor für Objekte der Klasse Lastwagen
     */
    Sprite lastwagen;
    Rectangle rechteck1;
    Rectangle rechteck2;
    Rectangle fenster;
    Circle rad1rand;
    Circle rad1;
    Circle rad2rand;
    Circle rad2;
    private double xPos;
    private double yPos;
    double i;
    public Lastwagen(int pX, int pY)
    { 
        xPos = pX;
        yPos = pY;
        lastwagen = new Sprite();
        rechteck1 = new Rectangle (pX, pY,150, 15, Color.BLUE);
        rechteck2 = new Rectangle (pX + 110, pY - 65, 40, 65, Color.BLUE);
        fenster = new Rectangle (pX + 112, pY - 63, 36, 25, Color.WHITE);
        rad1rand = new Circle (pX + 20, pY + 8, 7, Color.BLACK);
        rad1 = new Circle (pX + 21, pY+ 9, 6, Color.WHITE);
        rad2rand = new Circle (pX + 123, pY + 8, 7, Color.BLACK);
        rad2 = new Circle (pX + 124, pY+ 9, 6, Color.WHITE);
        lastwagen.add(rechteck1);
        lastwagen.add(rechteck2);
        lastwagen.add(fenster);
        lastwagen.add(rad1rand);
        lastwagen.add(rad2rand);
        lastwagen.add(rad1);
        lastwagen.add(rad2);
    }

    protected Sprite gibLKWGrafik() {
        return lastwagen;
    }

    protected double gibXPosition() {
        return xPos;
    }

    protected double gibYPosition() {
        return yPos;
    }

    public void bewege (int distance){
        lastwagen.move(distance);
        xPos = xPos + distance;
    }
}
Tieflader:
/**
 * Beschreiben Sie hier die Klasse Tieflader.
 *
 * @author (Noah)
 * @version (06.02.21)
 */
import sas.*;
import java.awt.Color;
public class Tieflader extends Lastwagen
{
    /**
     * Konstruktor für Objekte der Klasse Tieflader
     */
    public Tieflader(int pX, int pY)
    {
        super (pX, pY);
        Sprite tieflader = this.gibLKWGrafik();
        Circle rad3rand = new Circle (pX + 39, pY + 8, 7, Color.BLACK);
        Circle rad3 = new Circle (pX + 40, pY+ 9, 6, Color.WHITE);
        tieflader.add(rad3rand);
        tieflader.add(rad3);
    }

    public void bewege (int distance) {
        super.bewege(distance);
    }
}
Kipper:
/**
 * Beschreiben Sie hier die Klasse Kipper.
 *
 * @author (Noah)
 * @version (06.02.21)
 */
import sas.*;
import java.awt.Color;
public class Kipper extends Lastwagen
{
    /**
     * Konstruktor für Objekte der Klasse Kipper
     */
    Rectangle ladeflaeche;
    public Kipper(int pX, int pY)
    {
        super (pX, pY);
        Sprite kipper = this.gibLKWGrafik();
        ladeflaeche = new Rectangle (pX, pY - 35, 109.5, 35, Color.GREEN);
        kipper.add(ladeflaeche);
    }

    public void bewege (int distance) {
        super.bewege(distance);
    }

    public void kippen() {
        ladeflaeche.turn (this.gibXPosition(), this.gibYPosition(), -5);
    }

    public void absenken() {
        ladeflaeche.turn (this.gibXPosition(), this.gibYPosition(), 5);
    }
}
Kastenwagen:
/**
 * Beschreiben Sie hier die Klasse Kastenwagen.
 *
 * @author (Noah)
 * @version (06.02.21)
 */
import sas.*;
import java.awt.Color;
public class Kastenwagen extends Lastwagen
{
    /**
     * Konstruktor für Objekte der Klasse Kastenwagen
     */
    public Kastenwagen(int pX, int pY)
    {
        super (pX, pY);
        Sprite kastenwagen = this.gibLKWGrafik();
        Rectangle ladeflaeche1 = new Rectangle (pX, pY - 65, 109.5, 65, Color.RED);
        kastenwagen.add(ladeflaeche1);
    }
}
KastenwagenMitBeschriftung:
/**
 * Beschreiben Sie hier die Klasse KastenwagenMitBeschriftung.
 *
 * @author (Noah)
 * @version (06.02.21)
 */
import sas.*;
import java.awt.Color;
public class KastenwagenMitBeschriftung extends Kastenwagen
{
    /**
     * Konstruktor für Objekte der Klasse KastenwagenMitBeschriftung
     */
    public KastenwagenMitBeschriftung(int pX, int pY, String pSchrift)
    {
        super (pX, pY);
        Sprite kastenwagenMitBeschriftung = this.gibLKWGrafik();
        Text text = new Text (pX + 20, pY - 45, pSchrift, Color.YELLOW);
        kastenwagenMitBeschriftung.add(text);
    }

}
 
mihe7

mihe7

Top Contributor
Ein paar Tipps habe ich Dir weiter oben schon gegeben:
pass auf die Bezeichner und vor allem auf die Sichtbarkeiten auf, dass diese dem Klassendiagramm entsprechen; die meisten Instanzvariablen brauchst Du nicht, kannst Du fast alle lokal im Konstruktor deklarieren
Kurz: vergleiche Deinen Code mit dem Diagramm.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
der_Schokomuffin Hilfe gesucht beim Thema Objekte übergeben! Java Basics - Anfänger-Themen 2
A Was könnten typische Prüfungsaufgaben zum Thema lineare, verkettete Listen sein? Java Basics - Anfänger-Themen 5
D Das leidige Thema static.... Java Basics - Anfänger-Themen 15
V Hilfe zum Thema einlesen eines Datums Java Basics - Anfänger-Themen 5
F Concurrent Thema Java Basics - Anfänger-Themen 6
T Klassen Kleine Übung zum Thema Klassen Java Basics - Anfänger-Themen 3
S Threads zum Thema Threads??? null Ahnung Java Basics - Anfänger-Themen 4
E Brauche eine Antwort zum Thema RegEx ( Alternative zur Lösung auch gesucht ) Java Basics - Anfänger-Themen 5
E Erste Schritte Vorschläge für mich zum Thema Punkt vor Strich ? Java Basics - Anfänger-Themen 7
J Frage zum Thema Exceptions (Try/Catch) Java Basics - Anfänger-Themen 3
J Frage zu dem Thema interface Java Basics - Anfänger-Themen 5
J Verständnisfragen zu dem Thema Objekten Java Basics - Anfänger-Themen 7
D Zähler nicht sichtbar (Thema: Konstruktoren) Java Basics - Anfänger-Themen 2
A Hilfestellung zum Thema Persistenz Java Basics - Anfänger-Themen 12
J Frage zum Thema ... alles mögliche! Java Basics - Anfänger-Themen 6
P Noch zum Thema Arrays Java Basics - Anfänger-Themen 13
T Bin Anfänger ... das Thema auch ? Java Basics - Anfänger-Themen 10
N JAR das Endlose Thema Java Basics - Anfänger-Themen 2
J Neues Forum Thema erstellen mit java(httpclient) Java Basics - Anfänger-Themen 11
Dit_ Frage zum Thema Speicherreservierung Java Basics - Anfänger-Themen 3
Y Kleine Verständnisfrage zum Thema dynamische Polymorphie Java Basics - Anfänger-Themen 3
I Verständnisfrage zum Thema APIs Java Basics - Anfänger-Themen 6
G Dieses leidige ID Thema Java Basics - Anfänger-Themen 9
N Das alte Thema "File Encoding" Java Basics - Anfänger-Themen 2
D Frage zum heiss geliebten Thema MVC Java Basics - Anfänger-Themen 24
D Abschlussklasse 13 Projektarbeit, thema? Java Basics - Anfänger-Themen 15
J Fragen zum Thema Arrays Java Basics - Anfänger-Themen 5
P Applet not inited - leidiges Thema Java Basics - Anfänger-Themen 6
Z leidiges Thema Datumsformatierung Java Basics - Anfänger-Themen 3
G Leidiges Thema Classpath Java Basics - Anfänger-Themen 5
G Syntax der if-Anweisung (Thema getrennt!) Java Basics - Anfänger-Themen 7
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
A Vererbung Vererbung Übung Java Basics - Anfänger-Themen 5
B Vererbung - Sichtbarkeitsmodifikation - protected Java Basics - Anfänger-Themen 10
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
G Java Vererbung Java Basics - Anfänger-Themen 8
Y Vererbung Konto - Anfangsprobleme Java Basics - Anfänger-Themen 7
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
M Vererbung mit Enums Java Basics - Anfänger-Themen 8
Kirby.exe Vererbung im Detail erklärt? Java Basics - Anfänger-Themen 9
N Modellierung, vererbung, Java Basics - Anfänger-Themen 163
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung im Computerspiel Java Basics - Anfänger-Themen 7
J Probleme mit Vererbung Java Basics - Anfänger-Themen 4
I Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
V Vererbung Java Basics - Anfänger-Themen 2
J Frage zur Vererbung Java Basics - Anfänger-Themen 1
J Vererbung Java Basics - Anfänger-Themen 3
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
O Vererbung Ueben mit kleiner Datenstruktur von Räumen Java Basics - Anfänger-Themen 10
O Umgang mit Vererbung verstehen Java Basics - Anfänger-Themen 4
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
O Vererbung änderung des Konstruktors Java Basics - Anfänger-Themen 8
L Vererbung Java Basics - Anfänger-Themen 5
E HashMap+Vererbung Java Basics - Anfänger-Themen 11
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
A Objekterstellung bei der Vererbung Java Basics - Anfänger-Themen 7
P Vererbung Warum funktioniert die Vererbung hier nicht Java Basics - Anfänger-Themen 14
S Vererbung Java mehrfach Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
A Klassen Vererbung privater Methoden und Member Java Basics - Anfänger-Themen 12
A Konstruktoren Vererbung Java Basics - Anfänger-Themen 3
scitex Vererbung von JFrame in einer Klasse entfernen Java Basics - Anfänger-Themen 5
W Vererbung, abstract und Konstruktoren Java Basics - Anfänger-Themen 30
J Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 11
G Polymorphie, Vererbung, statischer Typ, Laufzeittyp Java Basics - Anfänger-Themen 2
H Vererbung mit private instanzvariablen Java Basics - Anfänger-Themen 9
S Vererbung Funktionsweise Code zur Vererbung Java Basics - Anfänger-Themen 1
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
S Verständnis Vererbung Java Basics - Anfänger-Themen 3
D JavaFX Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Generizität und Vererbung Java Basics - Anfänger-Themen 4
A Vererbung bei Klassen mit Objekt der Klasse im Konstruktor Java Basics - Anfänger-Themen 4
K Vererbung Octagon von Circle Java Basics - Anfänger-Themen 0
B Hilfe bei Vererbung Java Basics - Anfänger-Themen 2
D Vererbung Frage zum Klassenaufbau mit Vererbung Java Basics - Anfänger-Themen 1
T Vererbung und interface. Java Basics - Anfänger-Themen 1
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 1
F Vererbung in zwei Richtungen? Java Basics - Anfänger-Themen 14
D Vererbung / Polymorphie Java Basics - Anfänger-Themen 5
O Vererbung Java Basics - Anfänger-Themen 5
M Vererbung Theorie OK, Praxis ?? Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
C Vererbung - Ausgaben bestimmen Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 10
L Setter und Getter/Vererbung Java Basics - Anfänger-Themen 6
C Konstruktoren und Vererbung Java Basics - Anfänger-Themen 2
J Kleinere Frage zur Vererbung/Objekterzeugung Java Basics - Anfänger-Themen 2
G Vererbung Java Basics - Anfänger-Themen 12
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7
J Vererbung Vererbung von Methoden Java Basics - Anfänger-Themen 6
B Vererbung Java Basics - Anfänger-Themen 12
K Vererbung (super) Java Basics - Anfänger-Themen 2
A ArrayQueue mit Exceptions und Vererbung Java Basics - Anfänger-Themen 3
J Java: static bei Vererbung Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Anzeige

Neue Themen


Oben