Lektion 3

Willkommen zu deiner AOZ Studio Lektion 3 – geschrieben von Neil John Ives.

Diese Lektion wird später mit Lektion 6 erweitert.

Klicke im Editor auf das Papier Symbol ganz links oben um ein neues Projekt anzulegen. Klicke auf Others im linken Menü und wähle Customizable AOZ Project aus, lösche den Eintrag „My Application“ und gebe dem neuen Projekt den Namen Lektion 3.

				
					#splashScreen:false
				
			

Dieser Befehl dient dazu das AOZ Logo beim Start deines Programms auszublenden.

Ändere „false“ zu „true“ wenn du das Logo anzeigen willst.
Funktioniert nicht in der kostenlosen AOZ Studio Version.

Diese Lektion wird neue Funktionen und Konzepte erklären:
Print, Locate, Paper, Pen, Centre,
Global, Input, Do Loop,
Prozeduren, Integer und String Variablen,
If Then, If End if,
Upper$, Cls, Ink, Bar,
Wait n, Wait Key,

Wir werden alles kennenlernen indem wir ein Spiel bauen.
Das Ziel des Spiels ist es, einen Fluss in einem sehr kleinen Boot mit einem Huhn, einem Fuchs und etwas Mais zu überqueren, ohne dass jemand gefressen wird!

Hinweis: In den folgenden Lektionen werden wir sehen wie wir dieses Puzzlespiel verbessern können. Wir werden grafische Texte , Bilder und Sound Samples einbauen.

Also los geht’s!

Print, Locate und Pen ————————–

Du kennst diese Befehle schon wenn du die Lektion 1 erledigt hast.
Locate wird zum positionieren des „Print“ Befehls benutzt.
Z.B.: Locate 1,12 Das bedeutet, 1 Textblock nach rechts und 12 Zeilen nach unten, gesehen von der linken oberen Ecke des Bildschirms. Pen stellt die Textfarbe ein.

Paper stellt die Hintergrundfarbe ein für den Text
z.B., Locate 1,12: Paper 11: Pen 1: Print „Hallo“
Das gibt den weißen Text Hallo auf einem grünen Hintergrund an der gewünschten Stelle 1, 12 aus

Centre weist das Programm an den Text in der Mitte des Bildschirms an der eingestellten Stelle auszugeben.

z.B., Locate 0, 10: Centre „Hallo Welt“

Variablen, (Integer und String)———————–

Du kennst diese Befehle schon ein wenig wenn du Lektion 1 erledigt hast.
Variablen werden verwendet um einen Wert zu speichern der variieren kann, daher der Name Variable. In diesem Programm werden einige Variablen verwendet um Zahlen zu speichern die dem Programm mitteilen wo der Text auf dem Bildschirm plaziert werden soll.

Diese Variablen speichern ganze Zahlen die als Integer bekannt sind, daher werden diese auch als Integer Variablen bezeichnet.
Die folgenden Integer-Variablen werden in diesem Programm verwendet:
mx, speichert die horizontale Position für den Text “Mann (M)”
fx, macht das gleiche für “Fuchs(F)”
hx, macht das gleiche für “Huhn (H)”
sx, macht das gleiche für “Sack Mais (S)”

Es gibt einen Unterschied zwischen einer Variablen, die einen Text speichert, und einer, die eine Zahl speichert.
Wenn eine Variable einen Text speichern soll, muss ihrem Namen ein Dollar-Symbol am Ende angefügt werden.
z.B., MeinName$ = „Francois“.

Hinweis: Zahlen können als Text oder reale Zahlen verwendet werden, Zum Beispiel ist eine Hausnummer normalerweise ein Text. Du wirst keine mathematische Operationen mit einer Hausnummer machen wie eine Hausnummer malnehmen oder addieren.

Um genauer zu sein, werden Buchstaben und Wörter in Computerprogrammen als „Strings“ bezeichnet

In diesem Programm sind WahlRechts$ und WahlLinks$ String-Variablen, sie enthalten den vom Benutzer eingegebenen Buchstaben, um das Huhn (H), den Fuchs (F) usw. auszuwählen.
Zum Beispiel AuswahlRechts$ = „H“

Einrichten des Programms——————————–

Hier werden die Startpositionen der anzuzeigenden Wörter festgelegt

Procedure———————————–

				
					mx=3 // Horizontale Position vom Mann
fx=3 // für den Fuchs
hx=3 // für das Huhn
sx=3 // für den Sack Mais
				
			

Prozeduren kann man sich als Programm-Module oder -Abschnitte vorstellen, wobei jede Prozedur einen bestimmten Zweck hat. Stelle dir Prozeduren als Bausteine vor.

Sie ermöglichen die Wiederverwendung von Codeabschnitten. Eine Prozedur kann getrennt vom Hauptprogramm erstellt und getestet werden.

Dies ist vor allem in größeren Programmen sehr nützlich.

Prozeduren können ausgeführt werden, indem sie von einem beliebigen Teil des Programms aus namentlich aufgerufen werden.

An Prozeduren können Parameter gesendet werden, um interne Berechnungen oder logische Entscheidungen zu ermöglichen.

In diesem Programm haben wir fünf Prozeduren erstellt: BILDSCHIRM, GEHERECHTS, GEHELINKS, PRUEFE und ZEIGEINFOS

Global————————–

Lasse uns nun ein weiteres komplexes Konzept diskutieren, die globalen Variablen. Wenn Du es nicht verstehst, keine Sorge.
„Global“ ermöglicht es, dass die daran angehängten Variablen in allen Teilen des Programms zu sehen sind, ansonsten sind sie lokal in der Prozedur.
Wir werden unsere Positionsvariablen global setzen, so dass sie überall außerhalb der Prozeduren verwendet werden können:

				
					Global mx,fx,hx,sx
				
			

If then Else Befehl———————————–

Eine nützliche Anweisung aus „If“ und „Then“ und „Else“, um einfache logische Entscheidungen zu treffen.
If (etwas ist wahr) Then (führt eine Aktion aus) Else (führt eine andere Aktion aus) z. B. If Highscore = 1000 then Print „Spieler hat gewonnen“ else Print „Leider verloren“
Hinweis: „Else“ ist nicht zwingend erforderlich, wie du weiter unten sehen wirst.

If End If Befehl———————————–

Ein If…Then Ausführen mehrerer Aktionen auf der Grundlage einer logischen Entscheidung:

Beispiel:
If Punkte = 1000
Lösche den Bildschirm
Gewinnbildschirm anzeigen
Spiele einen Sound
End (Beende das Spiel)
End if

Upper$ Befehl———————————–

Konvertiert eine Zeichenkette in dieselbe in allen Großbuchstaben.
Upper$(„francois“) würde in „FRANCOIS“ konvertiert werden. Zum Beispiel A$=Upper$(„francois“). In der Zeichenkette A$ finden wir dann „FRANCOIS“.

Cls Befehl———————————–

Lösche den Bildschirm. Standardmäßig wird der Bildschirm in der aktuellen Papierfarbe gelöscht.
Wenn eine Zahl hinzugefügt wird, wird der Bildschirm mit einer der aktuellen Palettenfarben geleert.

CLS 0: Löscht den Bildschirm mit der Farbe Schwarz
CLS 1: Löscht den Bildschirm mit der Farbe Weiß

Bar Befehl———————————–

Ein Bar (Balken) ist ein ausgefülltes Rechteck welches AOZ für dich zeichnet. z.B., Bar 1,1 to 100,100
Dies würde ein Rechteck zeichnen, bei dem die obere linke Ecke 1 Pixel vom linken Bildschirmrand und 1 Pixel von oben nach unten liegt
und die untere rechte Ecke bei 100 quer und 100 unten. Die Füllfarbe des Rechtecks würde mit dem Befehl „Ink“ festgelegt werden.

Wait n Befehl———————————–

Wie in Lektion 2 pausiert die Funktion Wait gefolgt von einer Zahl das Programm für eine bestimmte Zeit.
Die Zeit wird in Sekunden ausgedrückt und kann eine Fließkommazahl sein.

Wait 10, pausiert das Programm für 10 Sekunden
Wait 0.5, pausiert das Programm für eine halbe Sekunde
Wait 0.02, pausiert das Programm für 1/50 Sekunde
Dies kann nützlich sein, um einen dramatischen Effekt zu erzeugen, z. B. wenn das Huhn den Mais bekommt, dann bekommt der Fuchs das Huhn!

Wait Key Befehl———————————–

Hält das Programm an, bis der Benutzer eine beliebige Taste drückt.
In diesem Programm wird es verwendet, damit der Benutzer die Nachricht lesen und das Spiel neu starten kann

Do Loop Befehl———————————–

Der Do und Loop Befehl erzeugt eine Schleife, eine sich wiederholende Sequenz wie die Hauptprogrammschleife weiter unten.

Hier einige Erklärungen was du in der Schleife finden wirst:

Input stoppt das Programm um eine Frage zu stellen, die Antwort wird in einer Variablen gespeichert, du kennst das schon.
Zum Beispiel:
Input „Was soll er mit über den Fluss nehmen M,F,H,S ?“;AuswahlRechts$
Wenn der Mann links vom Fluss steht, (mx=3) wird die String Variable AuswahlRechts$ benutzt um den String der Prozedur GEHERECHTS zu übergeben.
Wenn der Mann rechts vom Fluss steht, (mx=60) wird die String Variable AuswahlLinks$ benutzt um den String der Prozedur GEHELINKS zu übergeben.
Wenn alle aus der Gruppe über dem Fluss sind, (position 60) ist das Puzzle gelöst und der Spieler sieht eine „Glückwunsch“ Nachricht.

Gut, vieles wurde bis jetzt erklärt. Lass uns das Spiel programmieren und wir starten mit unserer BILDSCHIRM Prozedur. Um sie zu erstellen schreiben wir einfach:“Procedure BILDSCHIRM“ und fügen Befehle hinzu und beenden sie indem wir „End Proc“ am Ende einfügen.
Um die Prozedur BILDSCHIRM zu benutzen müssen wir im Programm nur den Namen eingeben und die Befehle der Prozedur werden vom Programm verabeitet. Es ist einfacher mit einem Beispiel…

Start vom Hauptprogramm:

				
					BILDSCHIRM // Das fürt die BILDSCHIRM Prozedur aus die später programmiert wird 
Do 
If mx=3 // wenn der Mann auf der linken Seite vom Fluss ist
locate 1,11 // Setzte die Text Position auf die linke Seite
Input "Was soll er mit auf die andere Seite nehmen M,F,H,S?";AuswahlRechts$; // Wir benutzen Input um die Frage zu stellen und die Antwort in AuswahlRechts$ zu speichern
GEHERECHTS[AuswahlRechts$] // Schicke die Antwort zur GEHERECHTS Prozedur
End if
If mx = 60 and fx = 60 and hx = 60 and sx = 60 // Alle sind über den Fluss Hinweis: >and< bedeutet wir fügen eine Kondition zu der If Auswahl hinzu
ZEIGEINFO[4] // Info 4 ist Die "Glückwunsch" Nachricht 
Wait 1 // Warte ein Sekunde
End // Stoppt das Programm
End If
If mx=60 // der Mann ist auf der rechten Seite vom Fluss
Locate 55,11 // Setzte die Text Position auf die rechte Seite
Input "Was soll er mitnehmen?";AuswahlLinks$
GEHELINKS[AuswahlLinks$]
End If
loop

				
			

Jetzt kommen die Prozeduren. Wie du siehst können sie überall im Programm plaziert werden, nicht unbedingt am Anfang.

				
					Procedure BILDSCHIRM
				
			

Diese Prozedur zeichnet den gesamten Bildschirm neu. Das ist notwendig um den alten Text zu löschen und den neuen in einer anderen Position auszugeben.

				
					CLS 11 // Lösche Bildschirm mit Grün, (Gras)
Ink 20 // Stellt die Farbe für den Fluss ein
Bar 1050,0 To 1100,1180 // Zeichne den Fluss mit  Bar x,y to x2,y2
				
			

Farben einstellen

				
					Paper 11 //Grüner Hintergrund für Text
Pen 1 //Weiße Textfarbe
Locate 1,0:Print "Ein Mann muss drei Sachen über"
Locate 1,1:Print "einen Fluss bringen"
Locate 1,3: Print "Er hat ein kleines Boot und kann nur"
Locate 1,4:Print "sich selbst und eine Sache mitnehmen."
				
			

Gebe die Strings an den horizontalen Positionen aus, (mx, fx etc.) definiert am Start und in den GEHERECHTS und GEHELINKS Prozeduren

				
					Locate mx,6:Print "Mann (M)"
Locate hx,8: Print "Huhn (H)"
Locate sx,9:Print "Sack Mais (S)"
PRUEFE // Gehe zu der Prozedur die eine falsche Auswahl prüft
End Proc
Procedure GEHERECHTS[Ch$] // Die GEHERECHTS Prozedur benutzt die Ch$ Variable als Parameter
Ch$ = Upper$(Ch$) // Da wir nicht wissen ob kleine oder Große Buchstaben eingegeben wurde ändern wir alle auf Groß

				
			

Also wird einer der folgenden Buchstaben: “M”, “F”, “H”, “S” or “m”, “f”, “h”, “s” an die Prozedur übergeben und in Ch$ gespeichert

Definieren aller Textpositionen auf der rechten Seite vom Fluss

				
					If Ch$="M" then mx=60 // Nur Mann
If Ch$="F"then fx=60:mx=60 // Mann muss über den Fluss mit dem Fuchs, dem Huhn oder dem Sack Mais
If Ch$="H" then hx=60:mx=60 // Dito
If Ch$="S" then sx=60:mx=60 // Dito
BILDSCHIRM // Eine Prozedur kann auch aus einer Prozedur augerufen werden, hier um den Bildschirm neu zu zeichnen
End Proc
Procedure GEHELINKS[Ch$]
				
			

Siehe Anmerkungen in GEHERECHTS

				
					Ch$ = Upper$(Ch$)
If Ch$="M" then mx=3
If Ch$="F" then fx=3:mx=3
If Ch$="H" then hx=3:mx=3
If Ch$="S" then sx=3:mx=3
BILDSCHIRM
End Proc

Procedure PRUEFE
				
			

Prüfe auf eine falsche Wahl durch Benutzung der Textpositionen, (mx, fx etc.) um zu entscheiden welche Nachricht gezeigt wird

Fuchs, Huhn und der Sack Mais sind zusammen aber der Mann nicht

Die ‘<>’ Zeichen bedeuten nicht gleich als (oder verschieden als)

				
					If fx = hx and hx = sx and fx <> mx Then ZEIGEINFO[1] // Bemerke die Parameter die in der eckigen Klammer an die Prozedur  ZEIGEINFO[1] übergeben werden.Fuchs und Huhn sind zusammen, Mann ist nicht mit ihnen
				
			

Fuchs und Huhn sind zusammen, der Mensch ist nicht bei ihnen

				
					If fx=hx and mx<>hx Then ZEIGEINFO[2] //<> heißt nicht gleich, wenn also fx=hx und mx ist nicht hx dann sind das Huhn und der Sack Mais zusammen, der Mann ist nicht mit ihnen
If hx=sx and mx<>hx Then ZEIGEINFO[3]
End Proc
Procedure ZEIGEINFO[M]
				
			

Zeige die angemessene Nachricht
Bereite das Format zur Ausgabe der Nachrichten Strings vor

				
					Cls 0 // Löscht den Bildschirm mir der Farbe schwarz
Paper 0 // Hintergrund Text schwarz
Pen 4 // Roter Text
Locate 0,9 // Plaziere Nachricht
Curs Off // Schaltet den blinkenden Bildschirm Cursor ab
				
			

Bemerke wie ein Parameter an die Prozedur übergeben wird, gespeichert in der Variablen ‘M’. Sie wird genutzt um eine von drei Nachrichten auszuwählen und dann auszugeben

				
					If M = 1       
Centre "Das Huhn hat den Mais gefressen…" // Zentriert auf der Position wie oben angegeben
Wait 1 // Eine Sekunde Pause für einen dramatischen Effekt!
Locate 1,11 // Gehe ein wenig runter
Centre "…dann aß der Fuchs das Huhn!"
End if
If M = 2 Then Centre "Der Fuchs aß das Huhn!"
If M = 3 Then Centre "Das Huhn aß den Mais!"
If M = 4 then Centre "Glückwunsch, du hast es geschafft! Drücke F5 um nochmal zu spielen"
Paper 0: Pen 1 // Gehe zurück auf normale Papier und Textfarben
Pop Proc // Nicht die Nachricht "Drücke eine Taste" anzeigen
Locate 1,22: Centre "Drücke eine Taste"
Curs On // Der blinkende Cursor wird eingeschaltet
Wait key // Warte auf eine Eingabe
mx=3:fx=3:hx=3:sx=3 // Zurücksetzten der Startpositionen von BILDSCHIRM
End proc 
				
			

**Klicke auf den „Run in Browser“ Knopf oder F1 um das Programm im Browser zu starten oder auf „Run in AOZ Viewer“ (F2) um es im Editor zu starten.

Ok, jetzt hole erstmal tief Luft. Du wirst einige Zeit brauchen um die Logik des Programms zu verstehen. Du wirst aber viel dabei lernen.
Nicht nur viele Befehle und die Grundlagen der Programmierung, auch die Logik muss verstanden werden. Ganz klar braucht das vielleicht etwas Zeit, aber lass dir gesagt sein, das wenn du es einmal vestanden hast und erfahren genug bist, wirst du in der Lage sein das Programm deiner Träume zu schreiben.

Aktualisiert 23.07.2023
Getestet mit AOZ Studio™ Version 1.0 Update 44 am 23.07.2023

RayShell Computer Department
Datenschutz-Übersicht

Diese Website verwendet Cookies, damit wir dir die bestmögliche Benutzererfahrung bieten können. Cookie-Informationen werden in deinem Browser gespeichert und führen Funktionen aus, wie das Wiedererkennen von dir, wenn du auf unsere Website zurückkehrst, und hilft unserem Team zu verstehen, welche Abschnitte der Website für dich am interessantesten und nützlichsten sind.