This site requires JavaScript, please enable it in your browser!
Greenfoot back
Asoraso
Asoraso wrote ...

2014/8/29

Endlosschleife Bewegen

Asoraso Asoraso

2014/8/29

#
Hi Leute ich muss was für die Schule schreiben. kriege das aber nicht hin:((, und dann dachte ich mal ich frag einfach im Forum. Ich muss den Roboter im Roboterszenario irgendwie dazu bringe von Objekt A zu Objekt B zu laufen und dann wieder zurück und das in einer Endlosschleife. Nur hab ich keine Ahnung wie der den Weg selber finden kann ohne das man die Koordinaten der 2 Objekte hat. Vor allem weil ich die 2 Objekte zufällig auf der Map spawne. Danke schon mal im vorraus für die Tipps
NikZ NikZ

2014/8/30

#
Hallo, ich kann nicht Deutsch sprechen, und ich bin mit übersetzen ... Also bitte entschuldigen Sie meine Fehler. So können Sie versuchen, ein Objekt, um von A nach B zu bekommen? Was, wenn Sie B x und bekam y und verglichen sie mit Ihrer Roboter x und y?
NikZ NikZ

2014/8/30

#
Sie können schreiben, (Pseudo-Code): wenn x kleiner als B x, rechts zu bewegen (x + 1) wenn x größer als B x, nach links zu bewegen (x - 1) Dann gleich für y: wenn y weniger als B y, nach unten bewegen (y + 1) wenn y größer als B y, nach oben (y - 1)
NikZ NikZ

2014/8/30

#
Für die Schleife, können Sie einfach verwenden, während oder nach. Wenn man von B nach A zurück, anstelle der Berechnung x und y B, Nutzung Ort von A x und y.
Super_Hippo Super_Hippo

2014/8/30

#
Speichere deine Objekte in deiner Welt beim Erstellen, also sowas wie:
//Statt Object_A/B den Namen der Klasse, obj_a/b als Namen, der gespeichert wird. Denk' dir was passendes aus ;)
public Objekt_A obj_a; 
public Object_B obj_b;

//Größe deiner Welt, mach ich gerne so und spart solchen Code wie getWidth() etc...
private static int x = /**/;
private static int y = /**/;

public Welt() //der Konstruktor deiner Welt, wie auch immer sie heißt.
{
    super(x,y,1);
    
    //...

    obj_a = new Obj_A();
    obj_b = new Obj_B();
    //deine zufälligen Koordinaten, bei mir standardmäßig so was wie
    addObject(obj_a, r(x), r(y));
    addObject(obj_b, r(x), r(y));

    //Roboter spawnen
}

public int r(int s)
{
    return Greenfoot.getRandomNumber(s);
}
Dann kannst du in deiner Roboter-Klasse so etwas machen wie:
private int weg; //solange es nur zwei Objekte sind, kannst du auch 'boolean' machen. In diesem Beispiel geht der Roboter zu A, wenn weg=0 ist, bei 1 zu B.
private int a_x;
private int a_y;
private int b_x;
private int b_y;

public Roboter()
{
    weg = 0; //zuerst zu A gehen
}

//Koordinaten der Objekte speichern (falls sich die Objekte bewegen sollten, musst du das dann nochmal überprüfen)
public void addedToWorld(World Welt)
{
    Welt welt = (Welt) getWorld();
    a_x = welt.obj_a.getX();
    a_y = welt.obj_a.getY();
    b_x = welt.obj_b.getX();
    b_y = welt.obj_b.getY();
}

//Falls er auf dem Weg zu A ist, läuft er zuerst horizontal an die richtige Position und dann vertikal. Falls er beides gleichzeitig machen kann/soll, dann nimm einfach das erste 'else' bei den y weg (markiert). Falls er bei A angekommen hat, macht er sich auf den Weg zu B.
public void act()
{
    int x = getX();
    int y = getY();
    if (weg==0)
    {
        if (x < a_x) setLocation(x+1,y);
        else if (x > a_x) setLocation(x-1,y);
        
        //↓ hier das angesprochene 'else'
        else if (y < a_y) setLocation(x,y+1);
        else if (y > a_y) setLocation(x,y-1);

        else if (x==a_x && y==a_y) weg = 1;
    }
    else
    {
        if (x < b_x) setLocation(x+1,y);
        else if (x > b_x) setLocation(x-1,y);
        
        //↓ und hier das andere
        else if (y < b_y) setLocation(x,y+1);
        else if (y > b_y) setLocation(x,y-1);

        else if (x==b_x && y==b_y) weg = 0;
    }
}
Ich hoffe mal, das haut so hin und es sind nicht zu viele Fehler drin. Einfach mal ausprobieren und schauen, ob es klappt. Falls irgendetwas unklar sein sollte, frag ruhig! :) LG Hippo
Asoraso Asoraso

2014/8/30

#
Danke, werde es ausprobieren sobald ich Zeit habe.
You need to login to post a reply.