Hey Leute, Ich bin dabei C zu lernen und habe eine Frage. Wie kann man ambesten große Mengen an Variablen, welche nur in bestimmten situationen benötigt werden verwalten? Hintergrund: Ich würde gerne ein Textrollenspiel programieren (Ich weis, dass das schwer ist und blie bla blub, ich hoffe trozdem das ich eine gute Antwort bekomme). Es geht darum Werte von Gegner und Items vorab zu bestimmen und diese dan in einer Funktion oder einer Stelle im Program benutzt wird. Ich würde das gerne so Lösen, dass das möglichst wenig Arbeitsspeicher benötigt. Vorab schon mal Danke :)
Sipps R. schrieb: > Hintergrund: Ich würde gerne ein Textrollenspiel programieren (Ich weis, > dass das schwer ist und blie bla blub, ich hoffe trozdem das ich eine > gute Antwort bekomme). Es geht darum Werte von Gegner und Items vorab zu > bestimmen und diese dan in einer Funktion oder einer Stelle im Program > benutzt wird. Sieh in deinem C-Buch im Kapitel nach, in denen es um STrukturen (struct) geht. Das ist das Mittel der Wahl um logisch zusammengehörende Dinge zu strukturieren. Und wenn du dann dabei bist, dann lies in deinem C Buch die 2-te Hälfte in der es um dynamische Speicherverwaltung geht. Wenn du schon am lesen bist, und dein C Buch da ein wenig dürftig aufgestellt ist, dann kauf dir auch noch ein Buch, das sich speziell den Thema 'Datenstrukturen' widmet. Da gibt es eine Unmenge zu lernen. Nicht umsonst ist dieses Thema Stoff für 2 Semester Vorlesungen (samt Übungen) an der Uni. Willkommen in der Programmierung. Jetzt gehts erst richtig los. Alles davor war nur Pipifax.
:
Bearbeitet durch User
Du musst die Daten halt erst dann von der Festplatte laden, wenn sie benötigt werden, und danach wieder den RAM freigeben. Zum Beispiel lädst du immer nur den aktuellen Raum mit seinen Items, Gegnern usw. Die speicherst du im RAM dann in einer entsprechenden Datenstruktur, bei Spielen gerne BSP-Trees o.ä. Mithilfe von malloc/free fragst du RAM an und gibst ihn wieder frei. Pro Tip: Für so komplexe Dinge wie ein Spiel mit Speicherverwaltung und so lohnt es sich eine Programmiersprache zu lernen, die mehr Abstraktions - und Strukturierungsmöglichkeiten bietet als C, wie z.B. Java, ruby, Python (anfängergeeignet) oder C++ (kompliziert aber mächtig).
das mit struktur wusste ich schon. Aber wenn ich sag ich mal 6 Variablen pro Gegenr nutze sind das bei 10 verschiedenden gegner 60 variablen. Und so wie ich das berstanden habe müsste ich die dann ja alle dauerhaft laden, solange die Gegner zufällig kommen sollen oder habe ich das falsch verstanden? bzw. einen Denkfehler? aber schon mal danke für die schnelle Antwort :)
Sipps R. schrieb: > Aber wenn ich sag ich mal 6 Variablen pro Gegenr nutze sind das bei 10 > verschiedenden gegner 60 variablen nein. Das ist "EIN" Array mit 10 Elementen vom type struct.
Sipps R. schrieb: > Aber wenn ich sag ich mal 6 Variablen pro Gegenr nutze sind das bei 10 > verschiedenden gegner 60 variablen. Wenn eine Variable also 4 Byte hat, und einen Rechner mit 4 GB RAM, kannst du nur 170000000 Gegner speichern. Vielleicht reicht das für dein Spiel ja? Dann könntest du einfach alle Gegner permanent im Speicher lassen, ohne mit kompliziertem Nachladen anzufangen...
Dr. Sommer schrieb: > Wenn eine Variable also 4 Byte hat, und einen Rechner mit 4 GB RAM, > kannst du nur 170000000 Gegner speichern. sogar noch viel mehr, SWAP ist auf den meisten Systemen verfügbar. Damit werden gleich Gegner die nicht gebraucht werden ausgelagert.
Sipps R. schrieb: > das mit struktur wusste ich schon. > > Aber wenn ich sag ich mal 6 Variablen pro Gegenr nutze sind das bei 10 > verschiedenden gegner 60 variablen. Und so wie ich das berstanden habe > müsste ich die dann ja alle dauerhaft laden, solange die Gegner zufällig > kommen sollen oder habe ich das falsch verstanden? bzw. einen > Denkfehler? Nein. passt schon. Von nichts kommt nichts. Speicher ist doch heutzutage wirklich kein Problem mehr.
Peter II schrieb: > Sipps R. schrieb: >> Aber wenn ich sag ich mal 6 Variablen pro Gegenr nutze sind das bei 10 >> verschiedenden gegner 60 variablen > > nein. Das ist "EIN" Array mit 10 Elementen vom type struct. Genau. Wobei das Array nicht unbedingt in Stein gemeisselt ist. Das könnte auch eine lineare Liste sein, damit man die Anzahl der zb Spieler nicht schon während der Programmierung festlegen muss. Selbiges mit den Items oder Räumen. Die wird man zb nicht im Programm festlegen (auch wenn man das könnte), sondern beim Programmstart aus einer Datei nachladen. Es kann auch einen bunten Mix geben mit Dingen, die zb bei Programmstart zufällig erzeugt und in den Räumen verteilt werden. Man könnte auch die Räume eines Stockwerks und deren Verbindungen bei Betreten des Stockwerks nach einem Algorithmus generieren. Zudem wird es eine Datei geben, in der der aktuelle Spielstand abgespeichert wird. Alles in allem: Bei so einer Aufgabe wird man letzten Endes alle Register ziehen (müssen) um zum Ziel zu kommen.
:
Bearbeitet durch User
ok danke an alle :) und vorallem für die schnelle Antworten :) Ich denke meine Frage ist damit ausreichend beantwortet.
Sipps R. schrieb: > Ich würde das gerne so Lösen, dass das möglichst wenig Arbeitsspeicher > benötigt. Warum? Ist der Hauptspeicher auf dem System, auf dem Du entwickelst, denn so knapp? Bitte nicht falsch verstehen: Ich sage nicht, dass man Speicherplatz verschwenden soll wie Sau. ;-) Ich bezweifle aber, dass das Dein größtes Problem ist.
Mark B. schrieb: > Ich bezweifle aber, dass das Dein größtes Problem ist. :-) Es sagt sich halt so einfach "Ich will mir das und das selber programmieren". Dann kapriziert man sich auf unwesentliche Details bis man drauf kommt, was da eigentlich alles wirklich dahinter steckt und das was einem Kopfzerbrechen machte, eigentlich noch das Simpelste an der ganzen Sache ist. Aber - das ist der Lernprozess. Sieh es ihm nach. Da mussten wir alle irgendwann einmal durch. Zum jetzigen Zeitpunkt ist das wichtigste erst mal Konzepte zu haben und sich Datenstrukturen zurecht zu legen. Mit 'ein paar Variablen' ist es da nicht getan.
:
Bearbeitet durch User
Karl H. schrieb: > Aber - das ist der Lernprozess. > Sieh es ihm nach. Da mussten wir alle irgendwann einmal durch. Stimmt, da hast Du natürlich Recht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.