Write-, ReadStructure (3. Update)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Code: Alles auswählen

Struc = "lllffdllllsllll"
c = ReadLong(1)
ClearList(Ant())
For i = 0 To c
  AddElement(Ant())
  ReadStructure(1, Ant(), @Struc)
Next
Ich würde bei Ant() noch ein @ davorsetzen:
ReadStructure(1, @Ant(), @Struc)

Und du weißt auch, dass du einen Datensatz mehr ausliest als c angibt,
weil du in deiner For-Schleife bei 0 beginnst?
Ich hätte eher gedacht, dass da folgendes stehen sollte:

Code: Alles auswählen

Struc = "lllffdllllsllll"
c = ReadLong(1)
ClearList(Ant())
For i = 1 To c
  AddElement(Ant())
  ReadStructure(1, @Ant(), @Struc)
Next
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Ok, vielen dank Leute dank euch funktioniert jetzt die Speichern Funktion in meinem neuen Game!!!

Werde euch bei Gelegenheit lobend erwähnen :)

und natürlich am Gewinn beteiligen :wink:

Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Währe auch super, wenn man in der Struc noch einen Pointer einbauen könnte.

Weiß grad nicht genau wie man sowas genau macht, vielleicht mit Random(), da die wahrscheinlichkeit ja ziemlich klein ist, das zwei Werte übereinstimmen.
Dann müsste das auch irgendwie beim Laden wieder aktualisiert werden...

Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Scarabol hat geschrieben:Währe auch super, wenn man in der Struc noch einen Pointer einbauen könnte.

Weiß grad nicht genau wie man sowas genau macht, vielleicht mit Random(), da die wahrscheinlichkeit ja ziemlich klein ist, das zwei Werte übereinstimmen.
Dann müsste das auch irgendwie beim Laden wieder aktualisiert werden...

Gruß
Scarabol
hä? sorry, noch mal langsam bitte :lol:

... also das mit den Pointern hab ich noch verstanden. Du kannst für nen
Pointern ein "l" schreiben, da PB (noch) 32 Bit ist, ich hatte es mal so
gelöst, das ich per IfCompiler nachgeprüft hab, ob die Strukturgröße für
Pointer 4 oder 8 ist und dann anstelle von "l" nen "q" reinschreiben ließ,
obwohls noch sinnlos ist. Aber egal.

Das was mich stutzig macht ist allerdings, Pointer in zusammenhang mit
dem Speichern. Pointer (Zeiger) sind Adressen von Variablen,
Prozeduren usw. zur Laufzeit des Programms. Diese können nicht
gespeichert werden, bzw. sind diese Adresse dann nutzlos.

War das so gemeint?

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Ja war genau so gemeint, aber die Pointer stehen ja für ein bestimmtes Element, das man zumindest bei Linked Listen als listindex speichern kann.

Aber bei den anderen sieht es wohl nicht so aus als ob man das irgendwie speichern könnte oder?

Gruß
Scarabol

PS
Das die Pointer laufzeitabhängig sind is mir klar.
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Na du musst schon den Inhalt der Variablen speichern.

Wenn du den Inhalt deiner Listenelemente getrennt speicherst, reicht
natürlich der Index des entsprechenden Listindexes. Ich hab mir dein
Spiel erlich gesagt noch nicht angeschaut ... kommt aber sicher nocht <)
... auf jeden fall weis ich nicht, was du wie wo speichern willst. Natürlich
musst du Werte, die mehrmals vorkommen, nicht mehrmals abspeichern,
dann musst du dir aber überlegen, wie du einen "Verweis" in die Datei
bekommst, welchen du auch wieder auslesen kannst.

Hoffe ich hab mich so ausgedrückt, dass du verstehst, was ich meine.
Manchmal hab ich da so meine Talente /:->

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Ein Pointer sieht so aus:

Code: Alles auswählen

*mypointer
Ein Pointer hat niemals den Typ einer einfachen Variable! Lediglich eine
Struktur kann man ihm zuordnen, um das dereferenzieren zu erleichtern, also

Code: Alles auswählen

*mypointer.long
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Ok danke Leute,

werd den Listenindex speichern.

@PMV
Ist nicht so schlimm, ist alles sowieso noch BETA, also kaum spielbar.

Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Hallo Leute,

hab noch eine Idee zum Code, da der Programmierer an sich ja eher dazu neigt alles zu automatisieren und bequem zu halten, wiedert es mich regelrecht an bei jeder Änderung der Struktur (was im Moment sehr häufig vorkommt, da BETA) den String zu ändern.
Bitte daher um Abhilfe...

Achja nochwat in meinen Strukturen verwende ich nur Float, Long, und Strings, die ja alle 4 Byte belegen, aber wie muss ich die Procs dafür ändern???

Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Es gibt keine Abhilfe, mit der man den String weglassen kann oder mit der er
sich automatisch generiert. Außer du schreibst dir ein Programm, das deine
Strukturen als PB-Code einliest und den zugehörigen String ausgibt.

Wenn du nur Floats, Longs und Strings benutzt, dann streich die anderen
Sachen einfach raus. Du siehst ja wie das mit 'Select' umgesetzt ist. Aber im
Grunde erfährst du keinen sonderlichen Geschwindigkeitszuwachs, wenn du
das, was du nicht benutzt, raus nimmst. Lass es doch einfach drin.
Antworten