Tutorials
[ Zurück ]


BlitzBasic-Tutorial, Spiele programmieren leicht g


Jetzt gehts weiter mit Kapitel 2:
->If-Abfragen
->Select
->Schleifen
->Arrays
->Variablen die zweite

Die If-Abfrage
Die If-Abfrage ist ein unglaublich wichtiges Werkzeug. Ohne sie wäre das Abfragen von Variablen, Arrays, Types, Funktionen und ähnlichem garnicht möglich. Natürlich, es gibt da noch die Select-Funktion, aber auch da ist es schwer/kompliziert eine Tasten-Abfrage durchzuführen, aber dazu erst später.
Die If-Abfrage dient dazu, Bedingungen zu kontrollieren (If im Deutschen = wenn). Die Syntax einer If-Abfrage:
Code:

If Bedingung Then Befehl
;oder
If Bedingung Then
Befehl
Endif


Wenn die Bedingung war ist, dann wird Befehl ausgeführt.
Mal ein richtiges Beispiel:
Code:

Global spi1_problem$ = "Prügelei"
If spi1_problem = "Prügelei" Then
Text 100,100,"Gleich eins aufs Maul!",1,1
Endif
WaitKey
End


Zuerst einmal wird die globale Variable spi1_problem deklariert.
Wenn spi1_problem = Prügelei ist, wird ein Text ausgegeben.
Ist euch was komisches aufgefallen? Mir auch:
Code:

Text 100,100,"Gleich eine aufs Maul", 1,1

Die beiden 1ser zentrieren den Text auf dem dem angegebenen Punkt, die erste steht für die Zentrierung auf der X-Achse und die zweite für die Y-Achse.
Wir wollen uns aber nicht so doll ablenken lassen. Kommen wir nun zu einer nützlichen Erweiterung von If:
Else
Else funktioniert ganz einfach:
Code:

Global spi1_problem$ = "Pups"
If spi1_problem = "Prügelei" Then
Text 100,100,"Gleich eins aufs Maul
Else
Text 100,100,"Alles gut.",1,1
Endif
WaitKey
End

Wenn spi1_problem = "Prügelei" ist, dann wird ein Text ausgegeben, ansonsten wird ein anderer Text ausgegeben.
Probier das doch mal mit einem anderem Beispiel aus.
Wenn wir spi1_problem jetzt jedoch auf noch andere Probleme prüfen wollen, müssten wir ja immer eine neue If-Abfrage machen... = Blub!
Das müssen wir NICHT! Wir holen uns einfach ElseIf dazu:
Code:

Global spi1_problem$ = "Mutti"
If spi1_problem = "Prügelei" Then
Text 100,100,"Gleich eins aufs Maul!",1,1
ElseIf spi1_problem ="Mutti" Then
Text 100,100,"Hausarrest für den Rest deines Lebens!",1,1
Else
Text 100,100,"Alles gut.",1,1
Endif
WaitKey
End

Mit ElseIf fügen wir in die selbe Abfrage eine weitere Abfrage ein, die nur geprüft wird, wenn die erste nicht wahr ist, und wenn die zweite auch nicht war ist, wird Else ausgeführt. Ganz einfach, und ein ähnliches Prinzip wie Select.
Select
Select macht etwas ähnliches wir If, es prüft etwas, allerdings können hiermit nur Variablen oder Funktionen, die einen Wert zurückgeben geprüft werden.
Unser Beispiel von oben, diesmal mit Select statt If:
Code:

spi1_problem ="Mutti"
Select spi1_problem
Case "Prügelei": Text 100,100,"Gleich eins aufs Maul!",1,1
Case "Mutti": Text 100,100,"Hausarrest für den Rest deines Lebens!",1,1
Default Text 100,100,"Alles gut.",1,1
End Select
WaitKey
End

Select =Leitet die Abfrage ein
spi1_problem = Abzufragende Variable
Case "Prügelei": = Erste Möglichkeit, wenn die Variable "Prügelei" ist, wird das, was hinter dem : steht, ausgeführt
Case "Mutti": = Dasselbe, aber mit anderem abzufragenden Wert
Default = wenn keines der Cases zutrifft, wird das, was hinter dem Default steht, ausgeführt.
End Select = Beendet die Abfrage
Viel mehr gibt es dazu eigentlich nicht zusagen.

Schleifen
Eine Schleife dient dazu, eine Programmablauf zu wiederholen. So gut wie jedes Spiel/Programm brauch eine Schleife. Es gibt verschiedene Arten von Schleifen.
Mit einer Schleife können zum Beispiel unbegrenzt Gegener erstellt werden, 100 Bilder in drei Zeilen geladen werden, und vieles mehr. Es gibt außerdem noch die Hauptschleife, fie das Mainprogram angibt.
Manche mögen sich jetzt fragen: Wozu braucht man eine Schleife im Programmablauf?
Das ist ganz einfach, ein Computer ist ja bekanntermaßen ziemlich schnell, daher wäre es ohne eine Schleife garnicht möglich, ein Programm so lange aufzuhalten, bis eine Bedingung erfüllt wurde, die durch eine menschliche Reaktion ausgelöst wird, natürlich, es gibt ja auch noch WaitKey, aber das ist in Spielen leider nicht so hilfreich.
Fangen wir an:
While/Wend-Schleife
Eine While/Wend-Schleife ist ganz einfach aufgebaut:
Code:

While Bedingung
;Inhalt, der wiederholt werden soll, solange Bedingung wahr ist
Wend


Mit While wird die Schleife eingeleitet (While im deutschen = während)
mit Wend (WhileEnd) beendet.
Hier mal ein Beispiel:
Code:

While problem = "Mutti"
Text 0,0,"Hausarrest",1,1
Wend


Diese Schleife wird solange ausgeführt, bis problem nicht gleich Mutti ist. Danach gehts normal im Programm weiter.
Genau so möglich wäre:
Code:

While Not Keyhit(1)
Text 0,0,"Wird ausgeführt, bis Escape gedrückt wird.",1,1
Wend


Hier haben wir gleich zwei Neuerungen: Not und KeyHit(1).
While Not KeyHit(1) bedeutet soviel wie "Während nicht Taste mit Scancode 1 gedrückt wurde".
Der Scancode ist die Nummer einer Taste, die man in den Klammern bei KeyHit() angegeben werden müssen. KeyHit ermittelt dann, ob die durch den Scancode angegebene Taste gedrückt wurde. 1 ist der Scancode für Escape, 2 für die Zahlentaste 1, 3 für 2 und so weiter. BlitzBasic hat einen integrierten Scancode-Picker, mit dem es möglich ist, den Scancode einer Taste herauszufinden.
Da sind wir aber mal ordentlich abgeschweift, nun aber zurück zu den Schleifen. While wird oft auch als Hauptschleife benutzt, ich persönlich empfehle aber die Repeat/Until, dazu kommen wir aber erst später.
For/Next-Schleife
Die For/Next Schleife ist eine sehr wichtige Schleife. Warum werdet ihr gleich erkennen:
Code:

For i = 1 to 100
;Inhalt
Next


i ist eine Variable, die jeden Schleifendurchlauf standartmäßig um 1 vergrößert wird, bis sie 100 erreicht hat. Also 100 Schleifen-Durchläufe. Nun könnte man das ganze noch etwas modifizieren:
Code:

For i = 1 to 100 Step 2
        Print i
Next

Nun geht es in zweier Schritten voran, also nur noch 50 Durchläufe, bis die Schleife durch Next verlassen wird. Außerdem wird jetzt noch die Variable i jeden Durchlauf ausgegeben, das sähe ungefähr so aus:
2
4
6
8
10
12

...
Man kann die Schleife auch frühzeitig verlassen:
Code:

For i = 50 to 100
    If i = 75 Then Exit
Next

Hier wird die Schleife schon nach 25 Durchläufen beendet, das macht Exit. Es geht, wenn es ausgeführt wird, in diesem Fall durch die If-Abfrage, hinter das Next und verlässt so die Schleife.
Die For-Schleife wird nachher, wenn du mit Arrays und Types arbeitn kannst noch interessanter.
Repeat/Until
Die Repeat/Until-Schleife ist eine großartige Schleife. Ich kann sie euch nur als Hauptschleife eurer Spiele empfehlen.
Code:

Repeat
;Inhalt
Until KeyHit(1)

Wiederhole den Inhalt bis Escape gedrückt wird. Fertig.
Oder:
Code:

Repeat
;Inhalt
Until beenden = 1

Ganz easy.
Wir werden später immer mit dieser Schleife als Hauptschleife arbeiten.
Repeat/Forever-Schleife
Die Repeat/Forever-Schleife ist eine unendliche Schleife, sie kann nur mittels Goto oder eines Programmendes verlassen werden. Super geeignet um einen Virus für einen Freund odsr auch einen nicht Freund zu schreiben Wink.
Code:

Repeat
;Inhalt
Forever

Wiederhole den Inhalt für immer.
Ich möchte euch hier gleich noch den Goto-Befehl zeigen:
Code:
 
Repeat
     Goto punkt
Forever
.Punkt

...

.Punkt = Sprungmarke, an die der Goto Befehl springt, wenn er ausgeführt wird.
Goto punkt = springt zur Sprungmarke punkt.
(Die groß und klein Schreibung ist beabsichtigt).

Soviel zum Thema Schleifen, spielt doch noch ein wenig damit herum, probiert, die Schleifen zu kombinieren.

Arrays
Arrays sind wie Variablen, nur dass sie einen Namen haben, der dann durch eine Zahl erweitert wird:
Code:

Dim arrayname(anzahl der arrayfelder)

Dim ist das Erkennungszeichen für Arrays. Auch bei Arrays muss der Datentypen angegeben werden (%-Integer,#-Float,$-String). In dem Beispiel könnten nur Ganzzaglen gespeichert werden, da der Datentyp standartmäßig Integer ist. Es muss außerdem beachtet werden, dass die Anzahl der Arrayfelder bei 0 beginnt, und nicht bei 1. Beispiel:
Code:

Dim array(10)
array(0) = 1
array(1) = 2

...


Kommen wir jetzt einmal zur Kombinierung von Array und Schleife:
Code:

Dim pups(11)
For i = 1 to 10
pups(i) = i * 1
Next


Das ganze funktioniert so: Wir erstellen das Array mit dem Namen "pups", es bekommt 11 Arrayfelder. Jetzt beginnen wir eine For-Schleife und lassen sie zehn mal durchlaufen und zählen i immer um einen hoch. In jedem Durchlauf wird dann das Arrayfeld definiert, das so groß ist wie i. Wie es definiert wurde, klären wir im nächsten Abschnitt.

Variablen die zweite
Hier wollen wir ein wenig Mathe machen und uns anschließend mit Logischen Operatoren und Vergleichsoperatoren beschäftigen
Mathematische Operatoren
Natürlich gibt es in der Programmierung auch Mathematik. Immerhin muss man ja Geldbeträge addieren, Winkel berechnen und ähnliches können. Natürlich gibt es es hier auch die vier Grundrechenarte: Addieren, Subtrahieren, Multiplizieren und Dividieren.
Für sie gibt es natürlich auch Operatoren:
Addition : + (war ja nicht anders zu erwarten)
Subtraktion : - (Magic Wink)
Multiplikation : *
Division : /
Man versteht es aber he besser, wenn man das ganze mal als Fode hat:
Code:

Global a = 5
Global b = 10
Global c = a + b
Global d = a - b
Global e = a * b
Global f = a / b


Die Ergebnisse der Variablen a und b, wenn sie mit den Grundrechenarten ausgerechnet werde. Werden in neuen Variablen gespeichert.
Mehr wollen wir erst mal nicht machen.

Logische Operatoren
Mit logischen Operatoren kann man Bedingungen und solche Sachen verbinden. Zu Anfang möchte ich sich erstmal die zwei wichtigsten vorstellen:
AND - &&
Or - ||
Mit AND kann man zwei Bedingungen so verbinden, dass beide stimmen müssen. Bsp.:
Code:

Global hat_problem = 1
Global problem$ = "Mutti"
If hat_problem = 1 AND problem = "Mutti" Then
Text 0,0,"Hausarrest!"
Endif
;schöner wäre zwar
If hat_problem = 1 Then
If problem = "Mutti" Then
Text 0,0,"Hausarrest"
Endif
Endif


Or wird benutzt, wenn zwei Bedingungen, das selbe Ergebnisse haben sollen, z.B.:
Code:

Global z = 2
If z = 4 or z = 2 Then
;Inhalt
Endif


Ein nicht besonders schönes Beispiel, aber es sollte den Stoff vermitteln. Probier noch ein bisschen mit AND und OR herum, falls du es nicht verstanden hast. Learning by doing.

Vergleichsoperatoren
Ein Vergleichsoperator ist dazu da, um etwas auf Wahrheit und nicht Wahrheit zu überprüfen. Zu Anfang werden wir die sechs wichtigsten und meist benutzten lernen:
= = Ist gleich
<> = ist ungleich
< = kleiner als
> = größer als
<= = kleiner gleich
>= = größer gleich
Den ersten haben wir schon ein paar mal benutzt. Er prüft, ob zwei Werte, dies könne. Variablen jeglicher Art, Zahlen und Strings sein.
Der zweite prüft genau das Gegenteil, nämlich, ob sie ungleich sind.
Der dritte und vierte funktionieren nur bei Zahlen. Sie überprüfen, ob eine Zahl größer oder kleiner ist als die andere.
Der fünfte und sechste macht fast dasselbe, nur überprüft er noch, ob die Zahlen vielleicht gleich groß sind.

Im Anschluss möchte ich euch noch den Booleanischen Datentypen zeigen. Der booleanische Wert ist der, der angibt, ob etwas wahr oder falsch ist, also True und False. Wenn du z.B. eine If-Abfrage hast, und die Bedingungen wahr sind, also True, wird durch diesem Wert dem Programm vermittelt, dass er den Inhalt dieser Abfrage ausführen soll. Wird ein False vermittelt, passiert dies nicht. Man kann Booleanische Werte auch direkt eintragen:
Code:

Global z = True
If z Then
;Inhalt
Endif


z wird hier auf True gesetzt, dadurch kommt bei der If-Abfrage auch ein True raus und der Inhalt wird ausgeführt. In dieser If-Abfrage wird abgefragt, ob z = NULL ist, also keinen definierten Wert hat.
Aber da z = True, also theoretisch gesehen = 1 ist, hat es einen Wert. False Ware = NULL.

Später werden wir auch noch mit diesem Datentyp arbeiten. Es ist ein sehr wichtiges Thema in der Programmierung, vorallem, wenn man in Sprachen wie PHP oder professionellere Programmierung übergehen möchte.

So viel zu Kapitel 2!
Im nächsten Kapitel werden wir so langsam mit dem Spiel-Grundgerüst anfangen:
->Das Spiel-Grundgerüst
->Laden und verwenden von Bildern
->Das erste Mini-Spiel
->Zufallsgenerator
->Types

Erstellt:18.04.12 18:09
Autor: humbledumble

Letzte Änderung: 03.01.13 11:20
Geändert von: Freggle

Bewertungen:0
Bewertung:

Freigeschaltet: Ja
Views 2718

Klicke einfach auf einen Stern!
Wollen Sie wirklich das Tutorial löschen?
Wollen Sie wirklich dieses Tutorial zulassen?
Betreff: Report tutorial [id = 627] !
Absender:
Kommentar:
Wollen Sie wirklich dieses Tutorial zulassen?
Absender:
Kommentar:
Folgende User sind hier gerade aktiv:
-

ANZEIGE