BASIC

Author Topic: Type Tutorial (Type erstellen, in Funktionen nutzen und Type in Types)  (Read 3936 times)

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5013
  • O Rly?
    • View Profile
Tutorial über Types :)

Dieses Tutorial richtet sich an Leute, die sich schon ein wenig mit Types auskennen.
Wenn das aber nicht der Fall sein sollte, schau dir bitte die Hilfedatei von GLBasic an und arbeite mit dieser dieses Tutorial durch!
 
So und da es nicht umbedingt der übersichtlichkeit dient, den Code zu zerpflücken hier der Code + Kommentare:

Zuerst ein TYPE machen, dass die Eigenschaften einer Flasche beschreibt:


Code: GLBasic [Select]
//########## FLASCHEN-TYPE #####################
TYPE TFlasche
        name$
        liter
ENDTYPE
 

Möchte man jetzt eine Flaschensammlung machen, definiert man ein Feld von diesen Flaschen:
Code: GLBasic [Select]
LOCAL flaschen[] AS TFlasche
 

Jetzt noch ein TYPE "Kasten", das ein Feld von Flaschen halten kann.

Code: GLBasic [Select]
//########## KÄSTEN-TYPE #######################

TYPE TKasten
        kiste[] AS TFlasche
ENDTYPE

// noch ein Globales Feld an Kästen machen
GLOBAL gKaesten[] AS TKasten
 

Jetzt muss man mal eine Flasche machen, und die mit Inhalt füllen.
Dazu kann man die Flasche an eine Funktion übergeben, die sie füllt:
Code: GLBasic [Select]
LOCAL meineFlasche1 AS TFlasche

FuellFlasche(meineFlasche1, "Karamalz", 0.5)

FUNCTION FuellFlasche: f AS TFlasche, label$, menge
   f.name$ = label$
   f.liter = menge
ENDFUNCTION
 
Die Parameter werden bei TYPEs immer per BYREF übergeben. Es wird also innerhalb der Funktion direkt auf die Flasche zugegrifen, die man übergibt. Nicht eine Kopie der Flasche.

Oder man macht eine Funktion, die eine Flasche zurückgibt.

Code: GLBasic [Select]
// Flaschen erstellen
LOCAL MeineFlasche2 AS TFlasche // Muss gemacht werden, um den Return der Funktion erhalten zu können
MeineFlasche2 = ErstelleFlasche("Blörbräu", 1.0) // Erstelle Flasche, und gib "eine Kopie" davon zurück.

FUNCTION ErstelleFlasche AS TFlasche: name$, liter
// Flaschenvariable erstellen
LOCAL f AS TFlasche
       
        // setze Variablen
        f.name$ = name$
        f.liter = liter
       
        // Flasche erstellen
        DIMPUSH TFlaschen[], f
        // returne FlaschenHandle
        RETURN f
       
ENDFUNCTION  
 

So, jetzt haben wir 2 Flaschen im LOCAL stehen. Die sollen jetzt in einen Kasten rein.

Code: GLBasic [Select]

LOCAL kasten AS TKasten

// Flaschen in Kasten setzen
DIMPUSH MeinKasten, MeineFlasche1
 

oder mit Hilfe einer Funktion:
Code: GLBasic [Select]
SetzeFlascheInKiste(MeinKasten, MeineFlasche2)

FUNCTION SetzeFlascheInKiste: KastenHandle AS TKasten, FlaschenHandle AS TFlasche
        // Flasche in Kasten einfügen
        DIMPUSH KastenHandle.kiste[], FlaschenHandle
ENDFUNCTION
 


So, jetzt noch etwas Code um die Flaschen anzuzeigen:
Code: GLBasic [Select]
WHILE TRUE

        // Gib alle Flaschen im Kasten aus
        ZeigeKistenInhalt(MeinKasten)

SHOWSCREEN
WEND
END

FUNCTION ZeigeKistenInhalt: KastenHandle AS TKasten
       
        FOREACH flasche IN KastenHandle.kiste[]
                PRINT flache.name$,    0, Flasche*20 // Flaschennamen ausgeben
                PRINT flasche.liter, 250, Flasche*20 // Literangabe mit ausgeben
        NEXT
ENDFUNCTION


Um das Ganze noch feucht-fröhlicher zu machen, packen wir den Kasten jetzt in ein Kasten-Feld:
Code: GLBasic [Select]
DIMPUSH gKaesten[], MeinKasten

FOREACH kasten IN gKeasten[]
   // Leere Flaschen rauswerfen
   FOREACH flasche IN kasten
      IF flasche.liter <= 0 THEN DELETE flasche
   NEXT

   // Sauberen Kasten Zeigen
   ZeigeKistenInhalt(kasten)
NEXT
 



Hier nochmal der komplette Code:
Code: GLBasic [Select]
//########## FLASCHEN-TYPE #####################
TYPE TFlasche
        name$
        liter
ENDTYPE
LOCAL flaschen[] AS TFlasche

//########## KÄSTEN-TYPE #######################
TYPE TKasten
        kiste[] AS TFlasche
ENDTYPE

// noch ein globales Feld an Kästen machen
GLOBAL gKaesten[] AS TKasten
LOCAL meineFlasche1 AS TFlasche

FuellFlasche(meineFlasche1, "Karamalz", 0.5)

// Flaschen erstellen
LOCAL MeineFlasche2 AS TFlasche // Muss gemacht werden, um den Return der Funktion erhalten zu können
MeineFlasche2 = ErstelleFlasche("Blörbräu", 1.0) // Erstelle Flasche, und gib "eine Kopie" davon zurück.


LOCAL kasten AS TKasten

// Flaschen in Kasten setzen
DIMPUSH MeinKasten, MeineFlasche1
SetzeFlascheInKiste(MeinKasten, MeineFlasche2)



WHILE TRUE

        // Gib alle Flaschen im Kasten aus
        ZeigeKistenInhalt(MeinKasten)

SHOWSCREEN
WEND
END

FUNCTION FuellFlasche: f AS TFlasche, label$, menge
   f.name$ = label$
   f.liter = menge
ENDFUNCTION

FUNCTION ErstelleFlasche AS TFlasche: name$, liter
// Flaschenvariable erstellen
LOCAL f AS TFlasche
       
        // setze Variablen
        f.name$ = name$
        f.liter = liter
       
        // Flasche erstellen
        DIMPUSH TFlaschen[], f
        // returne FlaschenHandle
        RETURN f
       
ENDFUNCTION

FUNCTION SetzeFlascheInKiste: KastenHandle AS TKasten, FlaschenHandle AS TFlasche
        // Flasche in Kasten einfügen
        DIMPUSH KastenHandle.kiste[], FlaschenHandle
ENDFUNCTION

FUNCTION ZeigeKistenInhalt: KastenHandle AS TKasten
       
        FOREACH flasche IN KastenHandle.kiste[]
                PRINT flache.name$,    0, Flasche*20 // Flaschennamen ausgeben
                PRINT flasche.liter, 250, Flasche*20 // Literangabe mit ausgeben
        NEXT
ENDFUNCTION
 

Bei Fragen einfach drauf los ;)
« Last Edit: 2008-Sep-26 by Schranz0r »
I <3 DGArray's :D

PC:
AMD RYzen 7 1700 @3.9Ghz, 16GB HyperX Fury 2666Mhz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10695
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
Besser kann man's nicht in Bilder packen!
 :booze:

Offline Quentin

  • Prof. Inline
  • *****
  • Posts: 915
    • View Profile
*ggg*
Getränkehandel-Types
aber sehr schön anschaulich erklärt.

Offline WPShadow

  • Administrator
  • Prof. Inline
  • *******
  • Posts: 1667
    • View Profile
    • http://lostrevenant.blogspot.com
Super, Schranzi! thx  =D
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est