graphen:breitensuche:lee:start
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
graphen:breitensuche:lee:start [2023/10/23 07:25] – Martin Pabst | graphen:breitensuche:lee:start [2023/10/23 09:24] (aktuell) – Martin Pabst | ||
---|---|---|---|
Zeile 8: | Zeile 8: | ||
{{ : | {{ : | ||
+ | |||
+ | Jetzt muss die Biene nur noch in absteigender Reihenfolge den Zahlen folgen um zum Diamanten zu finden. | ||
+ | |||
+ | <WRAP center round tip 80%> | ||
+ | Haben Sie gestutzt, als Sie gelesen haben, dass wir die Breitensuche beim Diamanten und nicht bei der Biene beginnen? Welches Problem würde entstehen, wenn wir bei der Biene beginnen? | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | new World(1600, 640); | ||
+ | new Level(); | ||
+ | |||
+ | class Level extends Actor { | ||
+ | |||
+ | | ||
+ | |||
+ | Figur biene; | ||
+ | Figur diamant; | ||
+ | |||
+ | int spaltenAnzahl; | ||
+ | int zeilenAnzahl; | ||
+ | |||
+ | int t = 0; | ||
+ | |||
+ | |||
+ | | ||
+ | levelAufbauen(); | ||
+ | diamant = new Figur(23, 1, 186); | ||
+ | biene = new Figur(5, 3, 264); | ||
+ | felderBewerten(); | ||
+ | | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * Die Methode felderBewerten() wird vom Programm zu Beginn aufgerufen. Sie soll | ||
+ | * via felder[spalte][zeile].setEntfernung(int e) in jedem Feld die Entfernung | ||
+ | * zum Diamanten speichern. | ||
+ | * * | ||
+ | * istWand(spalte, | ||
+ | * biene.geheZu(spalte, | ||
+ | * biene.spalte, | ||
+ | * felder[spalte][zeile].setEntfernung(int e) können Sie benutzen, um jedem Feld einen Wert zuzuweisen. | ||
+ | * | ||
+ | */ | ||
+ | void felderBewerten() { | ||
+ | |||
+ | for (int spalte = 0; spalte < spaltenAnzahl; | ||
+ | for (int zeile = 0; zeile < zeilenAnzahl; | ||
+ | felder[spalte][zeile].setEntfernung(-1); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // Breitensuche vom Feld des Diamanten aus | ||
+ | LinkedList< | ||
+ | Block aktuellesFeld = felder[diamant.spalte][diamant.zeile]; | ||
+ | warteschlange.addLast(felder[diamant.spalte][diamant.zeile]); | ||
+ | aktuellesFeld.setEntfernung(0); | ||
+ | |||
+ | while (!warteschlange.isEmpty()) { | ||
+ | | ||
+ | int aktuelleEntfernung = aktuellesFeld.getEntfernung(); | ||
+ | |||
+ | // linkes Nachbarfeld: | ||
+ | | ||
+ | Block linkerNachbar = felder[aktuellesFeld.spalte - 1][aktuellesFeld.zeile]; | ||
+ | if(!linkerNachbar.istWand() && linkerNachbar.getEntfernung() < 0) { | ||
+ | | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // rechtes Nachbarfeld: | ||
+ | | ||
+ | Block rechterNachbar = felder[aktuellesFeld.spalte + 1][aktuellesFeld.zeile]; | ||
+ | if(!rechterNachbar.istWand() && rechterNachbar.getEntfernung() < 0) { | ||
+ | | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // oberes Nachbarfeld: | ||
+ | | ||
+ | Block obererNachbar = felder[aktuellesFeld.spalte][aktuellesFeld.zeile - 1]; | ||
+ | if(!obererNachbar.istWand() && obererNachbar.getEntfernung() < 0) { | ||
+ | | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // unteres Nachbarfeld: | ||
+ | | ||
+ | Block linkerNachbar = felder[aktuellesFeld.spalte][aktuellesFeld.zeile + 1]; | ||
+ | if(!linkerNachbar.istWand() && linkerNachbar.getEntfernung() < 0) { | ||
+ | | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | } | ||
+ | |||
+ | void schritt() { | ||
+ | if(biene.spalte == diamant.spalte && biene.zeile == diamant.zeile) { | ||
+ | | ||
+ | } | ||
+ | |||
+ | |||
+ | // Bei allen Feldern ist jetzt der Abstand zum Diamanten hinterlegt. Wir suchen jetzt ein | ||
+ | // Nachbarfeld der Biene, das einen um eins geringeren Abstand hat als das Feld der Biene. | ||
+ | |||
+ | Block bienenfeld = felder[biene.spalte][biene.zeile]; | ||
+ | int bienenAbstand = bienenfeld.getEntfernung(); | ||
+ | |||
+ | if(felder[bienenfeld.spalte - 1][bienenfeld.zeile].getEntfernung() == bienenAbstand - 1) { | ||
+ | | ||
+ | } else | ||
+ | if(felder[bienenfeld.spalte + 1][bienenfeld.zeile].getEntfernung() == bienenAbstand - 1) { | ||
+ | | ||
+ | } else | ||
+ | if(felder[bienenfeld.spalte][bienenfeld.zeile - 1].getEntfernung() == bienenAbstand - 1) { | ||
+ | | ||
+ | } else | ||
+ | if(felder[bienenfeld.spalte][bienenfeld.zeile + 1].getEntfernung() == bienenAbstand - 1) { | ||
+ | | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | | ||
+ | t++; | ||
+ | if(t == 30) { | ||
+ | t = 0; | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | |||
+ | | ||
+ | return felder[spalte][zeile].istWand(); | ||
+ | } | ||
+ | |||
+ | |||
+ | void levelAufbauen() { | ||
+ | String level = """ | ||
+ | wwwwwwwwwwwwwwwwwwwwwwwww | ||
+ | w w w | ||
+ | w | ||
+ | w | ||
+ | wwwwwww | ||
+ | w w w | ||
+ | w w | ||
+ | w w w | ||
+ | wwwwwwwwwwwwwwwwwwwwwwwww | ||
+ | """; | ||
+ | |||
+ | String[] lines = level.split(" | ||
+ | | ||
+ | zeilenAnzahl = lines.length; | ||
+ | spaltenAnzahl = lines[0].length(); | ||
+ | | ||
+ | felder = new Block[spaltenAnzahl][zeilenAnzahl]; | ||
+ | |||
+ | for (int zeile = 0; zeile < zeilenAnzahl; | ||
+ | | ||
+ | for (int spalte = 0; spalte < spaltenAnzahl; | ||
+ | char buchstabe = line.charAt(spalte); | ||
+ | felder[spalte][zeile] = new Block(spalte, | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | <script type=" | ||
+ | class Block extends Sprite { | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | int spalte; | ||
+ | int zeile; | ||
+ | |||
+ | | ||
+ | super(32 + 64 * spalte, 32 + 64 * zeile, SpriteLibrary.Plattforms, | ||
+ | |||
+ | this.art = art; | ||
+ | this.spalte = spalte; | ||
+ | this.zeile = zeile; | ||
+ | |||
+ | if(art == " | ||
+ | | ||
+ | } | ||
+ | |||
+ | this.entfernungsText = new Text(16 + 64 * spalte, 16 + 64 * zeile, 32, "" | ||
+ | this.entfernungsText.setFillColor(Color.black); | ||
+ | } | ||
+ | |||
+ | | ||
+ | return art == " | ||
+ | } | ||
+ | |||
+ | void setEntfernung(int entfernung) { | ||
+ | this.entfernung = entfernung; | ||
+ | this.entfernungsText.setText(entfernung); | ||
+ | } | ||
+ | |||
+ | int getEntfernung() { | ||
+ | return entfernung; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | <script type=" | ||
+ | class Figur extends Sprite { | ||
+ | |||
+ | int spalte; | ||
+ | int zeile; | ||
+ | |||
+ | | ||
+ | super(32 + 64 * spalte, 32 + 64 * zeile, SpriteLibrary.Plattforms, | ||
+ | this.spalte = spalte; | ||
+ | this.zeile = zeile; | ||
+ | } | ||
+ | |||
+ | | ||
+ | moveTo(32 + 64 * spalte, 32 + 64 * zeile); | ||
+ | this.spalte = spalte; | ||
+ | this.zeile = zeile; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | </ | ||
+ | </ | ||
+ |
graphen/breitensuche/lee/start.1698045937.txt.gz · Zuletzt geändert: 2023/10/23 07:25 von Martin Pabst