Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

FUNCTION ohne Ergebnis

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
braesident



Anmeldungsdatum: 15.04.2008
Beiträge: 189
Wohnort: Berlin

BeitragVerfasst am: 29.04.2012, 21:50    Titel: FUNCTION ohne Ergebnis Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 29.04.2012, 21:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
braesident



Anmeldungsdatum: 15.04.2008
Beiträge: 189
Wohnort: Berlin

BeitragVerfasst am: 29.04.2012, 22:09    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4702
Wohnort: ~/

BeitragVerfasst am: 29.04.2012, 22:59    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
braesident



Anmeldungsdatum: 15.04.2008
Beiträge: 189
Wohnort: Berlin

BeitragVerfasst am: 29.04.2012, 23:24    Titel: Antworten mit Zitat

ok das geht hab aber nochmal folgendes geändert
Code:
    RANDOMIZE, 3
    Z = INT(RND * 50) + 1
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4702
Wohnort: ~/

BeitragVerfasst am: 30.04.2012, 00:12    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
braesident



Anmeldungsdatum: 15.04.2008
Beiträge: 189
Wohnort: Berlin

BeitragVerfasst am: 03.05.2012, 10:08    Titel: Antworten mit Zitat

ja hab ich... danke nochmal
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz