Lösungen (Small Basic)

1. Das erste Programm

Fragen

1. Der Computer verwendet den Monitor (Bildschirm) als »Mund« und die Tastatur (Keyboard) als »Ohr«. Obwohl es bereits Spracheingabe und -ausgabe gibt, wird es wohl noch eine lange Zeit dauern, bis diese die Standardgeräte für Eingabe und Ausgabe ablösen.

2. Mit den Methoden bzw. Funktionen Read und Write der Klasse TextWindow.

3. Unter einer Variablen versteht man einen Platzhalter. Dort lässt sich z.B. ein Text oder eine Zahl speichern, damit er PC sich diesen Wert merken kann.

Aufgabe

1. Eine Lösungsmöglichkeit bietet das Programmbeispiel Hallo1A.

 

2. Bedingung und Kontrolle

Frage

1. Bei einer Zuweisung (mit »=«) erhält eine Variable einen Wert aus einer Formel oder von einer Funktion. Bei einem Vergleich mit »=« wird der Wert einer Variablen mit einem anderen Wert oder Ausdruck verglichen, ob er genau gleich ist.

Aufgaben

1. Die zusätzlichen Antworten stehen im Programm Hallo2C.

2. Eine Lösungsstruktur für alle Sternzeichen bietet die Datei Horoskop.sb. Die Vorhersagetexte musst du allerdings selber einfügen!

 

3. Vergleichen und wiederholen

Fragen

1. Bei einem Vergleich, ob etwas kleiner (<) oder größer (>) ist, wird die Vergleichszahl ausgeschlossen. Soll die Vergleichszahl mit einbezogen werden, so verwendest du »<=« oder »>=«. Ein Beispiel: Die Bedingung x < 5 erfüllen z.B. die positiven Zahlen 1, 2, 3, 4; für x <= 5 gelten dagegen 1, 2, 3, 4 und 5.

2. Bei jeder dieser Zuweisungen wird zuerst der alte Wert verändert und anschließend dieser alte Wert durch das neue Ergebnis ersetzt: Die Operation Anzahl + 1 zählt einen Wert um 1 herauf, Anzahl – 1 zählt um 1 »rückwärts«, Anzahl * 2 verdoppelt einen Wert.

3. Die Bedingung, die für Else gilt, erhält man, indem man die vorhandene Bedingung umkehrt. Damit könnte das Ganze auch so lauten:

TextWindow.WriteLine("Gib eine Zensur (1-6) ein: ")

Zensur = TextWindow.Read()

If (Zensur > 0) And (Zensur > 6) Then

  TextWindow.WriteLine("Falsch")

Else

  TextWindow.WriteLine("Richtig")

EndIf

Aufgaben

1. Das Programm ZENSUR2.sb bietet beide Bewertungsschemata (für 0–100 bzw. 0–15 Punkte) an.

2. Ein paar Beispiele findest du in der Datei Alter.bb.

 

4. Geld-Spielereien

Fragen

1. Mit der Anweisung Delay macht der Computer eine Pause in Millisekunden. Das wäre dann z.B. bei Delay 1000 eine ganze Sekunde.

2. Es kommt zu einer Endlos-Schleife, weil Kapital nie den gewünschten Wert erreicht.

3. Alle drei sind auf dem Bildschirm unsichtbar: Ein Leerzeichen ist ein kleiner Zwischenraum, der als einzelnes Zeichen gewertet wird (" "). Eine Leerzeile ist sozusagen ein horizontaler Zwischenraum (zwischen zwei Zeilen). Und die Leerkette ist ein Text mit Nichts (""). Probier mal diese Befehle aus:

TextWindow.Write(" ")

TextWindow.WriteLine(" ")

Aufgaben

1. Dazu schau mal in die Datei MATHE3.sb.

2. Im Programmtext von ZENSUR3.sb findest du einen Lösungsvorschlag.

3. Das Programm hat den Namen Mathe4.sb.

4. Dein Computer findet im Programm Raten5.sb eine von dir ausgedachte Zahl heraus, wenn du ihn nicht betrügst.

5. Nach demselben System spielt der PC im Programm Raten6.sb ohne zu mogeln gegen sich selbst.

 

5. Grafik mit Draw und Fill

Fragen

1. Im Textmodus bzw. in einem Textfenster werden Buchstaben, Zahlen und andere Zeichen in kleine unsichtbare Blöcke gesetzt. Die Klasse TextWindow bietet ein solches Fenster, das nicht grafikfähig ist. Im Grafikmodus bzw. in einem Grafikfenster dagegen wird nur gezeichnet und gemalt, weil sich alles dort Dargestellte aus einzelen (winzigen) bunten Punkten zusammensetzt. Ein passendes Fenster bietet die Klasse GraphicsWindow.

2. Der Ursprung (auch Null-Null-Punkt genannt) beginnt oben links in der Ecke der Anzeigefläche (z.B. Bildschirm)

3. Alle Werte muss man paarweise betrachten: Bei DrawLine geht es um den Start- und den Endpunkt einer Geraden. Bei DrawRectangle und DrawEllipse gibt es nur den Startpunkt. Dann kommen die Breite und die Höhe des Objekts. Hier "wandert" der Stift einen Umweg: statt "schräg" führt der Weg hier nur horizontal oder vertikal zum Ziel. Und DrawEllipse müht sich anschließend noch um eine möglichst große "Rundung" innerhalb eines (unsichtbaren) Rechtecks.

Aufgaben

1. Dieses Programm findest du in der Datei Dreieck1.sb. (Wirf auch mal einen Blick in Dreieck1A.sb und Grafik8.sb.)

2. Dazu schau dir mal das Programm HAUS1.sb an.

 

6. Pixel und Turtle

Keine Frage

Aufgaben

1. Eine Lösungsmöglichkeit ist in Grafik11A.sb zu finden.

2. Die dickeren Wellen werden in Grafik12A.sb erzeugt.

3. Ein "rundes Vieleck" zeichnet die Schildkröte in Turtle3A.sb.

4. Die Erweiterung findest du in der Datei Grafik15a.sb.

5. Der (ziemlich) echte Regenbogen wird im Projekt Grafik15b.sb gemalt.

6. Dazu gibt es keinen Vorschlag.

7. Schau mal in den Quelltext von Turtle5.sb.

 

7. Objekte und Ereignisse

Fragen

1. Turtle.Move bewegt die Schildkröte von einem Startpunkt aus sichtbar (bei PenDown) eine bestimmte Strecke. Bei Shapes.Move wird ein Objekt direkt an einen Punkt gesetzt. Man könnte Turtle.Move mit Shapes.Animate, Shapes.Move mit Turtle.MoveTo vergleichen.

2. Mit Shapes.Zoom(Figur, 2,2) verdoppeln sich die Maße (die Figur wird in der Fläche viermal so groß), Shapes.Zoom(Figur, 0.5,0.5) sorgt für die Halbierung, bei Shapes.Rotate(Figur, 90) gibt es eine Vierteldrehung und mit Shapes.Rotate(Figur, 180) eine Halbdrehung.

3. Eine Prozedur ist Teil des Gesamtprogramms (also ein Unterprogramm), sie kann auch unter ihrem Namen aufgerufen und ausgeführt werden. Eingeleitet wird diese Struktur mit Sub. Eine Prozedur lässt sich auch mit einem Ereignis koppeln.

4. In Small Basic werden Ereignisse mit Prozeduren verbunden, die aktiviert werden, wenn das betreffende Ereignis eintritt.

Aufgaben

1. Die Animate-Variante steht im Quelltext von Shapes2A.sb.

2. In Shapes2B.sb laufen die beiden Objekte aufeinander zu und "lösen" sich dann (fast) auf.

3. Das Programm Ball2A.sb hält den Ball am Spielfeldrand.

 

8. Tasten- und Maussteuerung

Fragen

1. Es gibt jeweils ein Namenpaar, weil alle diese Tasten zweimal vorhanden sind:

            [Shift] = "LeftShift", "RightShift"

            [Strg] = "LeftCtrl", "RightCtrl"

            [Alt]   = "System", "RightAlt"

2. Eine Kollision muss nicht gewaltsam sein. Es bedeutet einfach nur, dass sich zwei Flächen überlappen. Feststellen lässt sich das, indem man die jeweiligen Koordinaten miteinander vergleicht (und dabei natürlich auch die Maße der Objekte berüchsichtigt).

Aufgaben

1. Die Lösung findest du in Buggy1A.sb.

2. Auch das steht in Buggy1A.sb.

3. Schau doch mal genauer in das Projekt Buggy3A.sb hinein.

 

9. Prozeduren

Fragen

1. Vereinbart wird eine Prozedur mit Sub Name, aktiviert mit Name().

2. Vor allem ein umfangreiches Programm gewinnt durch eine Unterteilung in sinnvolle Blöcke an Übersicht, vor allem, wenn die Blöcke als Prozeduren verpackt sind. Diese lassen sich in beliebiger Reihenfolge vereinbaren und aufrufen.

3. Die Mouse- und Key-Ereignisse werden durch eine Aktion mit Tastatur oder Maus ausgelöst, der Zeitfaktor spielt dabei keine Rolle. Tick dagegen wird nur in bestimmten Zeitabständen aktiviert (die sich natürlich einstellen lassen).

Aufgaben

1. Das Programm Buggy4A.sb verfügt über die passende Tastensteuerung.

2. Schau dir dazu mal das Projekt Paddy1A.sb genauer an.

3. Die Timer-Variante findet sich in der Datei Paddy2.sb.

 

10. Sound, Clock und Timer

Fragen

1. Mit dem Timer lassen sich regelmäßig wiederkehrende Ereignisse steuern, die Klasse Clock ist für aktuelle Datums- und Zeitwerte zuständig.

2. Zuerst ermittelt man den Anfang und das Ende einer Zeitspanne über die Clock-Eigenschaft ElapsedMilliseconds. Die Zeitdifferenz errechnet man so:

Zeit = Startwert – Zielwert

Dividiert man diesen Wert durch 1000, hat man die Zeit in Sekunden, teilt man durch 60000, dann bekommt man die Zeitangabe in Minuten.

Aufgaben

1. Das Programm mit den Geräuschen heißt Buggy8.sb.

2. Die Datei Dodger3.sb erlaubt ein Ein-Minuten-Spiel.

3. Sieh dir mal den Lösungsvorschlag im Quelltext von Dodger4.sb an.

 

11. Figuren in Bewegung

Fragen

1. Diese beiden Formeln bestimmen die Koordinaten für die Mitte einer Figur:

xMitte = x + GetWidthOfImage(Bild) / 2

yMitte = y + GetHeightOfImage(Bild) / 2

2. Wird eine bestimmt Farbe als transparent definiert, dann werden alle Bildpunkte mit dieser Frabe nicht dargestellt. So bleibt an der betreffenden Stelle das erhalten, was vorher dort angezeigt war (in der Regel ein Hintegrundbild). Nicht jedes Format kann mit Transparenz umgehen. Am besten benutzt man PNG oder GIF.

Aufgaben

1. Die Erweiterung steht im Quelltext von Figur3A.sb.

2. In Figur4B.sb wird die Figur von Shapes übernommen.

3. Die Fassung mit Pfeiltastensteuerung und Zoomeffekten findet sich in Figur5A.sb.

 

12. Komponenten und Datenfelder

Fragen

1. Eine Komponente ist ein grafisches Element z.B. für Windows, also z.B. ein Button (Schaltfläche), ein Textfeld oder ein Menü oder ein Dialogfeld. In Small Basic gibt es allerdings nur Buttons und TextBoxen.

2. Ein Array kann jede Menge Dimensionen haben. Nehmen wir an, du benötigst für ein Spiel dreidimensionale Koordinaten. Dann könnte ein Array-Element so aussehen:

Punkt[x][y][z] oder Punkt[1][1][1]

3. Zuerst muss der Dateiname gegeben sein (und das Verzeichnis). Die Datei selbst muss (noch) nicht existieren, wenn es ums Schreiben von Daten geht, dann wird eine nicht vorhandene Datei neu erzeugt. Das Lesen erledigt die Methode ReadLine und um das Schreiben kümmert sich WriteLine – Zeile für Zeile.

Aufgaben

1. Die erweiterte Version heißt Hallo5.sb.

2. Das Gleiche mit Prozeduren steht in Hallo6.sb.

3. Hierzu schau doch mal beim Projekt JumpButton.sb vorbei.

4. Die Lösung findest du im Quelltext von Raten8.sb.

 

13. Noch ein Spiel?

Keine Frage

Aufgaben

1. Den Einsatz des Timers findest du in Boom3A.sb.

2. Der hüpfende Ball kommt im Programm Ball9.sb zum Einsatz. (Ball9.sb enthält eine Flugbahn-Version.)