Type tut! Von dummies für dummies [BMAX]

Übersicht BlitzMax, BlitzMax NG FAQs und Tutorials

Neue Antwort erstellen

Scyrse

Betreff: Type tut! Von dummies für dummies [BMAX]

BeitragFr, Jul 10, 2009 23:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Einige von euch haben diesen Thread jetzt Warscheinlich und vorallem die Anfänger unter uns voller Vorfreude aufgerufen mit dem Gedanken endlich die Types in BlitzMax verstehen zu können. Entschuldigt den Kopierten-Thread-Titel aus dem BB Bereich aber wieso lassen wir diesen Wunsch nicht wahr werden?
Klar, das einzige was ich hier tun kann ist diesen zugegeben nicht ganz ehrlichen Thread aufzumachen. Das Original befindet sich hier: https://www.blitzforum.de/foru...light=type

Aber seien wir doch mal ehrlich, wenn ich mir die FAQ und Tutorial Kategorie anschaue finden sich hin und wieder Anschneidungen oder Allgemeine-Behandlungen von Types, aber keines was sich ausführlich und Anfänger-Freundlich mit Types beschäftigt. Wieso?
Meine bitte, und ich bin mir da sehr sicher das ich für viele Spreche und bin vom Nutzen absolut überzeugt ist: Schaut euch den Thread den ich oben gelinkt habe an und schreibt ihn doch bitte für BlitzMax in ähnlicher Form, einfach verständlich, so das jemand der sich mit Types in BlitzMax nicht richtig auskennt endlich wirklich verstehen kann worum es dort geht. Ich habe auch ein paar Englische Type-Tuts gelesen und muss sagen ich hatte immer nur das Gefühl das will jemand mit seinem Fach-Wissen / Begriffen glänzen als wirklich Wissen zu vermitteln.
Dieser Thread kann auch einfach ignoriert und gelöscht werden, aber ich hoffe einfach mal das es jetzt nicht Leute gibt die Antworten ist doch garnicht so schwer, oder lass das gespame und soviele andere Antworten die es noch gibt. Ich hoffe das sich jemand der es wirklich verstanden hat und davon gibt es hier wahrlich genug Leute einfach daran macht und eines schreibt.
Nicht nur für mich, ja so selbstlos und unglaubwürdig das auch klingt ich tue das nicht nur für mich, nein ich tuhe das auch für die ganzen anderen Anfängen die immer wieder an dieser Stelle stehen!
Also bitte erhört meinen Wunsch und schreibt ein Solches Tut Idea

Hochachtungsvoll, Vielen Dank,
Scyrse
God is real - unless declared integer.

DaysShadow

BeitragFr, Jul 10, 2009 23:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bastel mal was und hoffe es wird verständlich sein, allerdings nicht ganz dem oben genannten Link ähnlich Wink

MfG DaysShadow
Blessed is the mind too small for doubt

Scyrse

BeitragFr, Jul 10, 2009 23:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Das nenne ich mal Initiative! Super Man danke!
God is real - unless declared integer.

DaysShadow

BeitragSa, Jul 11, 2009 0:50
Antworten mit Zitat
Benutzer-Profile anzeigen
So, ich hab mir Mühe gegeben und hoffe es hilft:

BlitzMax: [AUSKLAPPEN]
SuperStrict 'Verhindert z.b., dass man Typenangaben vergisst, da es eine Fehlermeldung ausgibt; AM BESTEN IMMER BENUTZEN !!!

'Wir sehen Types nun einmal als eine Art Blaupause oder Muster an
'Nehmen wir einmal ein Auto

Type TAuto 'Jede Type-Definierung beginnt mit Type und dem Namen des Types, vorzugsweise mit einem 'T' vor dem Namen

Field PS:Int 'Wir definieren, dass die Blaupause Auto einen Wert/Variable 'PS' besitzt
Field Sitzplaetze:Int 'Und hier noch einen Wert Sitzplätze
Field Tueranzahl:Int, Name:String 'Die Werte können auch nacheinander getrennt mit Kommata aufgeführt werden

'Der Doppelpunkt nach jedem Wert/ jeder Variablen und der Nachfolgende Name sagt uns,
'von welchem 'Type' sich die Variable ableiten soll, so z.b. 'PS' vom 'Type Int' und 'Name' vom 'Type String'
'Wir könnten also 'PS:Int' als 'Variable PS leitet sich vom Type Int' ab lesen, die Variable übernimmt die Blaupause von Int

'So, nun wollen wir ja noch etwas machen mit dem Auto

Method SpezifikationenFestlegen:Int(_PS:Int, _Sitzplaetze:Int, _Tueranzahl:Int, _Name:String)

' 'Method' ist im Prinzip dasselbe wie 'Function', nur dass wir, um die 'Method' aufrufen zu können,
' ein TAuto produziert haben müssen, die Blaupause genügt nicht mehr, aber dazu später noch mehr

' Der Doppelpunkt nach dem Namen der 'Method' besagt hier nicht, dass sich die 'Method' vom 'Type Int' ableitet,
' sondern dass sie eine vom 'Type Int' abgeleitete Variable zurückgibt.
' Die Variablen in den Klammern sollten klar sein, es sind Parameter genauso wie bei 'Function'

'Nun wollen wir ja die Spezifikationen festlegen, also tun wir das mal

PS = _PS ' Wir geben der Variablen PS den Wert des Parameters _PS
Sitzplaetze = _Sitzplaetze ' Dito
Tueranzahl = _Tueranzahl ' Dito
Name = _Name ' Dito Wink

EndMethod ' Auch bei einer 'Method' müssen wir ein Ende festlegen, klar oder?

'Hier noch eine weitere 'Method' mit der wir uns später die Spezifikationen eines produzierten TAuto ausgeben lassen können

Method SpezifikationenAusgeben:Int()

Print "PS: " + PS
Print "Sitzplaetze: " + Sitzplaetze
Print "Türanzahl: " + Tueranzahl
Print "Name: " + Name

EndMethod

' Wichtig ist: 'Method' kann nur von einem produziertem TAuto benutzt werden, nicht von der Blaupause TAuto!
' Eine 'Function' kann allerdings von der Blaupause aufgerufen werden, dass tun wir jetzt auch um ein TAuto zu produzieren

Function Create:TAuto() ' Wir definieren eine 'Function' die, am Doppelpunkt gekennzeichnet, ein produziertes Auto zurückgibt

' Eine 'Function', die innerhalb eines Types, also der Blaupause, definiert werden, können auch, im Gegensatz zur
' Method' von der Blaupause aufgerufen werden, das werden wir gleich sehen

Local a:TAuto = New TAuto ' Wir definieren die Variable 'a', die vom 'Type TAuto' abgeleitet ist und füllen sie mit
' einem produziertem(New) Auto(TAuto)

Return a ' Wir geben die befüllte Variable durch die 'Function' zurück, im Normalfall an eine andere abgeleitete
' Variable vom 'Type TAuto'

EndFunction

EndType ' Blaupausendefinition endet hier!

'Sooo nun zum praktischen Teil!
'Wir haben unsere Blaupause und können nun ein 'Type TAuto' produzieren, das machen wir jetzt auch.

Local ProduziertesAuto:TAuto 'Klare Sache? Wenn nicht, dann nochmal weiter oben nachschauen!

ProduziertesAuto = TAuto.Create() ' Wir rufen die 'Function' 'Create' von der Blaupause 'Type TAuto' auf um ein Auto zu produzieren
' 'Function' oder 'Method' werden mit einem Punkt aufgerufen, dasselbe gilt für Variablen eines 'Type'

' Jetzt geben wir dem Auto noch seine Spezifikationen mit auf den Weg Wink

ProduziertesAuto.SpezifikationenFestlegen(1337, 4, 3, "BlitzMax-Elite")

' Was haben wir hier getan?
' Wir haben die 'Method SpezifikationenFestlegen' des produzierten Autos 'ProduziertesAuto' aufgerufen
' Wir erinnern uns, das geht nur mit einem produzierten TAuto

'Zum Beweis: Wenn ihr nachfolgende Zeile auskommentiert, gibt es eine Fehlermeldung
'TAuto.SpezifikationenFestlegen(1337, 4, 3, "BlitzMax-Elite")

'Lassen wir uns jetzt zur Überprüfung, ob alles geklappt hat, doch einmal die Spezifikationen wieder ausgeben!

ProduziertesAuto.SpezifikationenAusgeben() ' 'SpezifikationenAusgeben' ist ebenfalls eine 'Method' von 'Type TAuto', nicht wahr?

' Jetzt haben wir vorerst alle Fähigkeiten unserer Blaupause bzw. unseres produzierten Autos genutzt!

' Es gibt noch mehr Themen rund um die Types, z.B. Vererbung und Abstrakte Types oder Types mit abstrakten 'Method', das kommt auch noch!
' Solange könnt ihr entweder mit dem gegeben 'Type' herumspielen, ihm etwa noch mehr Spezifikationen geben oder noch mehr 'Method' die andere Dinge tun
'Oder ihr sucht euch selbst ein Objekt aus der Realität und bildet es als 'Type' in BlitzMax ab!


Wenn etwas unverständlich ist dann sagt es und fragt nach, ich helfe gerne und so gut ich kann!
Ich bitte auch die erfahrenen BlitzMax-User, hier mal drüberzulesen und sich ganz dumm zu stellen um zu schauen ob sie es verstehen würden Wink

Ich ging auch davon aus dass Dinge wie "Blaupause" klar sein sollten...nen bissl Wissen setze ich schon vorraus.

MfG DaysShadow

PS: Morgen gehts weiter hoffe ich, ich brauch jetzt aber doch erstmal nen bissl Schlaf Wink
Blessed is the mind too small for doubt
  • Zuletzt bearbeitet von DaysShadow am Sa, Jul 11, 2009 11:34, insgesamt einmal bearbeitet

Scyrse

BeitragSa, Jul 11, 2009 6:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Noch etwas schwer zu verstehen das ich das mit Methode noch garnicht kannte, und was ist Blaupause? Ständig benutzt du dieses Wort oO ? ^^
God is real - unless declared integer.

ComNik

BeitragSa, Jul 11, 2009 9:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Meines Wissens nach ist eine Blaupause ein Bauplan.
Days,glaube ich, versucht hier die Types als Schablonen zu bezeichnen, was durchaus sinn macht!

Denn: jedes objekt wird sozusagen mit dieser schablone "gezeichnet". Da du aber die Fields jedes objekts bestimmen kannst ist es so, als würdest du die mit der schablone gezeichneten bilder unterschiedlich ausmalen können.

mfg
WIP: Vorx.Engine

Der Eisvogel

BeitragSa, Jul 11, 2009 9:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich habe mein Wissen damals hierrüber bekommen:
http://zehr.de/downloads/BlitzMax-OOP.pdf

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

DaysShadow

BeitragSa, Jul 11, 2009 11:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann ich dann davon ausgehen, dass ich mir das weitermachen sparen kann?

MfG DaysShadow
Blessed is the mind too small for doubt

Scyrse

BeitragSa, Jul 11, 2009 12:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, ich möchte gerne mit Listen Arbeiten das tuhe ich am liebsten leider werden diese in dem Tutorial garnicht behandelt weder in dem von dir noch in dem anderen? Ich habe zwar ein paar Beispiele für Listen aber verstehen tuh ich sie noch nicht so richtig Wink
God is real - unless declared integer.

beanage.johannes

Betreff: updatet ( syntax highlight )

BeitragSa, Jul 11, 2009 22:54
Antworten mit Zitat
Benutzer-Profile anzeigen
mein beitrag... joffe es hilft.... + LISTEN

Code: [AUSKLAPPEN]


SuperStrict 'immer benutzen! hilft beim fehlerfinden und bei der ordentlichkeit

'Types

'Lektion 1 ------ PANZER (types)

'wozu types? type sind da wenn du z.b. viele autos zeichnen möchtet die verschieden aussehen und verschieden 'schnell über den bildschirm flitzen sollen...
'um z.B. viele autos zu speichern benutzt man arrays oder listen... aber dazu später und nicht in diesem tut... is 'diesem zuzorial werden wir unsere types in "normalen" variablen abspeichern..
'ein type ist so etwas wie Muster(wie z.b eine exeltabelle mit name,tel.,adresse...) das man immer wieder für den 'selben zweck benutzt, in unserem fall
'geht es um ein Panzer.
'unsere Panzer - vorlage (der type) hat folgende werte:
'kmh , Rüstung  und Schaden

'wir deffinieren einen neuen type und geben ihm den "namen" TPanzer
'die werte die oben aufgelistet sind und die jeder panzer haben soll fügen wir mit >>Field<< hinzu

Type TPanzer

   Field KMH:Int          'Field deffiniert den enuen wert kmh von TPanzer, so hat jeder TPanzer den wir 'päter erstellen immer die selben werte
   Field Ruestung:Float   'Felder (Field) können alle typen sein, in diesem fall eine float (kommazahl)
   Field Schaden:Int

EndType

'fertig ist unser panzer type... um jezt einen neuen panzer zu erstellen machen wir folgendes:

Local Panzer1:TPanzer = New TPanzer 'wir geben panzer1 als typ den type TPanzer, und erstellen dann mit >> = new TPanzer<< einen neuen panzer, der in panzer1 gespeichert wird

'um den variablen kmh,ruestung und schaden ihre werte zu verpassen machen wir folgendes...

Panzer1.KMH = 120 'Der KMH-wert von Panzer1 beträgt jetzt 120... um einen wert dem jeweiligen Field 'zuzuordnen oder es abzurufen schreiben wir die >>variable.field = wert<<
Panzer1.Ruestung = 5.32
Panzer1.Schaden = 342

'alle felder von panzer1 sind nun beschrieben, um sie wieder auszulesen machen wir folgendes...

Print Panzer1.KMH 'gibt den wert des feldes KMH von panzer1 zurück...
Print panzer1.Ruestung
Print panzer1.Schaden

'Lektion 2 ------ ZUG (function)

'nun ist diese methode des beschreibens und auslesens der felder sehr umständliuch besinders wenn man sehr 'viele Felder hat. zu diesem zweck benutzen wir
' >>Method<< und >>Function<<
'eine methode (method) ist eigentlich das selbe wie eine function nur das wir sie nur über einen bereits erstellten 'type aufrufen können.
'um uns die erstellung eins neuen zuges erleichtern zu können benutzen wir eine function.
'wir erstellen dazu erstmal den type zug, mit den felder kmh,laenge,name und gewicht und der function Create, 'die einen neuen zug erstellen und zurückgeben soll.

Type TZug

   Field name:String
   Field KMH:Int
   Field laenge:Int
   Field gewicht:Int

   Function Create:TZug(name:String,kmh:Int,laenge:Int,gewicht:Int) 'wir nennen unsere function create, 'das :TZug steht dafür das sie einen TZug Returnen(zurückgeben) soll

      Local neu:TZug = New TZug 'wir erstelle LOCAL(gilt nur in der function) einen neuen TZug
      
         neu.name = name   'die parameter der function werden jetzt den feldern von neu "übergeben"
         neu.kmh = kmh ' hier auch...
         neu.laenge = laenge 'hier auch...
         neu.gewicht = gewicht  ' und auch hier...
         
      Return neu:TZug 'die var. neu ist jetzt fertig beschrieben mit allen infos über den zug, und wird jetzt 'von der function create zurückgegeben sodas wir extrem schnell und einfach einen neuen zug erstellen können

   EndFunction

EndType

Local ICE:TZug = TZug.Create("ICE 3",320,120,67) 'wir erstellen einen neue TZug variable und rufen unsere 'function Create() von TZug auf um ICE gleich mit daten zu füllen
'soweit sogut... nur um die daten auszugeben und verarbeiten zu können  müssen wir immernoch viel doofen 'code schreiben... bei diesem broblem helfen uns methoden >>method<<
'methoden kann man nur mit einer bereits erstellteten type:variable benutzen, also nicht wie functionen, sonder 'erst wenn die variable deklariert ist und ein neuer z.B. TPanzer in ihr erstellt wurde

'Lektion 3 ----- AUTO (method)

'wir haben diesmal unseren type TAuto mit den feldern KMH und PS und mit der function Create die oben 'erklehrt wird.

Type TAuto

   Field KMH:Int
   Field PS:Int

   Function Create:TAuto(kmh:Int,ps:Int)

      Local neu:TAuto = New TAuto

         neu.kmh = kmh
         neu.ps = ps

      Return neu

   EndFunction
   
   Method PrintWerte() 'das nun ist unsere methode PrintWerte die die werte des types "printen" soll und auch 'wird ;) wie du sicher erkannt hast ist es eigentlich eine function (man kann auch oarameter benutzen usw...) 'nur das sie halt method heist und nur über einen erstellten type ufgerufen werden kann...
                  'man könnte das ganze natürlich auch mit einer function lösen, doch dann 'müsste man als parameter eine TAuto variable reinschreiben damit die function weis um welches TAuto es sich 'denn da handelt..
   
      Print kmh
      Print ps
   
   EndMethod
   
EndType

'so na dann aml testen...

Local Laster:TAuto = TAuto.Create(160,300)

Laster.PrintWerte() ' dei methode wird wie beim abrufen eins feldes über die variable TAuto '"abgerufen/aufgerufen"
'so das wars dann auch schon mit einen noobie guide :D hoffe er hat euch geholfen :)



LISTEN

Code: [AUSKLAPPEN]
'Listen...
'in listen kann man so viele var. wie man möchte abspeichern, auslese, beschreiben usw.
'hier mal ein kleines beispiel mit einem type TComputer

Type TComputer

   Field name:String
   Field os:String
   
   Global ComputerList:TList = CreateList() 'wir speichern die liste  (global damit         
'wir sie von überal aufrufen können) ab
   
   Function Create(name:String,os:String)
   
      Local neu:TComputer = New Tcomputer
         neu.name = name
         neu.os = os
      ListAddLast(ComputerList,neu) 'anstat zu returnen speichern wir sofort in die liste ein.. wir könnten 'auch listaddfirst() um
                              'den neuen computer als ersten zu speichern... -> andere 'reinfolge
   
   EndFunction
   
EndType

For Local i = 0 To 9
   TComputer.Create("computer"+i,"Windows"+Rand(0,100)) 'erstellen ein par computer die sofort in die liste 'gepackt werden
Next

For Local a:TComputer = EachIn TComputer.ComputerList 'und lesen die liste aus... wichtig ist das a ein 'TComputer ist und
                                    'das wir die liste über den type ansprechen 'müssen also TComputer.ComputerList
                                    ' eachin  list jedes listen-element nach der 'reinfolge in der wir es/sie reingepackt haben aus...
   Print a.name
   Print a.os

Next

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG FAQs und Tutorials

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group