Du hast bereits sehr häufig mit vordefinierten Bedingungen, wie NichtIstWand oder IstSüden gearbeitet. Die komplette Palette aller vordefinierten Bedingungen - wie sie rechts abgebildet ist - kann bei RobotKarol im Übersichtsbereich eingesehen werden.
Zur Erinnerung: Eine Bedingung liefert entweder Wahr oder Falsch.
Die Bedingung IstSüden liefert entweder Wahr oder Falsch.
Wahr: Karol blickt Richtung Süden. Falsch: Karol blickt nicht Richtung Süden
Ein Programmtext um Karol - egal in welche Richtung er gerade blickt - nach Süden schauen zu lassen könnte wie folgt aussehen:
|
|
wiederhole solange NichtIstSüden LinksDrehen *wiederhole
|
|
Wie Du Dir sicher schon gedacht hast, funktioniert das Programm leider nicht: RobotKarol kennt die Bedingung NichtIstSüden nicht.
Glücklicherweise kann man RobotKarol neben eigenen Methoden auch eigene Bedingungen beibringen. Dabei greift man natürlich auf vorhandene/vordefinierte Bedingungen zurück:
Zunächst überlegt man sich, in welchem Fall wahr und wann falsch geliefert werden muss. In unserem Fall muss wie folgt sein:
NichtIstSüden liefert
Falsch, falls Karol nach Süden blickt, Wahr, falls nicht Richtung Süden blickt - also in alle sonstigen Richtungen.
Der zugehörige Programmtext dafür schaut also wie folgt aus:
|
|
Bedingung NichtIstSüden wenn IstSüden dann falsch sonst wahr *wenn *Bedingung
|
|
Wie bei den eigenen Anweisungen/Methoden, reicht es eine eigene Bedingung ganz am Anfang des Programmtextes zu definieren, um sie dann später immer wieder verwenden zu können.
Nachfolgend ist der komplette Programmtext für unser Anfangsproblem zu finden; Karol soll sich nach Süden drehen, egal in welche Richtung er im Moment schaut:
|
|
// Zunächst wird die eigene Bedingung // NichIstSüden festgelegt
Bedingung NichtIstSüden wenn IstSüden dann falsch sonst wahr *wenn *Bedingung
// Nun beginnt das Hauptprogramm: // Karol dreht sich nach Süden, egal // in welche Richtung er gerade blickt
wiederhole solange NichtIstSüden LinksDrehen *wiederhole
|
|
Zuletzt geändert: Donnerstag, 19. Dezember 2013, 20:36