Erste Schritte JavaKara Labyrinth

JimPanse24

Mitglied
hallo,

ich muss mich von der schule aus meinem ersten kleinen Programm widmen! Doch leider klappt es irgendwie nicht! Hab schon gestern den ganzen Mittag dran rumgebastelt, aber es läuft einfach nicht wie ich es will!
Es geht drum, dass bei JavaKara der Käfer durch ein Labyrinth aus Bäumen (1 Feld breit) läuft und dabei vereinzelt Blätter aufsammelt.
Ich zeig euch mal meinen Code, der auch funktioniert! Allerdings muss man immer das Labyrinth zuerst haben und die Richtungswechsel zählen und dementsprechend oft folgenden Code einfügen! Also bei 3 Ricktungswechseln besteht das Programm aus 3 Mal dem dolgenden Abschnitt:

Java:
public class FindeBaumSS extends JavaKaraProgram {


 public void myProgram() {
    
    
    while (!kara.treeFront()) {
      kara.move();
      
      if (kara.onLeaf())
        kara.removeLeaf();
      }
     
     if (kara.treeFront()){
        kara.turnLeft();
    }
    
   if (kara.treeFront()){
      kara.turnRight();
      kara.turnRight();
     }
    
  while (!kara.treeFront()) {
      kara.move();
      
      if (kara.onLeaf())
        kara.removeLeaf();
  }
  
  }
}

Was muss ich ändern, damit der Käfer jedes beliebige Labyrinth durchläuft und ich nicht x- Mal den oben stehenden Code kopieren muss?
Wäre super nett, wenn heute noch jemand antworten würde, da ich es morgen schon brauche!

Danke
 

Final_Striker

Top Contributor
Man kann identische Codeabschnitte die oft gebraucht werden in eigene Methode auslagern und diese Methode an der benötigten Stelle ausführen.

Java:
public void methode1(){
   // ... anderer Code
   methode2(); // Methode 2 ausführen
   // ... anderer Code
}

public void methode2(){
   //... tu was
}
 
Zuletzt bearbeitet:

JimPanse24

Mitglied
Danke Final-Striker für deine schnelle Antwort!
Leider kann ich dir nicht ganz folgen!

Verstehe ich das richtig, dass ich zunächst zwei Methoden definieren muss und die dnan immer mit public void aufrufen kann?
Also so zum Beispiel:

Java:
public void Laufen+Fressen() {
  
    while (!kara.treeFront()) {
      kara.move();
      
      if (kara.onLeaf())
        kara.removeLeaf();
      }

public void Weg finden() {
     
     if (kara.treeFront()){
        kara.turnLeft();
    }
    
   if (kara.treeFront()){
      kara.turnRight();
      kara.turnRight();
     }
.
.
.
.
    }
}

Sorry falls ich mich zu doof anstelle, aber ich mache sowas zum ersten Mal!

MfG
 

JimPanse24

Mitglied
Das glaub ich dir! Aber wie?

So wie es oben steht, geht es nicht!

Könntest bitte die paar Zeilen Code mal posten? Das hast du doch sicher in 1min!?
Kara soll einfach durch das Labyrinth gehen und dabei Blätter fressen!

Ich wäre dir sehr dankbar!

MfG
 

Final_Striker

Top Contributor
Du darfst natürlich keine Leer- oder Sonderzeichen in dem Methodennamen verwenden.

Versuche dein Problem/Ablauf zuerst mit Worten zu formulieren (laufe bis..., wenn ... dann...) und es dann mit Hilfe dir gegebener Methoden umzusetzen.
 

JimPanse24

Mitglied
Beim kompilieren kommt leider immer die Meldung "illegal start of expression" :bahnhof:

Im Prinzip habe ich es ja schon umgesetzt, nur ziemlich unschön und wahrscheinlich auch nicht ganz richtig! Ich muss mein Programm je nach Labyrinth zuerst anpassen, brauch aber eins, dass jedes x-Beliebige Labyrinth sofort durchläuft!

Mit einem "while" geht es nicht, da irgendwann eine Bedingung nicht mehr erfüllt ist und dann springt er wieder raus.

Beispiel:

Java:
public void myProgram() {
   
   while (!kara.treeFront()) {
      kara.move();
      
      if (kara.onLeaf())
        kara.removeLeaf();
      }
     
     }

Er "springt raus", sobald Kara vor dem ersten Baum steht!

und folgendes geht ja nicht:

Java:
public void myProgram() {
   
   while (!kara.treeFront() || kara.treeFront()) {
      kara.move();
    .
    .
    .
    .
      }
     
     }

Wie bekomm ich es hin, dass er aus dem "while" nie rausspringt und es immer wiederholt? Somit müsste ich nicht x-Mal mein if(dasunddas), while(dasunddas) wiederholen :bahnhof:
 
F

Firephoenix

Gast
Dein Ziel ist es ja alle Blätter zu finden.
also sollte die schleife so lange laufen wie es blätter auf der Karte gibt.
Ansonsten ist die Frage, wie das Labyrinth aufgebaut ist?
Ein echtes Labyrinth hat nur einen Weg dem man folgen kann indem man an der rechten/linken Wand entlangläuft, ein Irrgarten mit Inseln oder breiteren Wegen wäre schon deutlich kniffeliger ;)
Gruß
 

JimPanse24

Mitglied
Es gibt nur einen Weg, der genau 1 Feld breit ist! Vereienzelt liegen Blätte rum, die Kara auffressen soll! Steht übrigends ganz oben ;)

Die Schleife sollte immer immer erfüllt sein, also entweder "!kara.treeFront" oder "kara.treeFront() && kara.treeLeft()" oder "kara.treeFront() && kara.treeRight()"!
Aber wie soll ich das hinbekommen?

Gruß
 

Mofi

Bekanntes Mitglied
Gibt es in diesem Labyrinth einen fest vordefinierten Endpunkt? Oder wie funktioniert das Labyrinth genau. Ich mein der Käfer muss ja wissen wan Ende ist? (Wann istg denn Ende? Ich kenne diesen Käfer nicht)
Wenn es genaue Endbedingungen gibt (z.B. wenn er auf ein bestimmtes Feld kommt oder, eine bestimmte Anzahl von Blättern sammeln), wenn lässt du halt eine while Schleife solange laufen bis diese Endbedingungen erfüllt sind. Das hat ja mit den Bäumen nun nur bedingt was zu tun :)
 

Mofi

Bekanntes Mitglied
Woher sollen wir wissen ob es geht?!
Nein mal ernsthaft, wenn du auf Blätter und Bäume testen kannst, wirst du doch auch irgendwie auf den Pilz testen können? (Wäre ansonsten sehr unlogisch)
Ich kenne diesen Käfer nicht und weiß daher weder wie man in steuert noch wie man irgendwas testet noch wie so ein Labyrinth eigentlich aussieht.

ABER es müsste im Endeffekt nunmal so sein: Du willst das dein Käfer (scheinbar) solange läuft bis er auf einen Pilz landet, richtig soweit? Dann brauchst du eben eine Schleife die deinen Käfer solange laufen lässt bis er auf einen Pilz trifft. Das der Käfer dann wohl auch auf Hindernisse achten muss, sollte dann auch eingebaut werden.


Ganz am Anfang musst du dir bei sowas halt überlegen "Wie lange soll diese Schleife laufen" und dann überlegst du wie du diese Schleife halt programmierst damit du dies erreichst.

Das hab ich zu deinem Käfer gefunden: http://www.swisseduc.ch/informatik/karatojava/javakara/docs/javakara_manual.pdf

Da steht auch irgendwas von einem Pilz.
 

Gossi

Bekanntes Mitglied
Du müsstest dann eigentlich sowas haben:

Code:
Solange wie der Pilz nicht gefunden wurde {
    stehe ich auf dem Pilz {
        Pilz aufnehmen;
        Spiel beenden;
    }    
    stehe ich auf einem Blatt {
        blatt aufnehmen;
    }
    ist vor mir ein Baum {
        ist rechts ein Baum {
            links gehen;
        }
        ist links ein Baum {
            rechts gehen;
        }
    } sonst {
        geradeaus gehen;
    }
}

Achtung, das is Pseudo-Code, da wird der Compiler mehr als nur einen fehler schmeißen :D
 
F

Firephoenix

Gast
Und wenn kara mit dem Code in eine Sackgasse läuft haut er sich den Kopf an ;)

wenn man bis zum Pilz laufen soll kann man aber sowas machen:
Java:
while(!kara.mushroomFront()){
//Sammeln
//Laufen
}

Das Laufen im Labyrinth an der rechten/linken Wand kann man dann irgendwie machen - z.b. indem man einen einfachen Zustandsautomat implementiert (kara hat sowas glaube ich auch schon intern - also ein System für Automaten, nicht für Laufen in Labyrinthen).
Gruß
 

JimPanse24

Mitglied
@Mofi
Was glaubst du wie oft ich mir das ganze schon durch den Kopf habe gehen lassen :rtfm:
Aussehen könnte das Labyrinth zum Beispiel so: Directupload.net - Dfn8ncdqo.jpg

@Gossi
ich hab es jetzt mal ungefähr so gemacht wie du gesagt hast! aber das geht nicht! sobald er vor dem ersten Baum steht ist Ende!

Java:
public class bla extends JavaKaraProgram {

  public void myProgram() {
   
    while (!kara.treeFront() && !kara.mushroomFront()) {
      kara.move();
      
      if (kara.onLeaf())
        kara.removeLeaf();
        
        if (kara.treeFront() && kara.treeLeft())
          kara.turnRight();
          
          if (kara.treeFront() && kara.treeRight())
            kara.turnLeft();
    }
  }
}

Gruß
 

Mofi

Bekanntes Mitglied
Java:
while (!kara.treeFront() && !kara.mushroomFront())
Dreh mal die Bedingung um also:
Java:
while (!kara.mushroomFront() && !kara.treeFront() && )

Funktionierts dann besser? :)
Bei der Programmierung gibt es (leider) so etwas wie "lazy evaluation" Kannst mal danach googlen.
Aber kurz gesagt bedeutet dieses lazy evaluation, dass deine Schleife genau dann unterbrochen wird sobald
Code:
!kara.treeFront() &&
false ergíbt. (Ergibt der erste Ausdruck schon false wird der zweite nicht getestet, da es nichts mehr zur sache tut)

Aber kann es sein, dass du entweder daraus zwei schleifen machen solltest oder das || für oder benutzen solltest?

(Ja ich hab mich am Ende selbst verwirrt und kann auch gleich nach Hause gehen, also nicht mehr so viel Zeit)

Edit:
pfft heißt das ich hätte mir diesen Post sparen können? :p
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S JavaKara Null Exception Error Java Basics - Anfänger-Themen 4
L In Javakara Palindrom erkennen. Java Basics - Anfänger-Themen 9
B JavaKara rekursiven Teppich erstellen??? Java Basics - Anfänger-Themen 5
F JavaKara - Rückgabetyp java.awt.Point Java Basics - Anfänger-Themen 2
L JavaKara Pyramide Java Basics - Anfänger-Themen 17
J JavaKara RandomWalk Java Basics - Anfänger-Themen 6
L Klassen Anfänger braucht Hilfe! Probleme mit Javakara.jar Java Basics - Anfänger-Themen 25
N Frage zu JavaKara Java Basics - Anfänger-Themen 6
I Javakara Java Basics - Anfänger-Themen 3
K JavaKara Programm - erfolgreich compiliert jedoch kein Start Java Basics - Anfänger-Themen 12
J [JavaKara] '.' expected import JavaKaraProgram Java Basics - Anfänger-Themen 2
D JavaKara Java Basics - Anfänger-Themen 14
Fats Waller Wofür stehen diese Konstanten im Java Labyrinth ? Java Basics - Anfänger-Themen 5
MichelNeedhelp Brauche zu diesem Labyrinth ein Skript? Der Hamster soll im Urzeigersinn das ganze Labyrinth abgehen und wieder an seinem Ursprungsplatz sein. Java Basics - Anfänger-Themen 40
I Labyrinth auf der Basis eines rekursiven Algorithmus Java Basics - Anfänger-Themen 27
O Labyrinth Algorithmus Java Basics - Anfänger-Themen 3
Z Erste Schritte Versuche ein Labyrinth in einem Terminal zu erstellen, aber kann die properties Datei nicht einlesen Java Basics - Anfänger-Themen 3
N Backtracking - Labyrinth/Irrgarten Java Basics - Anfänger-Themen 14
D Frage zum Labyrinth Java Basics - Anfänger-Themen 3
P Labyrinth, Backtracking, verzögerte Anzeige Java Basics - Anfänger-Themen 15
S Labyrinth erstellen Java Basics - Anfänger-Themen 4
B Frage zu Labyrinth Java Basics - Anfänger-Themen 7
H Labyrinth kürzester Weg Java Basics - Anfänger-Themen 8
J Bewegen durch das Labyrinth Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben