Übersicht
Einleitung
1. Grundlagen
2. Variablen
3. Schleifen
4. Entscheidungen
5. Struktur
6. Eingabe
7. Gfx-Grundlagen
8. Bilder anzeigen
9. Kollision
10. Sound & Musik
11. Dateien
12. Multiplayer



Spiele
Grafik
Mathe
Netzwerk
String
Verschiedenes

Programmstruktur


© Robert Gerlach 2001-2002

www.robsite.de



Blitz Basic ist ein Basic-Dialekt, was heisst dass man mit ihm ziemlich unsauber und unübersichtlich programmieren kann. Man kann, muss aber nicht, denn BB bietet einem viele nützliche Sachen um sein Programm in kleine überschaubare Häppchen zu packen.

Das einfachste ist Gosub. Ok, das stimmt nicht, Goto ist noch einfacher, aber wie du bei den Schleifen gelernt hast, ist Goto böse und wird nur noch von Kartoffelbauern oder Nostalgikern verwendet. Nun denn, fangen wir also mit dem halbwegs nützlichen Gosub an:


Gosub sprungmarke

:code:

.sprungmarke

:code:

Return



Nun wird zu der Sprungmarke gesprungen, vor der ein Punkt steht um sie als Sprungmarke zu kennzeichnen, um bei Return wieder zum Gosub zurückzuspringen.

Das ganze ist aber relativ sinnlos, denn in BB gibt es Funktionen. Diese haben den Vorteil, dass sie als seperater Code angesehen werden, man ihnen Werte übergeben kann und sie auch noch Werte zurückliefern können.


; Ruft die Function "superprint" mit 2 Parametern auf.
superprint("Bopp", 4)



; Innerhalb der Function können die Variablen auch andere Namen haben, da sie nur dort verwendet werden (lokal).
Function superprint(text$, anzahl)

; Schreibt den Text anzahl-mal auf den Bildschirm.
For i = 1 to anzahl
Print text$
Next

End Function



Wie schon beim Variablen-Kapitel angedroht, gibt es globale und lokale Variablen. Globale kann man im gesamten Programm benutzen, lokale entweder nur in Functions, oder nur außerhalb solcher.
Das hängt damit zusammen, dass Functions, wie oben schon erwähnt, als separater, abgegrenzter Code-Teil angesehen werden und somit ihre eigenen Variablen haben können. Da man nun aber Variablen in einer Function benutzen muss (meistens), muss man sie eben extra dieser Function zuordnen, übergeben, oder sie am Anfang als Global festlegen um sie allen anderen Functions auch zugänglich zu machen.

Also Merke:
  • Variablen die man überall verwenden will als Global deklarienen
  • Variablen die man nur außerhalb der Functions, im Hauptprogramm nutzen will, einfach so lassen...
  • Variablen die man einer Function übergeben will, ... der Function übergeben ^_^'
  • Variablen die man nur in einer Function verwendet der Übersicht halber als Local deklarieren (ist aber nicht unbedingt nötig, bei größeren Programmen aber nützlich da man so besser den Überblick über die verwendeten Variablen behält...)

    Wenn man sich das merkt, kommt es auch nur selten vor dass eine Function mit einer Variablen nichts anzufangen weiss und das Programm nicht richtig funktioniert...


    Man muss aber wie gesagt einer Function keine Variablen übergeben, ist ja nicht immer nötig. In diesem Fall sollte man aber trotzdem die Klammern hinter der Function lassen weil sonst eine Fehlermeldung kommt...


    ; Ruft die Function "superprint" auf.
    superprint



    Function superprint()
    Print "super"
    End Function



    So. Ebenfalls gut an Functions ist, dass sie Werte zurückliefern können. Das geht so:


    ; Schreibt das auf den Bildschirm, was die Function "wuerfelvolumen" zurückgibt.
    Print wuerfelvolumen(19,49,235)



    Function wuerfelvolumen(breite, hoehe, tiefe)
    volumen = breite*hoehe*tiefe
    Return volumen
    End Function



    Mit Return kann man einen (nur einen) Wert wieder zurückgeben lassen. So kann man sich seine eigenen Befehle schreiben. Blitz Basic Befehle sind ja eigentlich auch nur Functionaufrufe, nur dass die Functions Blitz Basic selbst sind...

    Jetzt werden nur Integer (Ganzzahl)-werte zurückgegeben. Will man andere haben, muss man das entsprechende Zeichen hinter die Function schreiben:


    ; Schreibt das auf den Bildschirm, was die Function "exakteswuerfelvolumen" zurückgibt.
    Print exakteswuerfelvolumen#(19.49,23.529,5.55)



    Function exakteswuerfelvolumen#(breite#, hoehe#, tiefe#)
    volumen# = breite#*hoehe#*tiefe#
    Return volumen#
    End Function




    In BB gibt es Befehle, bei denen man eine verschiedene Anzahl an Parametern übergeben kann, je nach Bedarf. Braucht man den speziellen, letzten Parameter nicht, lässt man ihn einfach weg. Das gleiche kann man auch mit Functions machen:


    ; Schreibt einmal "hallo".
    textschreiben("hallo")



    Function textschreiben(text$, anzahl = 1)

    For i = 1 To anzahl
    Print text$
    Next

    End Function



    Nun wird einmal "hallo" geschrieben, weil anzahl 1 ist. Wenn man jetzt aber der Function noch einen Parameter übergibt, nämlich anzahl, wird dieser nicht auf 1 gesetzt wie man es vermuten könnte, sondern hat den Wert der übergeben wurde. Das anzahl = 1 ist nur dafür da um anzahl einen Wert zu geben falls er nicht mit übergeben wird.




    Nun kann man schon ein sehr übersichliches und leicht zu pflegendes Programm schreiben. Nur kann es manchmal vorkommen dass es einfach zu groß wird wenn 100 Functions in einer Datei stehen. Darum kann man einen Haufen Functions auch sehr gut in eine externe Datei abschieben um sie dann aus dem Hauptprogramm einzubinden. Dies geht mit:


    Include "externe-datei.bb"


    Diese externe Datei besteht nur aus Functions, die man dann ganz normal in seinem Hauptprogramm benutzen kann. Beim compilieren werden sie auch automatisch mit aufgenommen.

    Mit Hilfe von Funktionen kann man sein Hauptprogramm vollständig ohne "echten" Code aufbauen, also das ganze modular schreiben. Falls man z.B. eine Function für Ball-Physikberechnungen hat und einem der Ball zu langsam ist, muss man nur diese eine Function ändern und nicht in den Untiefen des mit Goto und Gosub verknäuelten Programms nach der Stelle suchen wo ein Teil der Ballphysik berechnet wird...
    Dadurch wird auch endlich der MakeGame Befehl Wirklichkeit:


    Include "game-library.bb"

    MakeGame("Quake 5")



    Aber man muss es auch nicht übertreiben...







    Zusammenfassung


    ; Die enfachste Art sein Programm etwas zu strukturieren ist Gosub:
    Gosub sprungmarke

    :code:

    .sprungmarke ; Punkt nicht vergessen...

    :code:

    Return ; Zurück zu der zeile nach Gosub


    ; Mit Functions kann man sein Programm sehr gut einteilen. Man kann ihnen Werte übergeben und sie können auch welche zurückliefern:
    textschreiben("hallo") ; Funktionsaufruf. "hallo" wird übergeben, sonst nichts.

    Function textschreiben(text$, anzahl = 1) ; Wenn anzahl nicht übergeben wird, wird es auf 1 gesetzt.

    For i = 1 To anzahl
    Print text$
    Next

    [Return variable] ; Man kann auch eine Variablen zurückliefern.

    End Function


    ; Um bestimmte Functions komplett aus dem Code zu werfen kann man sie auch in einer externen Datei (Include-Datei) ablagern und dann bei Bedarf wieder einbinden:

    Include("externe-datei-mit-functions.bb")

    ; Nun kann man alle Functions in ihr ganz normal benutzen. Auch Code der nicht in Functions steht wird ausgeführt.


    Nun weiter zur Eingabe.



    Teil 6: Eingabe



    Druckversion