[GELÖST] Type-variable in Funktion aufrufen?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

CO2

ehemals "SirMO"

Betreff: [GELÖST] Type-variable in Funktion aufrufen?

BeitragMo, Okt 31, 2011 21:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
habe mal wieder ein schwer zu erklärendes Problem Embarassed Very Happy Also: Ich habe eine Funktion, die Statistiken ausgibt. Diese Funktion hat als einzigen Parameter den Profilnamen (also den Objektnamen). Die Funktion lautet "UpdateStats".
(Hier der Code: BlitzMax: [AUSKLAPPEN]
Function UpdateStats(ProfileName:Object)
Local Profilereg:TStream
Profilereg = OpenFile("core\profiles0.dat")
If(Profilereg = 0)
CreateProfile(ProfileName)
Else
Repeat
Local profile:String = ReadLine(Profilereg)
If(profile = ProfileName)
Exit
EndIf
If(Eof(Profilereg))
CreateProfile(ProfileName)
Exit
EndIf
Forever
EndIf
Local settingsfile:TStream
settingsfile = OpenFile("core\settings.ini")
ReadLine(settingsfile)
ReadLine(settingsfile)
ReadLine(settingsfile)
ReadLine(settingsfile)
ReadLine(settingsfile)
Local userdatafile = ReadLine(settingsfile)
Local statsfile:TStream
statsfile = OpenFile(userdatafile + "\USERDATA\" + ProfileName + "\stats.txt")
WriteLine(statsfile, "Spielerstatistik:")
WriteLine(statsfile, "-----------------")
WriteLine(statsfile, "")
WriteLine(statsfile, "Abgeschlossene Missionen: " + ProfileName.abgeschlossene_missionen)
WriteLine(statsfile, "Anzahl Missionen : " + "NULL")
WriteLine(statsfile, "Fortschritt (%) : " + "NULL")
WriteLine(statsfile, "")
WriteLine(statsfile, "Abgefeuerte Kugeln : " + ProfileName.abgefeuerte_kugeln)
WriteLine(statsfile, "Kugeln die trafen : " + ProfileName.kugeln_die_trafen)
WriteLine(statsfile, "Zielgenauigkeit (%) : " + (Int(100 / ProfileName.abgefeuerte_kugeln * ProfileName.kugeln_die_trafen)))
WriteLine(statsfile, "Lieblingswaffe : " + "NULL")
WriteLine(statsfile, "")
WriteLine(statsfile, "Gelaufene Meter : " + ProfileName.gelaufene_meter)
WriteLine(statsfile, "Gefahrene Meter : " + ProfileName.gefahrene_meter)
WriteLine(statsfile, "(Am meisten gefahren mit: " + "NULL" + ")")
WriteLine(statsfile, "Gesamt : " + (ProfileName.gelaufene_meter + ProfileName.gefahrene_meter))
WriteLine(statsfile, "")
WriteLine(statsfile, "Getötete Zombies : " + ProfileName.getoetete_zombies)
WriteLine(statsfile, "Getötete Menschen : " + ProfileName.getoetete_menschen)
WriteLine(statsfile, "Gesamt : " + (ProfileName.getoetete_zombies + ProfileName.getoetete_menschen))
WriteLine(statsfile, "")
WriteLine(statsfile, "Cheats benutzt : " + Profilename.cheatsbenutzt)
WriteLine(statsfile, "")
WriteLine(statsfile, "")
WriteLine(statsfile, "Ränge und Auszeichnungen:")
WriteLine(statsfile, "-------------------------")
CloseFile(statsfile)
End Function
)
So, 1. Frage: Muss der Parameter vom Typ "String" sein?
2. Frage: Was ist, wenn ich wie oben angegeben den Parameter vom Typ "Objekt" mache (habe das iwo gesehen, ich weiß aber nicht, was das dann macht Very Happy)

Dann der untere teil (Da wo alles in die Datei reingeschrieben wird): Kann das so funktionieren?

ich hoffe ihr könnt mir helfen,
mfG,
CO2
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
  • Zuletzt bearbeitet von CO2 am Do, Nov 03, 2011 1:15, insgesamt einmal bearbeitet

ZEVS

BeitragMo, Okt 31, 2011 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Casten vermittels [Typename](Object), also z.B.
BlitzMax: [AUSKLAPPEN]
If(profile = String(ProfileName))

Damit muss es nicht Typ String sein.

ZEVS

Xeres

Moderator

BeitragMo, Okt 31, 2011 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein Object ist jeder Type und Strings. Du kannst bei LoadImage statt einem Pfad auch eine Bank oder eine Pixmap angeben - ob das für deinen Pläne Sinn macht, musst du entscheiden.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

CO2

ehemals "SirMO"

BeitragDi, Nov 01, 2011 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstmal vielen Dank für die Antworten Wink

@ ZEVS:
Ach, man kann auch nach "String" casten? Ich dachte das geht nur von "Int" nach "Float" und zurück Very Happy
Ok, damit hätte sich das Problem mit der Namenkontrolle (ziemlich weit oben im Code, nachdem die "profiles0.dat" geöffnet wird) erledigt.

@ Xeres:
Also ich erwarte ja als Parameter einen Objektnamen, also z.b.: Ich habe einen Type gemacht, er heißt "Profile". Darin ist alles enthalten, was in der obigen Funktion in die Datei reingeschrieben werden soll. Wenn ich jetzt ein Objekt beispiel BlitzMax: [AUSKLAPPEN]
test123:Profile = New Profile
vom Typ "Profile" mache, und diese Funktion aufrufe, dann erwarte ich als Parameter quasi den Objekt namen (In diesem Fall "test123"). Ist die Funktion dann so richtig? Oder von welchem Type müsste der Parameter sein, damit das geht? Also nochmal zum besseren Verständins: Im Code sollte das hinterher wie folgt aussehen (wenn man die Statistiken von "test123" in die Datei schreiben möchte): BlitzMax: [AUSKLAPPEN]
UpdateStats(test123)


mfG,
CO2
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Xeres

Moderator

BeitragDi, Nov 01, 2011 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
"test123" ist die Bezeichnung der Variable. Wenn du die benutzen willst, musst du das Reflection Modul benutzen. Das ginge wohl einfacher und schneller, wenn die Bezeichnung schon als String vorliegt.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

CO2

ehemals "SirMO"

BeitragMi, Nov 02, 2011 13:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, danke dir, Xeres.

Ich habe mir jetzt ein wenig das Modul angeschaut, komme aber bei folgendem Beispielcode in der bbdoc nicht weiter:
BlitzMax: [AUSKLAPPEN]
Strict

Type TMyType
Field x,y,z
End Type

Local id:TTypeId=TTypeId.ForName( "TMyType" )

For Local fld:TField=EachIn id.EnumFields()
Print fld.Name()+":"+fld.TypeId().Name()
Next

unter dem Code steht der folgende Satz: Zitat:
This simple program will print "x:Int", "y:Int" and "z:Int" - the names and types of the fields within TMyType. Note that this is done without actually creating a new TMyType.

- Also exakt das, was ich brauche. Nun kommt aber das Problem: Hier wird nirgendwo der "Objektname" (in meinem obigen Post "test123") geschrieben, sondern lediglich der Type-Name ("TMyType"). Wo müsste hier der Objektname stehen? kann der überhaupt in diesem Code benutzt werden?

mfG,
CO2
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Xeres

Moderator

BeitragMi, Nov 02, 2011 13:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Mh, das Reflection Modul kennt nur die Objekte und ihre Inhalte, nicht die Variablen, in denen sie Referenziert werden.
Warum nimmst du keine Strings? Ein Field "Name" sollte doch auch kein Problem sein.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

ZEVS

BeitragMi, Nov 02, 2011 15:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Reflection-Module mag ja ganz nett sein, aber man kommt auch ohne es aus.
Der Fall test123 zeugt meiner Meinung nach von schlechter Programmierung: Wieso willst du die Namen der Profile im Sourcecode angeben? Und wieso benutzt du keine Maps oder Arrays? Du kannst doch einfach alle Profile in einem Array speichern und beim Lesen/Schreiben der Datei die Array-Indizes verwenden (am besten mit dem Objekt speichern). Die Verarbeitung von Strings ist im Vergleich zur Zahlenverarbeitung eher langsam.
Außerdem: Willst du mit Variablen oder Variablennamen arbeiten? Du widersprichst dir selbst:
Zitat:
Parameter quasi den Objekt namen (In diesem Fall "test123")

vs.
Zitat:
BlitzMax: [AUSKLAPPEN]
UpdateStats(test123)

Letzterer Fall kommt ohne jede Reflektion aus. Zwar hat das Profil immernoch überflüssigerweise eine eigene Variable, doch sparst du dir das Suchen nach Werten, die du eigentlich schon hast.

ZEVS
 

CO2

ehemals "SirMO"

BeitragMi, Nov 02, 2011 21:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die Antworten!

@ Xeres:
Zitat:
Warum nimmst du keine Strings? Ein Field "Name" sollte doch auch kein Problem sein.
Ich möchte ja über angabe von dem Namen an die anderen werte im Objekt kommen. Also der Parameter der Funktion erwartet den Objektnamen und die Funktion ließt dann eigenständig alle anderen Daten aus dem betreffenden Objekt aus. So hatte ich es geplant.

@ ZEVS:
Das war nur ein Beispiel. In Echt würde es wohl wie folgt aussehen:
BlitzMax: [AUSKLAPPEN]
Global Playername:String = "Spieler1"

Aber mal eine Frage: Wie meinst du das mit dem Array? Soll ich ein Array statt einem Type anlegen, welches dann soviele Felder hat, wie ich brauche? Also als Beispiel: Ich brauche 3 Felder: Name, Zu letzt gespielte Mission und eliminierte Gegner. Soll ich dann ein Array machen, welches wie folgt aufgebaut ist? BlitzMax: [AUSKLAPPEN]
Profil[2]:String
Und was mache ich, wenn es mehrere Profile gibt (2 ober 3 oder ...)
Ich weiß erlich gesagt noch nicht, was besser ist: mit Variablenname oder mit Variablenwert... Weil ich ja gewissermaßen beides in der Funktion brauche: Einmal den Variablenwert, um herauszufinden, ob das Profil überhaupt existiert und einmal den Variablennamen, um die entsprechenden Fields im Type anzusprechen...

bin ein wenig ratlos...

mfG,
CO2
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

ZEVS

BeitragMi, Nov 02, 2011 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mit dem Type ist schon in Ordnung. Nur halt nicht jedes Profil in einer eigenen Variable sondern in einem Array, einer List oder einer Map.
Zitat:
Ich weiß erlich gesagt noch nicht, was besser ist: mit Variablenname oder mit Variablenwert

Variablennamen sind was für den Editor (ok, es gibt Reflection, trotzdem sollte man sich an diesen Grundsatz halten).
Profilnamen sind 1. etwas für's Spiel und 2. eine unabhängige Eigenschaft des Profils. Wieso also kein Field "Name"? Um den Zugriff über Namen zu vereinfachen (falls du das brauchst), kannst du Maps benutzen.
Zitat:
Einmal den Variablenwert, um herauszufinden, ob das Profil überhaupt existiert und einmal den Variablennamen, um die entsprechenden Fields im Type anzusprechen...

Hoffentlich nur ein kleiner Dreher.


ZEVS
 

CO2

ehemals "SirMO"

BeitragMi, Nov 02, 2011 21:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die Antwort

Achso, du meinst quasi sowas wie eine ID? Nur halt, das der Profilname in diesem Fall die ID ist. Oder wie?
Ok, Und dann kann ich in einer If-Abfrage prüfen, ob die richtigen Werte im Type angefragt werden, oder was?

Zitat:
Hoffentlich nur ein kleiner Dreher.

Wieso, ist doch so richtig:
Zitat:
den Variablenwert, um herauszufinden, ob das Profil überhaupt existiert
- Also wenn ich eine Variable BlitzMax: [AUSKLAPPEN]
Global Name:String = "BlaBlaBla"
habe, dann kontrolliere ich mit dem Variablenwert (in diesem Fall "BlaBlaBla"), ob das Profil bereits existiert, wärend ich mit Zitat:
den Variablennamen, um die entsprechenden Fields im Type anzusprechen...
(in diesem Fall "Name") den Type ansprechen möchte...

mfG,
CO2
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Xeres

Moderator

BeitragMi, Nov 02, 2011 22:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie verwaltest du denn deine Objekte überhaupt? Sowohl mit einer Liste als auch einer Map in der alle Objekte stehen, kannst du das passende heraussuchen...
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

ZEVS

BeitragMi, Nov 02, 2011 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Achso, du meinst quasi sowas wie eine ID?

Bingo!
Alternativ kann man auch Ints für Profil-IDs verwenden, das ist schneller.
Zitat:
kontrolliere ich mit dem Variablenwert (in diesem Fall "BlaBlaBla"), ob das Profil bereits existiert

Missverständnis: Ich dachte, du redest von einem Object eines Types a là TProfile.
Zitat:
den Variablennamen, um die entsprechenden Fields im Type anzusprechen...
(in diesem Fall "Name") den Type ansprechen möchte

Was nun, Field oder Type? Auf jeden Fall sind Variablennamen etwas für den Editor. Für den Zugriff:
Variablenwert (Profilname) + Map -> Profilobjekt.

Ich weiß ja nicht, was du sonst noch so geschrieben hast, aber ich denke, wir werden dir gezielter und umfassender helfen können, je mehr Code du uns spendierst.

ZEVS
 

CO2

ehemals "SirMO"

BeitragMi, Nov 02, 2011 22:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Wiedermal danke für die Antworten Wink

@ Xeres:
Ich denke, ich werde Listen benutzen Wink

@ ZEVS:
Zitat:
Was nun, Field oder Type?
- Field natürlich Very Happy

Ok, dann gebe ich mal Code: Die Funktion steht ja bereits im obigen Post, aber der Vollständigkeit halber: BlitzMax: [AUSKLAPPEN]
Function UpdateStats(ProfileName:String)
Local Profilereg:TStream
Profilereg = OpenFile("core\profiles0.dat")
If(Profilereg = 0)
CreateProfile(ProfileName)
Else
Repeat
Local profile:String = ReadLine(Profilereg)
If(profile = ProfileName)
Exit
EndIf
If(Eof(Profilereg))
CreateProfile(ProfileName)
Exit
EndIf
Forever
EndIf
Local settingsfile:TStream
settingsfile = OpenFile("core\settings.ini")
ReadLine(settingsfile)
ReadLine(settingsfile)
ReadLine(settingsfile)
ReadLine(settingsfile)
ReadLine(settingsfile)
Local userdatafile = ReadLine(settingsfile)
Local statsfile:TStream
statsfile = OpenFile(userdatafile + "\USERDATA\" + ProfileName + "\stats.txt")
WriteLine(statsfile, ProfileName)
WriteLine(statsfile, "------------")
WriteLine(statsfile, "")
WriteLine(statsfile, "Spielerstatistik:")
WriteLine(statsfile, "-----------------")
WriteLine(statsfile, "")
WriteLine(statsfile, "Abgeschlossene Missionen: " + ProfileName.abgeschlossene_missionen)
WriteLine(statsfile, "Anzahl Missionen : " + "Null")
WriteLine(statsfile, "Fortschritt (%) : " + "Null")
WriteLine(statsfile, "")
WriteLine(statsfile, "Abgefeuerte Kugeln : " + ProfileName.abgefeuerte_kugeln)
WriteLine(statsfile, "Kugeln die trafen : " + ProfileName.kugeln_die_trafen)
WriteLine(statsfile, "Zielgenauigkeit (%) : " + (Int(100 / ProfileName.abgefeuerte_kugeln * ProfileName.kugeln_die_trafen)))
WriteLine(statsfile, "Lieblingswaffe : " + "NULL")
WriteLine(statsfile, "")
WriteLine(statsfile, "Gelaufene Meter : " + ProfileName.gelaufene_meter)
WriteLine(statsfile, "Gefahrene Meter : " + ProfileName.gefahrene_meter)
WriteLine(statsfile, "(Am meisten gefahren mit: " + "NULL" + ")")
WriteLine(statsfile, "Gesamt : " + (ProfileName.gelaufene_meter + ProfileName.gefahrene_meter))
WriteLine(statsfile, "")
WriteLine(statsfile, "Getötete Zombies : " + ProfileName.getoetete_zombies)
WriteLine(statsfile, "Getötete Menschen : " + ProfileName.getoetete_menschen)
WriteLine(statsfile, "Gesamt : " + (ProfileName.getoetete_zombies + ProfileName.getoetete_menschen))
WriteLine(statsfile, "")
WriteLine(statsfile, "Cheats benutzt : " + Profilename.cheatsbenutzt)
WriteLine(statsfile, "")
WriteLine(statsfile, "")
WriteLine(statsfile, "Ränge und Auszeichnungen:")
WriteLine(statsfile, "-------------------------")
CloseFile(statsfile)
End Function


Und noch der Type + "Besetzungsroutine":
BlitzMax: [AUSKLAPPEN]
Include "core\fcn\user.bmx" 'Funktion Includieren

SeedRnd(MilliSecs())

Type Profile
Field ID:Int
Field Name:String
Field abgeschlossene_missionen:Int
Field abgefeuerte_kugeln:Int
Field kugeln_die_trafen:Int
Field gelaufene_meter:Int
Field gefahrene_meter:Int
Field getoetete_zombies:Int
Field getoetete_menschen:Int
Field cheats_benutzt:Int
End Type

Global Profilelist:TList = CreateList()

'TEST
Global Profilenumber:Int = 10

For Local x = 0 To Profilenumber
Local NewProfile:Profile = New Profile
NewProfile.ID = x
NewProfile.Name = "Name" + x
NewProfile.abgeschlossene_missionen = Rand(0, 100)
NewProfile.abgefeuerte_kugeln = Rand(500, 10000)
NewProfile.kugeln_die_trafen = NewProfile.abgefeuerte_kugeln - Rand(0, 1000)
NewProfile.gelaufene_meter = Rand(0, 300000)
NewProfile.gefahrene_meter = Rand(0, 300000)
NewProfile.getoetete_zombies = Rand(0, 5000)
NewProfile.getoetete_menschen = Rand(0, 20)
NewProfile.cheats_benutzt = Rand(0, 100)
ListAddLast(Profilelist, NewProfile)
Next
'TEST ENDE


mfG,
CO2
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Xeres

Moderator

BeitragMi, Nov 02, 2011 22:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Außer, das Globale Liste und Funktionen alle in den Type gehören, sehe ich wirklich kein Problem.
Kannst du nicht die passenden Objekte finden, oder was ist nun die Frage?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

CO2

ehemals "SirMO"

BeitragMi, Nov 02, 2011 23:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Kannst du nicht die passenden Objekte finden, oder was ist nun die Frage?
Ich weiß nicht, wie ich die passenden Objekte Finden kann Wink

Aber wie meinst du das? Zitat:
das Globale Liste und Funktionen alle in den Type gehören


mfG,
CO2
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Xeres

Moderator

BeitragMi, Nov 02, 2011 23:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein Code kurz umgeschrieben:
BlitzMax: [AUSKLAPPEN]
SuperStrict

SeedRnd(MilliSecs())

Type TProfile
Field ID:Int
Field Name:String
Field abgeschlossene_missionen:Int
Field abgefeuerte_kugeln:Int
Field kugeln_die_trafen:Int
Field gelaufene_meter:Int
Field gefahrene_meter:Int
Field getoetete_zombies:Int
Field getoetete_menschen:Int
Field cheats_benutzt:Int

Global List:TList = CreateList()

Function Create(x:Int)
Local NewProfile:TProfile = New TProfile
NewProfile.ID = x
NewProfile.Name = "Name" + x
NewProfile.abgeschlossene_missionen = Rand(0, 100)
NewProfile.abgefeuerte_kugeln = Rand(500, 10000)
NewProfile.kugeln_die_trafen = NewProfile.abgefeuerte_kugeln - Rand(0, 1000)
NewProfile.gelaufene_meter = Rand(0, 300000)
NewProfile.gefahrene_meter = Rand(0, 300000)
NewProfile.getoetete_zombies = Rand(0, 5000)
NewProfile.getoetete_menschen = Rand(0, 20)
NewProfile.cheats_benutzt = Rand(0, 100)

TProfile.List.AddLast(NewProfile)
End Function

Function GetByName:TProfile(_name:String)
For Local p:TProfile = EachIn TProfile.List
If p.Name = _name Then Return p
Next
Return Null
End Function
End Type

'TEST
Global Profilenumber:Int = 10

For Local x:Int = 0 To Profilenumber
TProfile.Create(x)
Next

Local Profile_5:TProfile = TProfile.GetByName("Name5")
If Profile_5 Then
Print(Profile_5.Name)
Else
Print("Nicht gefunden!")
EndIf
Die Funktion "GetByName" sucht zu einem Namen den passenden Eintrag aus der Liste. Mit sehr vielen Einträgen wäre eine Map da schneller - sollte aber so erst mal auch funktionieren.

Den richtigen Scope bekommst du mit TypeName.Funktions/GlobalenName.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

CO2

ehemals "SirMO"

BeitragDo, Nov 03, 2011 0:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich danke dir.

Aber ich steh gerade trotzdem ein wenig auf dem Schlauch Embarassed
Also: Was muss ich denn machen, wenn ich die anderen Felder rauskriegen möchte? Also ich habe jetzt via "GetByName()" Das das Objekt mit dem Namen existiert, aber wie kriege ich von dem Objekt nun z.B.: das Feld "benutzte_Cheats" heraus?

Und müsste dann die Funktion zum Statistiken - aufschreiben auch im Type stehen?

mfG,
CO2
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Xeres

Moderator

BeitragDo, Nov 03, 2011 0:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Felder sind dir doch bekannt? Die Frage würde sich nur stellen, wenn das Objekt nicht in jedem Fall ein TProfile-Objekt wäre. Den Wert bekommst du durch direktes zugreifen z.B. Profile_5.cheats_benutzt oder über eine Getter-Methode, wenn dir das lieber ist.
Es wäre sinnvoll die Funktion in den Type zu kapseln, gezwungen bist du nicht.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

CO2

ehemals "SirMO"

BeitragDo, Nov 03, 2011 1:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso, ja, jetzt fällt es mir wie schuppen von den Augen Very Happy

Ich danke allen, die halfen,
mfG,
CO2
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group