Vorrausetzung für dieses Tutorial ist das verständniss von der boolschen Algebra (true und false) . Hier könnt ihr eure wissenslücke füllen: Bool und if
Das was eine Welt lebendig macht, was den alten Müller daran erinnert das du sein Brot gestohlen hast, dein Kontostand. Das sind alles Variablen. Die werde ich euch jetzt (hoffentlich) ein wenig näher bringen können.
Eine variable speichert information, zum beispiel true/false, 42 oder einen string wie zb. "Wo ist mein Brot?" Wenn man ihr einen Wert zugewiesen hat dann merkt sie ihn sich solange bis sie stribt. Zunächst muss man diese variable ersteinmal erschaffen (deklarieren):
Zitat :
var VariablenName;
Der VariablenName kann dabei frei gewählt werden, es sind jedoch die gleichen regeln zu beachten wie bei der namensgebung einer funktion. Wenn du jetzt deiner variable ein schönen Namen gegeben hast, können wir ihr information geben:
Zitat :
var Hunger; Hunger = true; //man kann der variable auch bei der initialisierung werte zuweisen, wenn man gerade lustig ist: var Hunger = true;
Die variable gibt jetzt immer ihren wert zurück, wenn man sie schreibt (Rückgabewert-> bool und if tutorial)
Zitat :
var Hunger = true; if (Hunger) FutterSuchen();//In diesemfall wird Futtersuchen ausgeführt
Es gibt nicht nur true und false, ich zeige euch noch die Ganzzahl (integer) Ein integer ist nichts anderes als eine Natürliche (glatte) zahl wie zb 1, 2 oder 42. Damit kann man zum beispiel rechnen:
Zitat :
var Kasse; Kasse = 12;//wir tun 12 gold in die Kasse Kasse = Kasse + 2;//12 gold + 2 gold mehr sind 14 gold =D Kasse -= 5; //wir ziehen 5 gold ab. //-= ist ein Operator der einem die schreibarbeit verkürzt. Es ist im prinzip das selbe wie das: Kasse = Kasse - 3; //es gibt selbstverständlich auch +=, *=, /=, *(mal), /(durch), ^(potenz)
Es gibt allerdings noch weitere Datentypen. Für Wissbegierige hier der doku link: Datentypen
Nun zur lebenszeit einer variablen. Sie lebt nur in dem block aus geschweiften klammern ( {} ) in dem sie erschaffen wurde, dabei zählen auch die blöcke, welche die funktion definieren (func Funktion(){}) Zur verdeutlichung:
Zitat :
{ var A; //Hier existiert A { var B; //hier existiert A und B } //Hier ist B tot :\ //aber A lebt noch } //Hier ist auch A tot
Wenn man variablen haben möchte die länger als einen Block/eine funktion leben sollen verwendet man lokale und globale variablen.
Lokale und Globale variablen werden immer außerhalb einer funktion deklariert und können nicht dierekt zugewiesen werden.
Lokale variablen existieren nur für ein Objekt (zb. flint). Wenn es weg ist, ist die lebenszeit der variablen vorbei. Bei der deklaration schreibt man local, statt var.
Zitat :
local Brot;
func BrotBacken() { Brot ++; // Brot += 1 kann man zu Brot++ verkürzen (das selbe gilt für --) }
func GetBrotMenge() { return Brot;//Man kann lokale vars nur im objekt selbst abfragen. Bei interaktion mit anderen objekten muss man auf solche funktionen zurückgreifen. }
local Knusprig = true;//geht nicht, man kann lokale und globale variablen nicht sofort bei der deklaration zuweisen. func falsch() { local Teigmenge; //Das geht nicht! }
Globale variablen gelten für das Gesammte spiel, sie können überall geändert und erfasst werden. Man deklariert sie mit static:
Zitat :
static WeltBrotMenge;
Dieses Wissen, zusammen mit der kenntnis von "if Sätzen" kann ma für schöne dinge nutzen. Ich hoffe es hat euch geholfen, auch wenn ich diesesmal darauf verzichtet habe wirklich alles zu erklären =)
Hier ein kleiner denkanstoß, was so alles möglich ist:
Zitat :
//Russisch Roulett flint: local Luck;
public func Hit() { var Zufallszahl = Random(10);//Random gibt einen wert zwischen 0 und der angegeben zahl zurück, dieser ist zufällig =) if (Zufallszahl == 1) Explode(30); //Explode sprengt das objekt mit der angegebenen stärke else if (Zufallszahl == 2) Explode(40); else if (Zufallszahl == 3) Explode(50); else Log("Glück gehabt!"); //log gibt die angegebene nachricht im konsolenfenster aus Luck++; if (Luck > 10) Explode(100); //zuviel glück ist auch nicht gut =) return; }
Enrique Generalleutnant
Ort : Oelde, NRW Anmeldedatum : 20.05.08
Thema: Re: 2: Variablen Sa Feb 07, 2009 3:22 pm
Da fehlen die "*****" !
Ansonsten ein schönes Tutorial.
Dragonclonk Kadett
Alter : 31 Ort : Lübeck Anmeldedatum : 11.12.08
Thema: Re: 2: Variablen Sa Feb 07, 2009 10:52 pm
Wiedermal ein schönes tut von Liech. Wer dich als Scriptlehrer hat, weiss sich glücklich zu schätzen.
Spiederschwein Kadett
Anmeldedatum : 04.07.09
Thema: Re: 2: Variablen Do Jul 09, 2009 6:38 pm
ein super tutorial aber warum gibt es noch kein "Russisch Roulet Flint" Wäre eigentlich lustig
Gamer Staatsrat
Alter : 28 Ort : In einem kleinen Dorf in Unterfranken (Bayern) Anmeldedatum : 10.02.09
Thema: Re: 2: Variablen Do Jul 09, 2009 7:01 pm
Und was stellst du dir darunter vor?
Extremclonk Staatsrat
Ort : Am Anti-Spam-Limes Anmeldedatum : 19.01.09
Thema: Re: 2: Variablen Do Jul 09, 2009 7:05 pm
Ein Flint mit ungefähr 30 verschiedenen möglichkeiten zu explodieren?
Gamer Staatsrat
Alter : 28 Ort : In einem kleinen Dorf in Unterfranken (Bayern) Anmeldedatum : 10.02.09
Thema: Re: 2: Variablen Do Jul 09, 2009 7:34 pm
Oder so per RandomX() Ne Zahl von 0 - 10 und wennse 5 ist dann explodiert sie. Und immer weitergeben. Oder aber wie mit Magazin das die Zahl immemr h;her wird *Tastatur spinnt grad voll( und dann explodiert.
Spiederschwein Kadett
Anmeldedatum : 04.07.09
Thema: Re: 2: Variablen Do Jul 09, 2009 9:03 pm
Eher eine Art Revolver der Per Random System garnicht bis stark explodiert. Aber der trotzdem bestehen bleibt.
Spiederschwein Kadett
Anmeldedatum : 04.07.09
Thema: Re: 2: Variablen Sa Jul 11, 2009 10:23 am
Es ist aber noch ein fehler in deinem System des Skripts.
Zitat :
var Zufallszahl = Random(10)
Das programm wird nur die zahlen 1bis 9 anzeigen aber niemals die 10 das heißt die große explusion wird es nie geben.
//Russisch Roulett flint: local Luck;
public func Hit() { var Zufallszahl = Random(11);
Denn das Random muss auf 11 gestellt werden
trike994 Konteradmiral
Alter : 30 Anmeldedatum : 10.12.08
Thema: Re: 2: Variablen Sa Jul 11, 2009 11:18 am
nö, es kommen dann dich die zahlen 0-9, soweit ich weiß, also muss es
Code:
var Zufallszahl = Random(10) +1;
heißen, oder?
Toastbrot Kadett
Anmeldedatum : 10.03.09
Thema: Re: 2: Variablen Sa Jul 11, 2009 7:53 pm
Spiederschwein schrieb:
Es ist aber noch ein fehler in deinem System des Skripts.
Zitat :
var Zufallszahl = Random(10)
Das programm wird nur die zahlen 1bis 9 anzeigen aber niemals die 10 das heißt die große explusion wird es nie geben.
//Russisch Roulett flint: local Luck;
public func Hit() { var Zufallszahl = Random(11);
Denn das Random muss auf 11 gestellt werden
Die groe Explosion ist nicht von der Varianble zufallszahl sondern von der variable luck abhändig. Das heißt die große Explosion gibt es dann wenn es mehr als 10mal keine explosion gab. siehe: Luck++;
Mozart Kanzler
Alter : 31 Ort : Vaihingen/Enz Anmeldedatum : 24.02.08
Thema: Re: 2: Variablen Sa Jul 11, 2009 10:22 pm
So ein Flint kommt im Skullbreakmeleewettbewerb vor, das Szen heißt Blitzmelee
Spiederschwein Kadett
Anmeldedatum : 04.07.09
Thema: Re: 2: Variablen Mo Jul 13, 2009 10:14 am
ok danke. dann sollte ich mich mal entschuldigen
Gast Gast
Thema: Re: 2: Variablen Do Okt 15, 2009 2:42 pm
Das Tutorial ist super, aber bitte schreibe doch nicht zwischendurch Sachen, die nicht gehen:
Zitat :
local Teigmenge; //Das geht nicht!
Schreibe solche Sachen lieber am Ende, aber ansonsten war es gut.
Zitat :
if (Hunger) FutterSuchen();//In diesemfall wird Futtersuchen ausgeführt
Wenn du zu Funktionen oder sowas etwas schreibst, dann mach es doch eventuell in anderer Farbe. Dann ist es noch einfacher zu verstehen, und man kommt nicht durcheinander. Auf jeden Fall bin ich darauß schlau geworden.
Chum Clonk
Alter : 29 Anmeldedatum : 02.02.09
Thema: Re: 2: Variablen Di Dez 29, 2009 6:42 pm
Liech nichts gegen dich aber du scheinst ja einen richtigen tötungsdrang zu haben xD "//Hier ist B tot :\ oder "//zuviel glück ist auch nicht gut =)" //aber A lebt noch } //Hier ist auch A tot" Trotzdem gutes Tutorial hab ich glatt mal wieder was gelernt
Elfangor General
Alter : 32 Ort : Mainz Anmeldedatum : 26.06.08
Thema: Re: 2: Variablen Di Dez 29, 2009 8:10 pm
Ich verstehe nicht warum hier keiner erklärt das die Bezeichnung "var" eine Variable jedes Varbiablentyps erstellt.
Es gibt verschiedene Variablentypen wie bool int long byte double string oder objekt.
int double long und byte sind Zahlentypen die sich nur in deren Größe unterscheiden.
String ist eine Zeichenkette die immer in " angegeben wird. Eine Zeichenkette kann Alle Zeichen auf der Tastatur enthalten afaik.
Ein Objekt ist Clonkintern und bezeichnet ein Objekt oder eine Objektnummer im Spiel.
Ein bool ist entweder 0 oder 1 / false oder true. Wobei 0 = false und true = alles außer 0.
Ebenfalls sollte erwähnt werden wo welche Variablen verwendet werden können und wie man diese umverwenden kann.
Man kann nämlich Variablen umkonvertieren. Das heißt das ich aus einem Bool ein Int mache oder aus einem String ein Objekt oder andersrum. Da das teilweise nicht so einfach ist, würde ich das eher ins Fortgeschrittenforum tun.
So nun mal zur Zuständigkeit der Variablen. Nicht jede Variable kann überall genutzt werden. Wenn ich in "Initialize()" eine Variable definiere, kann ich sie nicht in der Funktion darunter die vielleicht "Boom()" heißt verwenden. Es sei denn ich setze die Definierung der Variable an den Anfang des Scripts unter #strict
Gamer Staatsrat
Alter : 28 Ort : In einem kleinen Dorf in Unterfranken (Bayern) Anmeldedatum : 10.02.09
Thema: Re: 2: Variablen Di Dez 29, 2009 9:26 pm
Ach ich hab mich übriens schon immer gefragt ob man bei Clonk Kommazahlen darstellen kann.. Geht das?
Elfangor General
Alter : 32 Ort : Mainz Anmeldedatum : 26.06.08
Thema: Re: 2: Variablen Di Dez 29, 2009 10:05 pm
double kann Kommastellen angeben. Aber Vorsicht mit der Konvertierung zu Int. Brauchst du sehr große Kommastellen nimm Float. Float macht wirklich eine sehr große Genauigkeit.
Ich glaub ich schreib ein Tutorial über Variablenkonvertierung :/