Skip to main content

Lektion 2: Wenn/Andernfalls bedingte Aussagen

In dieser Lektion erstellen Sie ein Projekt, bei dem der VR-Roboter mindestens zwei Gebäude auf dem Dynamic Castle Crasher Playground umstößt. Ein Algorithmus wird benötigt, um die Herausforderung mithilfe von Schleifen und Sensor-Feedback zu lösen, da sich das Playground-Layout mit jedem Reset ändert.

Beispiele für Dynamic Castle Crasher Spielplatz-Layouts:

Drei Draufsichten auf Musterlayouts des Dynamic Castle Crasher Playground mit dem Roboter in der gleichen Ausgangsposition und Schlössern in verschiedenen Positionen. Die Layouts sind nebeneinander angeordnet, um zu betonen, wie die Schlösser bei jedem Zurücksetzen des Spielplatzes ihre Position ändern.

Lernergebnisse

  • Identifizieren Sie, dass ein [If then else] -Block ein C-Block ist, der die Blöcke entweder innerhalb des If- oder des Else-Zweigs basierend auf dem gemeldeten Booleschen Wert ausführt.
  • Identifizieren Sie, dass ein [If then else] -Block normalerweise mit einem [Repeat] - oder einem [Forever] -Block verwendet wird, um die Bedingung mehr als einmal zu überprüfen.
  • Identifizieren und beschreiben Sie, warum ein [If then else] -Block mit Schleifen verwendet wird.
  • Beschreiben Sie, was dazu führen würde, dass eine [If then else] -Zweigstelle in einem Projekt ausgeführt wird.

So verwenden Sie einen [If then else] -Block

Diese Herausforderung unterscheidet sich von der Castle Crasher-Herausforderung in Einheit 2. Die Einheit 2-Herausforderung verwendete einfache Sequenzierungs- und Antriebsbefehle, um die Gebäude auf einem statischen Spielplatz umzustoßen.

Ein Beispiel-VEXcode-VR-Projekt aus Einheit 2. Das Projekt beginnt mit einem Beim Start-Block und hat 6 angehängte Blöcke. Die Blöcke lesen in der Reihenfolge Antriebsgeschwindigkeit auf 100 % einstellen; Drehgeschwindigkeit auf 100 % einstellen; 1550 mm vorwärts fahren; 180 Grad rechts abbiegen; 700 mm vorwärts fahren; dann 90 Grad rechts abbiegen.

Die Befehle des Antriebsstrangs allein reichen aufgrund der sich ändernden Layouts des Dynamic Castle Crasher Playground nicht aus, um den VR-Roboter dazu zu bringen, zwei oder mehr Gebäude niederzureißen. Eine Reihe von Antriebsbefehlen kann auf einem Spielplatz funktionieren, aber nicht auf einem anderen. Es wird ein Algorithmus benötigt, der Sensoren und Auswahl verwendet. Der Block [If then else] wird verwendet, um einen Algorithmus zu erstellen, indem diesem Projekt eine Auswahl mit bedingten Anweisungen hinzugefügt wird.

Eine Draufsicht auf den Dynamic Castle Crasher Playground mit nur einigen umgestürzten und anderen unberührten Schlössern, um zu veranschaulichen, wie die Befehle des Antriebsstrangs allein unzureichend sind, wenn sich die Position der Schlösser zufällig ändert.

Es gibt zwei Hauptschritte für den VR-Roboter, um Gebäude auf dem Dynamic Castle Crasher Playground umzustoßen.

  1. Wenn der VR-Roboter ein Schlossgebäude erkennt, fahren Sie nach vorne, um es umzustoßen.
    1. Im Gegensatz zu jedem anderen Spielplatz hat der Dynamic Castle Crasher Playground keine Wände. Da die Gebäude die einzigen Objekte auf dem Dynamic Castle Crasher Playground sind, kann der Abstandssensor verwendet werden, um Gebäude zu erkennen.

      Eine Draufsicht auf den Dynamic Castle Crasher Playground mit dem Roboter in der Ausgangsposition, in der unteren Mitte des Layouts, wobei ein gepunkteter Pfeil auf eine Burg direkt vor dem Roboter zeigt, die in einem roten Kästchen hervorgehoben ist. Der Pfeil zeigt an, dass der Sensor das Schloss als Objekt vor sich erkennen kann.
  2. Wenn der VR-Roboter kein Schlossgebäude erkennt, drehen Sie sich um und suchen Sie erneut nach einem Schlossgebäude.
    1. Da die Gebäude die einzigen Objekte auf dem Dynamic Castle Crasher Playground sind, kann der Abstandssensor verwendet werden, um Schlossgebäude zu erkennen.

      Eine Draufsicht auf den Dynamic Castle Crasher Playground, mit dem Roboter in der Ausgangsposition und gekrümmten Pfeilen auf beiden Seiten, was auf die Notwendigkeit hinweist, sich zu drehen, bis ein Schlossobjekt erkannt wird.

Sobald die Schritte 1 und 2 abgeschlossen sind, kann der VR-Roboter zu Schritt 1 zurückkehren und den Abstandssensor verwenden, um das nächste Gebäude zum Umstürzen zu finden.

  • Starten Sie ein neues Projekt in VEXcode VR und benennen Sie das Projekt Unit9Lesson2.

    Das Feld Projektname in der Mitte der VEXcode VR-Symbolleiste wird durch ein rotes Feld links neben der Schaltfläche Playground auswählen hervorgehoben. Der Projektname lautet Einheit 9 Lektion 2.
  • Fügen Sie zwei [Comment] -Blöcke in den Arbeitsbereich ein und füllen Sie die oben beschriebenen Schritte aus.

    Ein neues VEXcode VR-Projekt mit zwei Kommentarblöcken, die an den Block Beim Start angehängt sind. Die Kommentare lasen sich in der richtigen Reihenfolge: Klopfen Sie mit dem Abstandssensor über das gefundene Gebäude; und drehen Sie sich um, um mit dem Abstandssensor ein Gebäude zu finden.
  • Ein [If then else] -Block kann verwendet werden, um jede der oben beschriebenen Aktionen auszulösen. Jede Aktion hängt davon ab, ob die boolesche Bedingung im Block [If then else] TRUE oder FALSE meldet. Fügen Sie einen [If then else] -Block unter den [Comment] -Blöcken hinzu.

    Das gleiche VEXcode VR-Projekt mit einem If then else-Block, der unter dem zweiten Kommentar angehängt ist. Der Parameter des Zweigs If wird offen gelassen.

    Zur Kenntnisnahme

    Der [If then else] -Block ist ein C-Block, der Boolesche Reporter-Blöcke als Eingabe akzeptiert. Der Block [If then else] ist eine bedingte Anweisung, die den Ablauf eines Projekts steuert. Der [If then else] -Block führt eine bestimmte Anweisungssequenz aus, wenn die Bedingung erfüllt ist, und einen anderen Satz von Anweisungen, wenn die Bedingung NICHT erfüllt ist, wodurch der Projektablauf "verzweigt" wird. Es wird nur ein Branch im [If then else] ausgeführt.

    Ein If then else-Block aus der VEXcode VR Toolbox.
    • Wenn die Bedingung als WAHR gemeldet wird, werden die Blöcke im If Then-Zweig ausgeführt.
    • Wenn die Bedingung als FALSCH gemeldet wird, werden die Blöcke innerhalb des Else-Zweigs ausgeführt.
    Ein VEXcode VR-Projekt wird verwendet, um die Funktion jedes Zweigs des If then else-Blocks zu veranschaulichen. In diesem Projekt wird der If then else-Block an einen When started angehängt und lautet: If Front Distance found a object, then Comment - Knock over the building found using the Distance Sensor and drive forward; Else, Turn to find a building using the Distance Sensor, and Turn right. Der Zweig "Wenn dann" wird als Vorwärtsfahrt bezeichnet, wenn der Abstandssensor ein Objekt erkennt. Der Zweig "Else" wird als Rechts abbiegen bezeichnet, wenn der Abstandssensor kein Objekt erkennt.

    Sobald alle Blöcke in einem der Zweige ausgeführt wurden, wird das Projekt zum nächsten Block außerhalb des [Wenn dann sonst] -Blocks weitergeleitet.

  • In diesem Projekt kann der Abstandssensor verwendet werden, um Gebäude auf dem Spielplatz zu erkennen. Fügen Sie einen <Distance found object> Block zum [If then else] -Block hinzu.

    Das gleiche VEXcode VR-Projekt von zuvor, mit einem gefundenen Entfernungsobjektblock als Parameter des Zweigs Wenn dann. Der Block If then liest nun If Front Distance found a object then.

    Zur Kenntnisnahme

    Der <Distance found object> Block ist ein boolescher Reporterblock, der meldet, ob der Abstandssensor ein Objekt vor dem VR-Roboter gefunden hat. Dieser Block meldet WAHR, wenn sich ein Objekt oder eine Oberfläche innerhalb von 3000 Millimetern (mm) vom VR-Roboter befindet.

    Entfernung gefundenes Objekt VEXcode VR-Block von der Toolbox, die Front Distance liest, wurde ein Objekt gefunden?
  • Nun muss jeder Zweig des [If then else] -Blocks mit den zu Beginn des Projekts erstellten Kommentaren definiert werden. Wenn der <Distance found object> Block TRUE meldet, sollte der VR-Roboter auf dieses Gebäude zufahren, um es umzustoßen. Verschieben Sie diesen [Kommentar] -Block in den Zweig "Wenn dann" des Projekts.

    Das gleiche VEXcode VR-Projekt mit dem ersten Kommentar wurde in das C des Zweigs Wenn dann verschoben. Das Projekt liest jetzt When Started, If Front Distance found a object, then Knock over the building found using the Distance Sensor.
  • Verschieben Sie den anderen [Comment] -Block in den Zweig "Else" des Projekts, um zu erfahren, was passieren sollte, wenn der VR-ROBOTER kein Gebäude erkennt.

    Das gleiche VEXcode VR-Projekt mit dem zweiten Kommentar im C des Else Zweigs. Das Projekt liest jetzt Wenn gestartet, wenn der vordere Abstand ein Objekt gefunden hat, dann klopfen Sie das gefundene Gebäude mit dem Abstandssensor um. Andernfalls drehen Sie, um ein Gebäude mit dem Abstandssensor zu finden.
  • Fügen Sie einen [Drive] -Block in den Zweig "If Then" des [If then else] -Blocks ein.

    Das gleiche VEXcode VR-Projekt mit einem Drive-Block, der unter dem ersten Kommentar im Zweig If then auf Weiterleiten eingestellt ist. Der Zweig If then liest nun: If Front Distance found a object, then Comment Knock over the building found using the Distance sensor; Drive forward.
  • Wenn der <Distance found object> Block FALSCH meldet, muss sich der VR-Roboter umdrehen und ein Gebäude auf dem Spielplatz finden. Fügen Sie einen [Turn] -Block unter dem [Comment] -Block im Zweig "Else" des [If then else] -Blocks hinzu.

    Das gleiche VEXcode VR-Projekt mit einem Turn-Block rechts unter dem zweiten Kommentar im Else-Zweig. Der Else-Zweig liest nun, Else, Kommentar des Zuges, um ein Gebäude mit dem Abstandssensor zu finden; dann biegen Sie rechts ab.
  • Bevor das Projekt getestet wird, muss ein weiterer Block hinzugefügt werden. [If then else] -Blöcke überprüfen den Zustand nur einmal, bevor sie zum nächsten Block im Stapel wechseln. In Einheit 7 wurde dem Projekt ein [Forever] -Block hinzugefügt, um den VR-Roboter anzuweisen, den Zustand des Down Eye Sensors wiederholt zu überprüfen. Um sicherzustellen, dass die Bedingung des Abstandssensors wiederholt überprüft wird, ziehen Sie einen [Forever] -Block in den Arbeitsbereich um den [If then else] -Block.

    Eine Übersicht darüber, wie man dem Projekt einen Forever-Block hinzufügt, damit sich die Gesamtheit des If then else-Blocks im C des Forever-Blocks befindet. Das Projekt liest nun When started, Forever, If Front distance found an object then drive forward; else turn right.
  • Öffne den Dynamic Castle Crasher Playground und führe das Projekt aus.

    Ein Blick von oben auf den Castle Crasher Playground mit drei intakten Burgen und zwei umgestürzten Burggebäuden. Der Roboter befindet sich in der oberen rechten Ecke neben einem umgestürzten Schloss.
  • Sobald der VR-Roboter mindestens zwei Gebäude umgeworfen hat, laden Sie den Spielplatz neu und führen Sie das Projekt auf einem anderen Layout des Dynamic Castle Crasher Playground aus.

    Ein Blick von oben auf den Castle Crasher Playground mit drei intakten Burgen und zwei umgestürzten Burggebäuden. Der Roboter befindet sich in der oberen rechten Ecke neben einem umgestürzten Schloss.
  • Bei jedem Durchlauf des Projekts dreht sich der VR-Roboter, bis ein Gebäude vom Abstandssensor erkannt wird, und fährt dann auf dieses Gebäude zu, um es umzustoßen.

    Eine Seitenansicht des VR-Roboters, der ein Burgstück von der Seite des Spielplatzes schiebt, aber der Roboter fängt an, auf die Grenze des Spielplatzes zu fahren, als würde er auch von der Kante fallen.
  • Während des Projektlaufs kann der VR-Roboter ein Gebäudeteil bis an den Rand schieben und vom Spielplatz fallen. Dies liegt daran, dass der <Distance found object> Block immer noch meldet, dass sich ein Objekt vor dem VR-Roboter befindet. Wenn dieser Block TRUE meldet, fährt der VR-Roboter vorwärts. Der VR-Roboter fällt vom Tisch.

Wählen Sie die Schaltfläche Weiter um mit dem Rest dieser Lektion fortzufahren.