 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 29.04.2012, 21:50 Titel: FUNCTION ohne Ergebnis |
|
|
hi Leute
die Function ruf ich auf mit Code: | ra = Zufall(rndausw) |
und Function sieht so aus Code: | FUNCTION Zufall (rndausw AS STRING) AS STRING
DIM Z AS INTEGER
RANDOMIZE TIMER
Z = INT(RND * 25) + 1
IF Z = 1 THEN rndausw = "k1"
IF Z = 2 THEN rndausw = "k2"
IF Z = 3 THEN rndausw = "k3"
IF Z = 4 THEN rndausw = "k4"
IF Z = 5 THEN rndausw = "tk1"
IF Z = 6 THEN rndausw = "tk2"
IF Z = 7 THEN rndausw = "tk3"
IF Z = 8 THEN rndausw = "tk4"
IF Z = 9 THEN rndausw = "g1"
IF Z = 10 THEN rndausw = "g2"
IF Z = 11 THEN rndausw = "xk"
IF Z > 11 THEN rndausw = ""
END FUNCTION
|
bei Ausführung erscheint dann Fehler 14: Function result was not explicitly set
WAS mach ich falsch |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 29.04.2012, 21:53 Titel: |
|
|
Eine Funktion gibt was zurück, in deinem Fall einen String. Allerdings gibst du nicht an, was du zurückgibst. Du brauchst RETURN. |
|
Nach oben |
|
 |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 29.04.2012, 22:09 Titel: |
|
|
oh danke
jetzt ist die Meldung weg, aber irgend etwas läuft trotzdem schief
also ich hab ein unterordner mit bitmaps (64x64) welche Wegeteile für eine zufällige strassenkarte enthalten
bei Ausführung erhalte ich nur ein schwarzes bild und kann die Ausführung auch nicht mehr beenden.
edit: läuft doch nur viel zu langsam und so richtig zufällig scheints auch nicht zu sein
Code: | 'Auflösung 1024 x 768 : Kachel 64 x 64 = (16 x 12) 192
' 1- 16, 17- 32, 33- 48, 49- 64, 65- 80, 81- 96
' 97-112,113-128,129-144,145-160,161-176,177-192
#INCLUDE ONCE "fbgfx.bi"
DIM wege(1 TO 192) AS STRING
DIM kachel(1 TO 11) AS STRING = {"k1", "k2", "k3", "k4", "tk1", "tk2", "tk3", "tk4", "g1", "g2", "tk"}
DIM SHARED AS INTEGER I, spalte = 1, zeile = 1
DIM AS STRING rndausw, ra 'rndausw
DIM rv(1 TO 192) AS STRING 'rechts verbinden
DIM uv(1 TO 192) AS STRING 'unten verbinden
Dim SHARED As Any Ptr bild
DECLARE FUNCTION Zufall (rndausw AS STRING) AS STRING
SCREENRES 1024, 768, 32, , FB.GFX_NO_FRAME or FB.GFX_ALPHA_PRIMITIVES
FOR I = 17 TO 192
IF I = 17 THEN wege(I) = "k1": rv(I) = "j": uv(I) = "j"
IF I > 17 AND I < 32 THEN
DO
SLEEP 1
ra = Zufall(rndausw)
IF rv(I-1) = "j" THEN
IF ra = "g1" THEN rv(I) = "j": uv(I) = "n": EXIT DO
IF ra = "k2" THEN rv(I) = "n": uv(I) = "j": EXIT DO
ELSE
IF ra = "" THEN rv(I) = "n": uv(I) = "n": EXIT DO
IF ra = "k1" THEN rv(I) = "j": uv(I) = "j": EXIT DO
END IF
LOOP
wege(I) = ra
END IF
IF I = 32 AND rv(I-1) = "j" THEN wege(I) = "k2": rv(I) = "n": uv(I) = "j"
IF I = 32 AND rv(I-1) = "n" THEN wege(I) = "": rv(I) = "n": uv(I) = "n"
IF I > 32 AND I <=176 THEN
DO
SLEEP 1
ra = Zufall(rndausw)
IF I = 48 OR I = 64 OR I = 80 OR I = 96 OR I = 112 OR I = 128 OR I = 144 _
OR I = 160 OR I = 176 THEN
IF rv(I-1) = "j" AND uv(I-16) = "j" THEN
IF ra = "k3" THEN wege(I) = "k3": rv(I) = "n": uv(I) = "n":EXIT DO
IF ra = "tk3" THEN wege(I) = "tk3": rv(I) = "n": uv(I) = "j":EXIT DO
ELSEIF rv(I-1) = "n" AND uv(I-16) = "j" THEN
wege(I) = "g2": rv(I) = "n": uv(I) = "j":EXIT DO
ELSEIF rv(I-1) = "j" AND uv(I-16) = "n" THEN
wege(I) = "k2": rv(I) = "n": uv(I) = "j": EXIT DO
ELSE
wege(I) = "": rv(I) = "n": uv(I) = "n": EXIT DO
END IF
ELSE
IF rv(I-1) = "j" AND uv(I-16) = "j" THEN
IF ra = "k3" THEN wege(I) = "k3": rv(I) = "n": uv(I) = "n":EXIT DO
IF ra = "tk3" THEN wege(I) = "tk3": rv(I) = "n": uv(I) = "j":EXIT DO
IF ra = "tk4" THEN wege(I) = "tk4": rv(I) = "j": uv(I) = "n":EXIT DO
IF ra = "xk" THEN wege(I) = "xk": rv(I) = "j": uv(I) = "j": EXIT DO
ELSEIF rv(I-1) = "n" AND uv(I-16) = "j" THEN
IF ra = "g2" THEN wege(I) = "g2": rv(I) = "n": uv(I) = "j":EXIT DO
IF ra = "k4" THEN wege(I) = "k4": rv(I) = "j": uv(I) = "n":EXIT DO
IF ra = "tk1" THEN wege(I) = "tk1": rv(I) = "j": uv(I) = "j":EXIT DO
ELSEIF rv(I-1) = "j" AND uv(I-16) = "n" THEN
IF ra = "k2" THEN wege(I) = "k2": rv(I) = "n": uv(I) = "j":EXIT DO
IF ra = "g1" THEN wege(I) = "g1": rv(I) = "j": uv(I) = "n":EXIT DO
IF ra = "tk2" THEN wege(I) = "tk2": rv(I) = "j": uv(I) = "j":EXIT DO
ELSE
IF ra = "k1" THEN wege(I) = "k1": rv(I) = "j": uv(I) = "j":EXIT DO
IF ra = "" THEN wege(I) = "": rv(I) = "n": uv(I) = "n":EXIT DO
END IF
END IF
LOOP
END IF
IF I > 176 AND I <=191 THEN
DO
SLEEP 1
ra = Zufall(rndausw)
IF rv(I-1) = "j" AND uv(I-16) = "j" THEN
IF ra = "k3" THEN wege(I) = "k3": rv(I) = "n": uv(I) = "n":EXIT DO
IF ra = "tk4" THEN wege(I) = "tk4": rv(I) = "j": uv(I) = "n":EXIT DO
ELSEIF rv(I-1) = "n" AND uv(I-16) = "j" THEN
IF ra = "k4" THEN wege(I) = "k4": rv(I) = "j": uv(I) = "n":EXIT DO
ELSEIF rv(I-1) = "j" AND uv(I-16) = "n" THEN
IF ra = "g1" THEN wege(I) = "g1": rv(I) = "j": uv(I) = "n":EXIT DO
ELSE
IF ra = "" THEN wege(I) = "": rv(I) = "n": uv(I) = "n":EXIT DO
END IF
LOOP
END IF
IF I = 192 THEN
DO
SLEEP 1
ra = Zufall(rndausw)
IF rv(I-1) = "j" AND uv(I-16) = "j" THEN
IF ra = "k3" THEN wege(I) = "k3": rv(I) = "n": uv(I) = "n":EXIT DO
ELSEIF rv(I-1) = "n" AND uv(I-16) = "j" THEN
IF ra = "k4" THEN wege(I) = "k4": rv(I) = "j": uv(I) = "n":EXIT DO
ELSEIF rv(I-1) = "j" AND uv(I-16) = "n" THEN
IF ra = "g1" THEN wege(I) = "g1": rv(I) = "j": uv(I) = "n":EXIT DO
ELSE
IF ra = "" THEN wege(I) = "": rv(I) = "n": uv(I) = "n":EXIT DO
END IF
LOOP
END IF
NEXT I
FOR I = 17 TO 192
bild = ImageCreate(64, 64) 'Bildpuffer der Groesse ... anlegen
BLoad EXEPATH + "\Elemente\" + wege(I) + ".bmp", bild 'Bilddatei in den Puffer laden
PUT (spalte, zeile), bild
ImageDestroy (bild)
spalte += 64
IF spalte > 1000 THEN spalte = 1: zeile += 64
NEXT I
SLEEP
END
FUNCTION Zufall (rndausw AS STRING) AS STRING
DIM Z AS INTEGER
RANDOMIZE TIMER
Z = INT(RND * 25) + 1
IF Z = 1 THEN rndausw = "k1"
IF Z = 2 THEN rndausw = "k2"
IF Z = 3 THEN rndausw = "k3"
IF Z = 4 THEN rndausw = "k4"
IF Z = 5 THEN rndausw = "tk1"
IF Z = 6 THEN rndausw = "tk2"
IF Z = 7 THEN rndausw = "tk3"
IF Z = 8 THEN rndausw = "tk4"
IF Z = 9 THEN rndausw = "g1"
IF Z = 10 THEN rndausw = "g2"
IF Z = 11 THEN rndausw = "xk"
IF Z > 11 THEN rndausw = ""
RETURN rndausw
END FUNCTION
|
|
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4703 Wohnort: ~/
|
Verfasst am: 29.04.2012, 22:59 Titel: |
|
|
Setze das RANDOMIZE [TIMER] auf jeden Fall aus der Funktion heraus an den Anfang des Hauptprogramms. Das ist
a) langsam
b) immer eine Sekunde lang derselbe Startwert (afaik).
Du kannst auch nur RANDOMIZE nehmen, das ist nicht nur sekundengenau. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 29.04.2012, 23:24 Titel: |
|
|
ok das geht hab aber nochmal folgendes geändert
Code: | RANDOMIZE, 3
Z = INT(RND * 50) + 1
|
|
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4703 Wohnort: ~/
|
Verfasst am: 30.04.2012, 00:12 Titel: |
|
|
nochmal, nimm das RANDOMIZE aus der Funktion raus - das initialisiert den Zufallsgenerator, und eine Initialisierung brauchst du in aller Regel nur ein einziges Mal, nämlich am Anfang des Programms. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 03.05.2012, 10:08 Titel: |
|
|
ja hab ich... danke nochmal |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|