Ich brauche Hilfe beim Scripten, hab mich verrannt!
- DieFüchsin
- Adventure-Gott
- Beiträge: 4407
- Registriert: 12.03.2004, 16:55
lieber khrismuc, ich hoffe du bist mir nicht böse, wenn ich den Thread noch mal ausgrabe, um dir Löcher in den Bauch zu fragen. Gestern hab ich den Schweinehund gepackt und aus dem Fenster geworfen, um mich endlich mal dem Labyrinthrätsel wieder anzunehmen. Muss dich aber noch einiges fragen.
(aus deinem ersten post:)
-->bool symbolused[10];
-->int platesymbol[7];
wofür stehen die Zahlen in den eckigen Klammern?
wofür sind die Variablen da?
(aus deinem ersten post:)
-->bool symbolused[10];
-->int platesymbol[7];
wofür stehen die Zahlen in den eckigen Klammern?
wofür sind die Variablen da?
Danke, Adventuretreff! <3
- Rocco
- Adventure-Treff
- Beiträge: 1019
- Registriert: 25.11.2003, 16:20
- Wohnort: Ronville
- Kontaktdaten:
hoffe keiner ist böse wenn ich antworte
das sind variablen arrays.
das heisst du hast 10 variabeln vom typ bool (von [0] - bis [9] ) und
7 von typ int (von [0] bis [6]).
bool für wahr oder falsch, int für ganzzahlen.
zugriff
ist zB so.
symbolused[0] = true;
symbolused[1] = false;
...
abfrage if(symbolused[4] == true)
mach was sinnvolles
das selbe bei den andern variablen.
platesymbol[3] = 162;
platesymbol[5] = 12;
das sind variablen arrays.
das heisst du hast 10 variabeln vom typ bool (von [0] - bis [9] ) und
7 von typ int (von [0] bis [6]).
bool für wahr oder falsch, int für ganzzahlen.
zugriff
ist zB so.
symbolused[0] = true;
symbolused[1] = false;
...
abfrage if(symbolused[4] == true)
mach was sinnvolles
das selbe bei den andern variablen.
platesymbol[3] = 162;
platesymbol[5] = 12;
- DieFüchsin
- Adventure-Gott
- Beiträge: 4407
- Registriert: 12.03.2004, 16:55
- Fightmeyer
- Riesiger Roboteraffe
- Beiträge: 7308
- Registriert: 16.12.2004, 22:51
- Wohnort: Potsdam
- Kontaktdaten:
- DieFüchsin
- Adventure-Gott
- Beiträge: 4407
- Registriert: 12.03.2004, 16:55
-
- Adventure-Gott
- Beiträge: 3360
- Registriert: 27.02.2004, 20:49
Das hängt von deiner Nummerierung ab:
Wenn du ein Feld mit [9] Elementen hast, geht die eigentliche Indizierung von [0] bis [8] und nicht von [1] bis [9].
Wenn du jetzt also die Platten 1-9 ansprechen möchtest, kannst du entweder bei der Indizierung einfach eine Eins abziehen, oder stattdessen das Feld ein Element größer machen (Die [0]-Variable bleibt dann ungenutzt.)
Wenn du ein Feld mit [9] Elementen hast, geht die eigentliche Indizierung von [0] bis [8] und nicht von [1] bis [9].
Wenn du jetzt also die Platten 1-9 ansprechen möchtest, kannst du entweder bei der Indizierung einfach eine Eins abziehen, oder stattdessen das Feld ein Element größer machen (Die [0]-Variable bleibt dann ungenutzt.)
- DieFüchsin
- Adventure-Gott
- Beiträge: 4407
- Registriert: 12.03.2004, 16:55
-
- Adventure-Gott
- Beiträge: 3360
- Registriert: 27.02.2004, 20:49
Weil du dann die Felder direkt mit der gleichen Nummer ansprechen kannst. Eine Feld das 10 Elemente groß ist, geht von der 0 bis zur 9.
Also in deinem Beispiel:
Platte 1 -> Feldelement 1
Platte 2 -> Feldelement 2
.....
Es geht auch mit nur 9 Elementen, nur dann mußt du etwas aufpassen:
Platte 1 -> Feldelement 0
Platte 2 -> Feldelement 1
.....
Ist ein bißchen Geschmackssache, was dir lieber ist.
Also in deinem Beispiel:
Platte 1 -> Feldelement 1
Platte 2 -> Feldelement 2
.....
Es geht auch mit nur 9 Elementen, nur dann mußt du etwas aufpassen:
Platte 1 -> Feldelement 0
Platte 2 -> Feldelement 1
.....
Ist ein bißchen Geschmackssache, was dir lieber ist.
- DieFüchsin
- Adventure-Gott
- Beiträge: 4407
- Registriert: 12.03.2004, 16:55
- DieFüchsin
- Adventure-Gott
- Beiträge: 4407
- Registriert: 12.03.2004, 16:55
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
- DieFüchsin
- Adventure-Gott
- Beiträge: 4407
- Registriert: 12.03.2004, 16:55
So, nun bin ich fast durch mit dem Skript, hier noch zwei letzte Fragen:
Ich nehme mal an, dass "if(exists)" so viel bedeutet wie: wenn exists den Wert true annimmt, oder?khrismuc hat geschrieben: if (exists) { // symbol MUSS dabei sein
In der Annahme, dass ich mit obiger Vermutung richtig liege: "while(symbolused[s]" würde dann so viel bedeuten wie: wenn symbolused[s] schon true ist, dann muss ein s rausgesucht werden, für das symbolused[s] noch false ist. Wo wird aber bestimmt, dass symbolused[s] true wird? Sobald ein s verwendet wird, müsste das doch noch passieren, oder? Oder muss man das nicht noch extra hinschreiben?khrismuc hat geschrieben: while(c<=6) { // platten durchzählen
if (platesymbol[c]==0) { // platte hat noch kein symbol
while(symbolused[s]) { // ein unbenutztes raussuchen
s=Random(5)+1;
}
SetPlate(c, s); // auf die platte damit
}
c++; // nächste platte
}
}
Danke, Adventuretreff! <3
-
- Adventure-Gott
- Beiträge: 3360
- Registriert: 27.02.2004, 20:49
Richtig!DieFüchsin hat geschrieben:Ich nehme mal an, dass "if(exists)" so viel bedeutet wie: wenn exists den Wert true annimmt, oder?
Und das gilt eigentlich für alle IF-Abfragen, auch wenn dies am Anfang nicht ganz offensichtlich ist.
Wenn du z.B. den Befehl hast IF (a=b), dann wird der IF-Teil dann ausgeführt, wenn der Inhalt der Klammer wahr, also TRUE ist. Für den IF-Befehl ist es vollkommen egal, ob innerhalb der Klammer eine Variable, ein Vergleich irgendewas Anderes steht, das Ergebnis muß aber ein Boolscher Wert sein.
Um noch einmal ganz kurz zu den Feldern und der Anzahl der Elemente zurückzukommen (und das beantwortet auch deine 2. Frage. )
Ich habe mir jetzt den Skript von khrismuc mal genauer angeschaut (was ich vorher nicht gemacht habe):
So wie er es programmiert hat, müssen die Felder ein Element mehr deklariert werden (also [10] statt [9]). Für das Feld platesymbol ist es egal, aber in symbolused wird das erste Element [0] als ein Dummy-Element benutzt, daß immer auf TRUE steht (wird ganz am Anfang der Routine gesetzt).
Die Schleife
Code: Alles auswählen
while(symbolused[s]) { // ein unbenutztes raussuchen
s=Random(5)+1;
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
- DieFüchsin
- Adventure-Gott
- Beiträge: 4407
- Registriert: 12.03.2004, 16:55
@ wintermute: ich glaube, du verwechselst da was, symbolused sucht nicht nach einer platte, sondern zeigt, ob ein symbol schon benutzt wurde, oder nicht und weil 0 ja ein Dummy ist, wird es nie verwendet werden, weil immer angezeigt wird, dass es schon benutzt wurde.
@ khrismuc: ich schreibs dann so, oder?:
while(c<=6) { // platten durchzählen
if (platesymbol[c]==0) { // platte hat noch kein symbol
while(symbolused[s]) { // ein unbenutztes raussuchen
s=Random(5)+1;
}
SetPlate(c, s); // auf die platte damit
symbolused[s]=true
}
c++; // nächste platte
}
}
@ khrismuc: ich schreibs dann so, oder?:
while(c<=6) { // platten durchzählen
if (platesymbol[c]==0) { // platte hat noch kein symbol
while(symbolused[s]) { // ein unbenutztes raussuchen
s=Random(5)+1;
}
SetPlate(c, s); // auf die platte damit
symbolused[s]=true
}
c++; // nächste platte
}
}
Danke, Adventuretreff! <3