Robotersteuerung

E

Eskimo12

Gast
Hallo Zusammen,
ich programmiere momentan eine Rasenmähroboter Simulation und stoße dabei an meine Grenzen.
Ich lese mein Grundstück über eine Textdatei ein, in der ich auch meinen Roboter setze. Das ganze passiert so:
Java:
public class Spielfeld
{
    private int hoehe;
    private int breite;
    private Untergrund[][] untergrundMatrix;
    
    /**
     * Konstruktor der Klasse Spielfeld
     */
    public Spielfeld(int hoehe, int breite, char[][] feldinhalt)
    {
        this.hoehe = hoehe;
        this.breite = breite;
        Untergrund[][] untergrundMatrix = new Untergrund[breite][hoehe];
    }
    
    /**
     * Diese Methode erzeugt die Objekte und legt diese in der UntergrundsMatrix ab.
     * 
     * @param grundstueck Das charArray grundstueck beinhaltet die chars, die aus der Datei eingelesen wurden.
     * 
     */
    public Untergrund[][] erzeugeFelder(char[][] grundstueck, Untergrund[][] untergrundMatrix)
    {
        for(int y = 0; y < hoehe; y++){
            for(int x = 0; x < breite; x++){
                if(grundstueck[x][y] == 'R'){
                    boolean gemaeht = false;
                    Vektor position = new Vektor(x ,y);
                    Untergrundtyp typ = Untergrundtyp.RasenUngemäht;
                    Rasen rasen = new Rasen(gemaeht, position, typ);
                    untergrundMatrix[x][y] = rasen;
                }
                else if(grundstueck[x][y] == 'r'){
                    boolean gemaeht = true;
                    Vektor position = new Vektor(x, y);
                    Untergrundtyp typ = Untergrundtyp.RasenGemäht;
                    Rasen rasen = new Rasen(gemaeht, position, typ);
                    untergrundMatrix[x][y] = rasen;
                }
                else if(grundstueck[x][y] == 'B'){
                    Vektor position = new Vektor(x, y);
                    Untergrundtyp typ = Untergrundtyp.Baum;
                    Untergrund untergrund = new Untergrund(position, typ);
                    untergrundMatrix[x][y] = untergrund;
                }
                else if(grundstueck[x][y] == 'H'){
                    Vektor position = new Vektor(x, y);
                    Untergrundtyp typ = Untergrundtyp.Hecke;
                    Untergrund untergrund = new Untergrund(position, typ);
                    untergrundMatrix[x][y] = untergrund; 
                }
                else if(grundstueck[x][y] == 'E'){
                    Vektor position = new Vektor(x, y);
                    Untergrundtyp typ = Untergrundtyp.Beet;
                    Untergrund untergrund = new Untergrund(position, typ);
                    untergrundMatrix[x][y] = untergrund; 
                }
                else if(grundstueck[x][y] == 'A'){
                    Vektor position = new Vektor(x, y);
                    Untergrundtyp typ = Untergrundtyp.Strauch;
                    Untergrund untergrund = new Untergrund(position, typ);
                    untergrundMatrix[x][y] = untergrund; 
                }
                else if(grundstueck[x][y] == 'T'){
                    Vektor position = new Vektor(x, y);
                    Untergrundtyp typ = Untergrundtyp.Terrasse;
                    Untergrund untergrund = new Untergrund(position, typ);
                    untergrundMatrix[x][y] = untergrund; 
                }
                else if(grundstueck[x][y] == 'U'){
                    Vektor position = new Vektor(x, y);
                    Untergrundtyp typ = Untergrundtyp.Haus;
                    Untergrund untergrund = new Untergrund(position, typ);
                    untergrundMatrix[x][y] = untergrund; 
                }
                else if(grundstueck[x][y] == 'M'){
                    Vektor position = new Vektor(x, y);
                    Untergrundtyp typ = Untergrundtyp.Mauer;
                    Untergrund untergrund = new Untergrund(position, typ);
                    untergrundMatrix[x][y] = untergrund; 
                }
                else if(grundstueck[x][y] == 'I'){
                    Vektor position = new Vektor(x, y);
                    Untergrundtyp typ = Untergrundtyp.Teich;
                    Untergrund untergrund = new Untergrund(position, typ);
                    untergrundMatrix[x][y] = untergrund; 
                }
                else if(grundstueck[x][y] == 'G'){
                    Vektor position = new Vektor(x, y);
                    Untergrundtyp typ = Untergrundtyp.Gehweg;
                    Untergrund untergrund = new Untergrund(position, typ);
                    untergrundMatrix[x][y] = untergrund; 
                }
                else if(grundstueck[x][y] == '1'){
                    Vektor position = new Vektor(x, y);
                    Ausrichtung ausrichtung = Ausrichtung.Norden;
                    Untergrundtyp typ = Untergrundtyp.RasenUngemäht;
                    boolean gemaeht = false;
                    Rasen rasen = new Rasen(gemaeht, position, typ);
                    Roboter roboter = new Roboter(ausrichtung, position);
                    untergrundMatrix[x][y] = rasen; 
                }
                else if(grundstueck[x][y] == '2'){
                    Vektor position = new Vektor(x, y);
                    Ausrichtung ausrichtung = Ausrichtung.Osten;
                    Untergrundtyp typ = Untergrundtyp.RasenUngemäht;
                    boolean gemaeht = false;
                    Rasen rasen = new Rasen(gemaeht, position, typ);
                    Roboter roboter = new Roboter(ausrichtung, position);
                    untergrundMatrix[x][y] = rasen;
                }
                else if(grundstueck[x][y] == '3'){
                    Vektor position = new Vektor(x, y);
                    Ausrichtung ausrichtung = Ausrichtung.Süden;
                    Untergrundtyp typ = Untergrundtyp.RasenUngemäht;
                    boolean gemaeht = false;
                    Rasen rasen = new Rasen(gemaeht, position, typ);
                    Roboter roboter = new Roboter(ausrichtung, position);
                    untergrundMatrix[x][y] = rasen;
                }
                else if(grundstueck[x][y] == '4'){
                    Vektor position = new Vektor(x, y);
                    Ausrichtung ausrichtung = Ausrichtung.Westen;
                    Untergrundtyp typ = Untergrundtyp.RasenUngemäht;
                    boolean gemaeht = false;
                    Rasen rasen = new Rasen(gemaeht, position, typ);
                    Roboter roboter = new Roboter(ausrichtung, position);
                    untergrundMatrix[x][y] = rasen;
                }
                else if(grundstueck[x][y] == 'n'){
                    Vektor position = new Vektor(x, y);
                    Ausrichtung ausrichtung = Ausrichtung.Norden;
                    Untergrundtyp typ = Untergrundtyp.Ladestation;
                    Ladestation ladestation = new Ladestation(position, typ, ausrichtung);
                    untergrundMatrix[x][y] = ladestation;
                }
                else if(grundstueck[x][y] == 'o'){
                    Vektor position = new Vektor(x, y);
                    Ausrichtung ausrichtung = Ausrichtung.Osten;
                    Untergrundtyp typ = Untergrundtyp.Ladestation;
                    Ladestation ladestation = new Ladestation(position, typ, ausrichtung);
                    untergrundMatrix[x][y] = ladestation;
                }
                else if(grundstueck[x][y] == 's'){
                    Vektor position = new Vektor(x, y);
                    Ausrichtung ausrichtung = Ausrichtung.Süden;
                    Untergrundtyp typ = Untergrundtyp.Ladestation;
                    Ladestation ladestation = new Ladestation(position, typ, ausrichtung);
                    untergrundMatrix[x][y] = ladestation;
                }
                else if(grundstueck[x][y] == 'w'){
                    Vektor position = new Vektor(x, y);
                    Ausrichtung ausrichtung = Ausrichtung.Westen;
                    Untergrundtyp typ = Untergrundtyp.Ladestation;
                    Ladestation ladestation = new Ladestation(position, typ, ausrichtung);
                    untergrundMatrix[x][y] = ladestation;
                }
                else if(grundstueck[x][y] == 'N'){
                    Vektor position = new Vektor(x, y);
                    Ausrichtung ausrichtungRoboter = Ausrichtung.Süden;
                    Ausrichtung ausrichtungLadestation = Ausrichtung.Norden;
                    Roboter roboter = new Roboter(ausrichtungRoboter, position);
                    Untergrundtyp typ = Untergrundtyp.Ladestation;
                    Ladestation ladestation = new Ladestation(position, typ, ausrichtungLadestation);
                    untergrundMatrix[x][y] = ladestation;
                }
                else if(grundstueck[x][y] == 'O'){
                    Vektor position = new Vektor(x, y);
                    Ausrichtung ausrichtungRoboter = Ausrichtung.Westen;
                    Ausrichtung ausrichtungLadestation = Ausrichtung.Osten;
                    Roboter roboter = new Roboter(ausrichtungRoboter, position);
                    Untergrundtyp typ = Untergrundtyp.Ladestation;
                    Ladestation ladestation = new Ladestation(position, typ, ausrichtungLadestation);
                    untergrundMatrix[x][y] = ladestation;
                }
                else if(grundstueck[x][y] == 'S'){
                    Vektor position = new Vektor(x, y);
                    Ausrichtung ausrichtungRoboter = Ausrichtung.Norden;
                    Ausrichtung ausrichtungLadestation = Ausrichtung.Süden;
                    Roboter roboter = new Roboter(ausrichtungRoboter, position);
                    Untergrundtyp typ = Untergrundtyp.Ladestation;
                    Ladestation ladestation = new Ladestation(position, typ, ausrichtungLadestation);
                    untergrundMatrix[x][y] = ladestation;
                }
                else if(grundstueck[x][y] == 'W'){
                    Vektor position = new Vektor(x, y);
                    Ausrichtung ausrichtungRoboter = Ausrichtung.Osten;
                    Ausrichtung ausrichtungLadestation = Ausrichtung.Westen;
                    Roboter roboter = new Roboter(ausrichtungRoboter, position);
                    Untergrundtyp typ = Untergrundtyp.Ladestation;
                    Ladestation ladestation = new Ladestation(position, typ, ausrichtungLadestation);
                    untergrundMatrix[x][y] = ladestation;
                } 
                else {System.out.println("nichts passendes gefuznden"); }
            } 
        } return untergrundMatrix;
    }

Zunächst soll der Roboter aus der Ladestation starten, also rückwärts rausfahren, sich drehen und dann zufällig mähen. Dabei soll er sich merken wo er lang ist um bei einem gewissen Akkustand den gleichen Weg zurück zu nehmen. Die Robotersteuerung wollte ich nun in einer neuen Klassen Roboter erstellen. Diese soll sagen können ob die Messer aktiv sind, dass der Roboter prüfen soll welche Art Feld vor ihm liegt und was er in welchem Fall tun muss. ICh denke hierbei ist eine intelligente Steuerung für mich zu komplex und daher wirds die Zufallssteuerung.

Meine Klasse Roboter sieht bisher so aus:
Java:
public class Robot
{
    private Ausrichtung ausrichtung;
    private Vektor position;
    private boolean messerAktiv;

    /**
     * Konstruktor der Klasse Roboter
     */
    public Robot(Ausrichtung ausrichtung, Vektor position)
    {
        
    }
}
ich habe leider keine Ahnung wie ich nun weiter Vorgehen soll. Habt ihr evtl Tipps oder Lösungansätze?

Grüße
Eskimo
 
G

Gast2

Gast
Überleg dir was dein Roboter machen muss. Im einfachsten Fall doch sowas wie:
1) Lage analysieren
2) Nächsten Schritt bestimmen
3) Schritt ausführen
4) Weiter bei 1) solange noch nicht fertig.

Das kannst du wunderbar in Methoden implementieren die du dann nacheinander aufrufst. Wo genau hakts da denn? Bisher seh ich in dem Code noch gar nichts von dem von dir beschriebenen Verhalten.
 
E

Eskimo

Gast
HGi, danke für die schnelle Antwort. Ja da hatte ich auch dran gedacht, nur steh ich mit meinem Halbwissen über Java extrem aufm Schlauch. Kannst du mir evtl. ein Beispiel nennen, wie du beginnen würdest? Also z.B. in der Txt Datei steht an einer Position eine eins, da bedeutet der Roboter ist in der Ladestation, das würde ich als erstes abfragen und ihm sagen wenn das zutrifft rückwärts raus fahren. Es hapert da eher an meiner Fähigkeit zu programmieren ;)
 

Oben