[Tutorial]BlitzBasic 3D

07/01/2010 19:54 xXblacksunnXx#1
kann gecloset werden
07/01/2010 19:55 xXblacksunnXx#2
Variablen
Was sind Variablen? In der Mathematik sind sie Platzhalter. In der Programmierung speichert man in ihnen Werte, die sich während des Spielverlaufes ändern, wie z.B. Leben, Schaden, Geschwindigkeit etc.

In BlitzBasic gibt es 3 Arten von Variablen:

Long -Variablen können Ganzzahlen (1,2,3...) speichern.
Float -Variablen können Kommazahlen (3.2,74.33892) speichern.
String-Variablen können Zeichenketten ("Hallo", "Ciao") speichern.



Jede dieser Arten hat ein bestimmtes "Kennzeichen":

Long-Variablen: entweder % oder gar kein Zeichen
Float-Variablen: #
String-Variablen: $




Wie erstellt (Fachausdruck: deklariert) man jetzt diese Variablen? Ganz einfach: Zuerst schreibt man den gewünschten Variablennamen:

leben
dann fügt man das "Variablenzeichen" an

leben% ;in diesem Fall kann man es aber auch weglassen
und zum Schluss den gewünschten Wert den man in der Variable speichern will:

leben% = 10
Hier nochmal alle 3 Arten in einem Beispiel:

leben = 10 ;diesmal hab ich die Endung weggelassen.
Geschwindigkeit# = 7.333 ;bei Kommazahlen immer das englische Komma (.) schreiben.
name$ = "Friedrich" ;Strings müssen immer in "" geschrieben werden.



Ein String ist einfach nur Text; eine Anhäufung von Zeichen.

OK, wie verwendet man jetzt Variablen? Am Besten kann man das an einem Beispiel zeigen:




;hier werden die Variablen erstellt
leben = 10
speed# = 7.333
name$ = "friedrich"
;hier werden sie auf dem Bildschirm ausgegeben
Print name
Print leben
Print speed

WaitKey
End




Wenn man den INHALT der Variable angeben möchte, dann schreibt man einfach nur den Variablennamen (ohne ""). (Probier einfach mal die Namen in "" zuschreiben und schau was passiert.)

Der Computer ersetzt einfach den Variablennamen (ohne "") mit ihrem Inhalt.

Natürlich könnte man auch schreiben:




Print "10"
Print "7.333"
Print "Friedrich"

WaitKey
End



Aber das Tolle an Variablen ist ja, dass sie (was für eine Überraschung) variabel sind.

Wieder ein Beispiel:




Leben = 10
Schaden = 3

Print Leben ;noch ist der Spieler unbeschadet

Leben = Leben - Schaden ;aber jetzt wird von Leben der Schaden abgezogen

Print Leben ;die gleiche Zeile wie oben und trotzdem wird etwas anderes ausgegeben

WaitKey
End

Du dürftest jetzt eigentlich alles bis auf die folgende Zeile verstehen:

Leben = Leben - Schaden

Dann lösen wir sie mal auf:

leben =
dürfte ja noch verständlich sein. Die Variable bekommt einfach einen neuen Inhalt.

leben = leben - schaden
wie gesagt: Der Compiler ersetzt Variablen mit ihrem Inhalt. Also dürfte die Zeile in Wahrheit so aussehen:

leben = 10 - 3
jetzt sollte eigentlich alles klar sein.

Falls du es noch nicht verstanden hast, kannst du dir noch das nächste anschauen.




leben = leben + 10 ; man bekommt 10 leben dazu
schaden = schaden + schaden ; schaden wird verdoppelt
schaden = schaden*2 ; das Gleiche
schaden = schaden/2 ; er wird halbiert
speed = leben ; speed wird an leben angepasst
leben = leben - 1 ; man verliert ein leben
uzga = uzga + 1 ; man bekommt ein uzga^^
sabberblub = sabberblub - 1 ; man kann sich für eine Variable die dümmsten Namen einfallen lassen
Beachte: Am Computer benutzt man die Rechenzeichen * für das Multiplizieren und das / für das Dividieren.

ergebnis = a + b ; Zwei Zahlen werden zusammengezählt und das Ergebnis in einer Variable gespeichert
ergebnis = a - b ; die Zahlen werden subtrahiert,
ergebnis = a * b ; multipliziert,
ergebnis = a / b ; und dividiert.



Außerdem kann man nicht nur mit Zahlvariablen rechnen, sondern auch mit Strings:

name$ = "Fritz"
alter = 14

meldung$ = "Dein Name ist" + name$ + " und du bist" + alter + " Jahre alt."
Print meldung$
Waitkey
End

Man schreibt also einfach die Zeichenkette (in "") und fügt dann mit einem Plus (+) eine Variable oder eine weitere Zeichenkette an. Achtung: es muss hinter einer Zeichenfolge immer $ stehen, sonst wird der Wert 0 Ausgegeben!


Man muss dieses "Mischmasch" aber nicht unbedingt in Variablen speichern. Man kann es auch direkt ausgeben:




name$ = "Fritz"
alter = 14
Print "Dein Name ist" + name +" und du bist" + alter +" Jahre alt."

Waitkey
End
07/01/2010 19:55 xXblacksunnXx#3
Input und der Umgang mit Funktionen
OK, du kannst immerhin schon Text ausgeben und mit Variablen arbeiten. Aber was nützt es einem der nicht programmieren kann? Gar nichts. Und jetzt kommt Input ins Spiel. Mit Input kann man die Eingabe eines Benutzers in eine Variable speichern.

Print "Gib deinen Spielernamen ein: "
Spielername$ = input()
Print "Name: " + Spielername$

WaitKey
End
Input ist eine sogenannte Funktion (oft auch als Befehl oder Anweisung bezeichnet). Diese besteht aus dem Funktionsnamen und einem Parameterteil. Aber nicht vom Namen abschrecken lassen, Parameter bedeutet einfach "Wert". Und wenn eine Funktion mehrere Parameter benötigt, werden sie durch ein (deutsches) Komma getrennt. Die Parameterteile gehören immer zwischen zwei Klammern. Doch im 1. Beispiel ist er leer, da Input keine Werte benötigt (Es können aber welche eingesetzt werden). Es liest einfach die Eingabe ein und das war's, es gibt keine Variationen.

Print ist ebenfalls eine Funktion. Der Parameter, den Print benötigt, ist der String (Text), den es ausgeben soll. Aber, bei Print steht der Parameterteil nicht in Klammern. Wie geht denn das? Naja, es ist ja bekannt, dass Ausnahmen die Regeln bestätigen. Natürlich könnte man auch schreiben:

Print("Blah")
Aber es nützt uns nichts, da Print keinen Wert zurückliefert. Das bedeutet, dass man das Ergebnis dieser Funktion nicht in eine Variable schreiben kann, wozu auch? In diesem Fall ist das nicht nötig. (Man kann die Klammern aber nur in Basic-Dialekten weglassen, nicht in C++ oder anderen Sprachen)
Übrigens kann man bei Input, wenn man will, auch einen Parameter verwenden, nämlich den text der den user dazu auffordert, etwas einzugeben. Das würde dann so aussehen:

name$ = Input("Gib mal deinen Namen ein: ")
print name
BlitzBasic hat hunderte von diesen Funktionen auf Lager. Das Sortiment reicht von einfachen Text-Funktionen über mathematische Funktionen bis hin zu 3D-Effekten.

Wenn man mit der Eingabe des Benutzers auch rechnen möchte (z.B. bei einem Taschenrechner-programm) dann muss man den Rückgabewert von Input einfach in eine Zahl-Variable anstatt in eine String-Variable setzen:

Zahl1% = Input("Gib bitte eine Zahl ein: ")
Zahl2% = Input("Gib bitte noch eine Zahl ein: ")
Print Zahl1+Zahl2
[Bearbeiten] If-Konstruktionen
Mittlerweile kannst du also einen Text per "Print" ausgeben und weißt auch schon, wie du den Benutzer eine Eingabe tätigen lässt. Aber was ist nun, wenn du, abhängig von der Benutzereingabe, eine bestimmte Ausgabe erfolgen lassen möchtest? Nehmen wir das Beispiel einer X-beliebigen Quizshow: Der Spieler bekommt drei Antwortmöglichkeiten aus denen er wählen kann, aber nur eine ist richtig:

Print "Frage: Was ist 2+2?"
Print "(a) 6"
Print "(b) 4"
Print "(c) 5"

Antwort$ = Input ("a, b oder c? ")

If Antwort = "b" Then ;Wenn die Antwort "b" ist
Print "Richtig, du Mathegenie!" ;Gebe den Text aus
EndIf ;Ende der If-Konstruktion

Huch, was haben wir denn da? Die Zeile (If Antwort = "b" Then) schaut, ob in der Variable "Antwort" der Text "b" gespeichert wurde. Wenn das so ist, wird die folgende Zeile ausgeführt. Man fragt also eine Bedingung ab, und wenn diese erfüllt ist, wird das gemacht, was zwischen If und Endif steht.

P.S.: Man kann das ganze auch - ohne 'EndIf' - in eine Zeile schreiben:

If Antwort = "b" Print "Richtig, du Mathegenie"
Oder wer's lieber etwas geschwätziger hat:

If Antwort = "b" Then Print "Richtig, du Mathegenie"
07/01/2010 19:56 xXblacksunnXx#4
If und seine Verzweigungen
Um beim Beispiel mit dem Gewinnspiel zu bleiben: Was ist, wenn man nicht nur etwas sagen möchte, wenn der Spieler gewonnen hat, sondern ihn auch auslachen möchte, wenn er daneben getippt hat? Dazu gibt es in BB einen weiteren Befehl:

Else (zu Deutsch: Sonst/Ansonsten)

Um den Gebrauch zu demonstrieren, habe ich das weiter oben stehende Beispielprogramm mal ein wenig modifiziert:

Print "Frage: Was ist 2+2?"
Print "(a) 6"
Print "(b) 4"
Print "(c) 5"

Antwort$ = Input ("a, b oder c? ")

If Antwort = "b" Then ;Wenn die Antwort "b" ist...
Print "Richtig, du Mathegenie!" ;Gib diesen Text aus
Else ;Ansonsten...
Print "Muhahaha! Daneben!" ;Gib diesen Text aus
EndIf
Alles was zwischen dem Befehl "Else" und "Endif" steht, wird nur ausgeführt, wenn die erste Bedingung, also Wahl = "b", nicht erfüllt wird.

Was ist aber nun, wenn ich für die Antworten "a" und "c" noch andere Antworten geben möchte als nur, dass der Spieler versagt hat? Naja, dafür gibt es den schönen Befehl "Elseif", der eine Kombination der Begriffe "If" und "Else" darstellt. Um den Gebrauch zu demonstrieren, habe ich das Beispielprogramm noch einmal umgestrickt:

Print "Frage: Was ist 2+2?"
Print "(a) 6"
Print "(b) 4"
Print "(c) 5"

Wahl$ = Input ("a, b oder c? ")

If Wahl = "b" Then ;Wenn Wahl gleich "b" ist...
Print "Richtig, du Mathegenie!" ;Gebe diesen Text aus
Elseif Wahl = "a" ;Ansonsten: Wenn Wahl = "a"
Print "Ha, voll daneben!"
ElseIf Wahl = "c" ;Ansonsten: Wenn Wahl = "c"
Print "Ha, knapp daneben ist auch vorbei!"
Else ;Ansonsten...
Print "Was hast du bitte schön eingegeben? Jedenfalls nicht a, b oder c."
EndIf
07/01/2010 19:56 xXblacksunnXx#5
Select/Case
Wie man beim vorherigen Beispielcode sieht, kann so eine If-Abfrage bei vielen möglichen Antwortmöglichkeiten schon ziemlich lang und umständlich werden. Deshalb gibt es "Select" und "Case". Man sagt erst, welche Variable überprüft werden soll (Das macht man mit Select Deinevariable) und fügt nachher die verschiedenen Antwortmöglichkeiten hinzu (Mit Case "Anwort") und default ist das Äquivalent (entsprechende) zu dem Befehl "Else". Um das Ganze einmal auf das bisher benutzte Beispiel zu übertragen:

print "Frage: Was ist 2+2?"
Print "(a) 6"
Print "(b) 4"
Print "(c) 5"

Wahl$ = Input ("a,b oder c? ")

Select Wahl ;Die Variable "Wahl" soll im folgenden überprüft werden...
Case "b" ;Antwort "b"
Print "Richtig, du Mathegenie!" ;Gebe diesen Text aus
Case "a" ;Antwort "a"
Print "Ha, voll daneben!"
Case "c" ;Antwort "c"
Print "Ha, knapp daneben ist auch vorbei!"
Default ;Wenn keine der anderen Antworten passt...
Print "Was hast du bitteschön eingegeben? Jedenfalls nicht a,b, oder c."
End Select
07/01/2010 19:57 xXblacksunnXx#6
Schleifen
Tja, die Schleifen, die erleichtern einem das Leben. Es wäre sehr mühsam, wenn man für 200 Variablen die Wertzuweisungen von Hand einzeln eingeben müsste. Außerdem ist auch nur so ein Spiel möglich, da ja immer wieder das Bild aufgebaut und gelöscht werden muss, um die Illusion einer Bewegung zu erzeugen. Eigentlich wiederholen Schleifen nur die dazwischen stehenden Schritte bis zur einer Abbruchbedingung. Mit den Verzweigungen stellen Schleifen die Grundlage jeder Programmiersprache dar. Nur wer diese richtig einzusetzen weiß, kann richtig Programmieren.

For/Next
Die For-Schleife ist eine Zähler-Schleife. Mit ihrer Hilfe kann man sich viel Arbeit sparen, vor allem in Verbindung mit Arrays und Types (dazu später mehr).




For start=1 To 10
Print "Ein Hoch auf die For-Schleife"
Next

WaitKey
End
Dieses Progrämmchen würde 10-mal den Text ausgeben. Dabei ist das Next zwingend nötig, sonst folgt eine Fehlermeldung. Also wird alles was zwischen For und Next steht genau start-mal (was für ein ausdruck^^) ausgeführt. "start" ist in diesem Fall eine Variable, die in jedem Schleifendurchlauf "zunimmt". In diesem Beispiel beginnt sie bei 1 (start = 1) und wird bis 10 (To 10) erhöht. Also schreiben wir uns mal ein kleines CountDown-Programm. (obwohl es eher ein CountUp-Programm ist)

For zaehler = 1 To 10
Print zaehler
Next
Aber die For-Schleife muss nicht unbedingt in Einser-Schritten zählen.

For zaehler = 0 to 10 Step 2
Print zaehler
Next

WaitKey
End
Hierbei würde jede 2. Zahl übersprungen werden. Man kann auch Step 3,4,5,6... angeben,dann werden halt mehrere Zahlen übersprungen. Wenn man die Schleife jetzt also rückwärts zählen lassen möchte, dann muss man sie mit -1er Schritten abarbeiten.

For zaehler = 10 to 1 Step -1
Print zaehler
Next

WaitKey
End
Und um daraus jetzt ein richtiges CountDown-Programm zu machen, muss man noch den Delay-Befehl einbauen. Wie der Name schon sagt, macht Delay etwas ähnliches wie WaitKey, nur dass es nicht wartet bis man eine taste drückt, sondern bis eine gewisse Zeitspanne vorüber ist. Und diese Zeitspanne gibt man als Parameter an (aber in Millisekunden). Wenn wir also wollten, dass erst nach einer Sekunde eine neue Zahl kommt, dann müssten wir als Parameter 1000 (=1 Sekunde) angeben:




For zaehler = 10 to 1 Step -1
Delay(1000)
Print zaehler
Next

WaitKey
End
07/01/2010 19:58 xXblacksunnXx#7
Repeat/Forever
Achja, es gibt noch die Repeat/ForEver-Schleife.

Repeat
Print "immernoch Blah!"
Forever
Was das bedeutet ist wahrscheinlich klar. Diese Schleife endet nie und wird daher unendlich vorgeführt.

While/Wend
Eine der Unterschiede zwischen While- und Repeat-Schleife besteht darin, dass bei der While-Schleife zuerst die Abbruchbedingung getestet wird. Fällt dieser Test positiv aus, wird die Schleife ausgeführt.

While Bedingung ;solange die Bedingung stimmt
Print "Blah"
Wend ;ende der Konstruktion
Wie man sieht, kann man eine While-Schleife anstelle einer Repeat-Schleife zur Erstellung der Main Loop (davon aber später) nutzen. Meistens wird aber die Repeat-Schleife verwendet. Bei manchen Befehlen funktioniert nur die eine bei manchen wieder nur die andere Schleife (sind allerdings wenige Befehle die da kritisch reagieren, vor allem bei den 3D-Kollisons-Befehlen ist das der Fall).

While not a=1
Wend
Dies ist eine besondere Schreibweise. Wenn a ungleich 1 ist wird die Schleife ausgeführt. Das wars dann an dieser Stelle, ist doch gar nicht so schwer, oder?
07/01/2010 19:58 xXblacksunnXx#8
Morgen mache ich dann weiter.
07/01/2010 20:34 S7ZY#9
zählt das nicht alles als Doppelposting unso?
jmd müsste eigentlich nen platzhalter zwischen den post machen.
07/01/2010 20:35 BoGaRaM#10
sieh sehr copy und paste aus xD
07/01/2010 20:46 xXblacksunnXx#11
is net
ich kann alles erklären
07/01/2010 21:22 S7ZY#12
^This
vorposter hat recht.

fast keiner kann in 1 minuten nen 20 sätze text schreiben. 100% C&P
07/01/2010 21:23 xXblacksunnXx#13
ey ich habe das in word
dann kla c&p sonst würde jeder durchspammen
07/01/2010 21:24 crafterEpic'#14
Was soll das Genau Betrachtet nun bringen?
07/02/2010 07:15 Kanachri#15
Quote:
Originally Posted by xXblacksunnXx View Post
ey ich habe das in word
dann kla c&p sonst würde jeder durchspammen
[Only registered and activated users can see links. Click Here To Register...] :rolleyes:
Kein kommentar.