Gamestudio Links
Zorro Links
Newest Posts
Trading Journey
by M_D. 04/26/24 20:22
Help with plotting multiple ZigZag
by M_D. 04/26/24 20:03
Data from CSV not parsed correctly
by jcl. 04/26/24 11:18
M1 Oversampling
by jcl. 04/26/24 11:12
Why Zorro supports up to 72 cores?
by jcl. 04/26/24 11:09
Eigenwerbung
by jcl. 04/26/24 11:08
MT5 bridge not working on MT5 v. 5 build 4160
by EternallyCurious. 04/25/24 20:49
Zorro FIX plugin - Experimental
by flink. 04/21/24 07:12
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
1 registered members (AndrewAMD), 816 guests, and 2 spiders.
Key: Admin, Global Mod, Mod
Newest Members
wandaluciaia, Mega_Rod, EternallyCurious, howardR, 11honza11
19049 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 1 of 3 1 2 3
[solved] struct-Name per Laufzeit erstellen #383157
09/16/11 15:48
09/16/11 15:48
Joined: Dec 2003
Posts: 988
Germany, Magdeburg
JoGa Offline OP
User
JoGa  Offline OP
User

Joined: Dec 2003
Posts: 988
Germany, Magdeburg
Hey

Ich hab wiedermal ein Problem, an dem ich jetzt schon den Nachmittag knabbere und nicht drauf komme:

Ich hab ein struct angelegt, mit dem ich die Gegenstände verwalten kann, die in meinem Spiel anfallen.
Das Struct "Gegenstand" habe ich mit verschiedenen Pointern, wie zum Beispiel Gegenstand.kosten als int oder Gegenstand.Beschreibung als string.

Nun sollen Gegenstände mit einem Algorythmus generiert werden. Die "Eigenschaften" der Gegenstände sollen zufällig sein.
zB. zufällige Kosten.
Das macht mir keine Probleme, doch müsste ich die Gegenstände ja vorher mit einem Namen "deklarieren"(?).
Dh. ich muss den programminternen Namen generieren und dann die Pointer/Gegenstände durch den Struct initialisieren:

Gegenstand* xyz = {...}

Wie kann ich jetzt den Namen "xyz" des Gegenstandes per Laufzeit festlegen? Als string geht nicht, hab ich schon versucht.

Last edited by JoGa; 09/21/11 16:12.
Re: [solved] struct-Name per Laufzeit erstellen [Re: JoGa] #383161
09/16/11 16:21
09/16/11 16:21
Joined: May 2002
Posts: 7,441
ventilator Offline
Senior Expert
ventilator  Offline
Senior Expert

Joined: May 2002
Posts: 7,441
sowas funktioniert nur in dynamischen sprachen wie z.b. python.

in c musst du das anders lösen. ich würde den namen im struct speichern, die structs in einem array (oder einer liste) ablegen und darauf mit einer funktion wie get_struct("xyz") zugreifen.

Re: [solved] struct-Name per Laufzeit erstellen [Re: ventilator] #383163
09/16/11 17:42
09/16/11 17:42
Joined: Dec 2003
Posts: 988
Germany, Magdeburg
JoGa Offline OP
User
JoGa  Offline OP
User

Joined: Dec 2003
Posts: 988
Germany, Magdeburg
hm, okay, schade.
Aber vielen Dank für deine Erläuterung. Jedoch ist mir dann nicht klar, wie ich die structs dann per Laufzeit benennen kann, da ja wärend dem Spiel immer wieder neue erstellt werden, dessen Namen ich beim Programmieren ja selbst noch nicht kenne.

Da muss ich noch etwas darüber grübeln ^^

Last edited by JoGa; 09/16/11 17:43.
Re: [solved] struct-Name per Laufzeit erstellen [Re: JoGa] #383174
09/16/11 19:19
09/16/11 19:19
Joined: Jul 2008
Posts: 894
T
TechMuc Offline
User
TechMuc  Offline
User
T

Joined: Jul 2008
Posts: 894
versteh gar nicht was du willst laugh

Füg doch einfach ein attribut hinzu.

Code:
sruct object
{
   STRING* name;
   //...
};

function create_random_object()
{
  object* obj  = malloc(sizeof(object));
  obj->name = str_create("#512");
  str_cpy(obj->name,_str("test"));
}



Oder was willst du wirklich erreichen?

Re: [solved] struct-Name per Laufzeit erstellen [Re: TechMuc] #383176
09/16/11 20:11
09/16/11 20:11
Joined: Jul 2001
Posts: 6,904
H
HeelX Offline
Senior Expert
HeelX  Offline
Senior Expert
H

Joined: Jul 2001
Posts: 6,904
@TechMuc: in deiner Methode solltest du das Objekt auch zurückgeben sonst kann da ja keiner zugreifen wink

@JaGo: Also generell würde ich dir ans Herz legen, eine verkettete Liste anzulegen, die zur Verwaltung deiner Objekte eingesetzt wird. Eine verkettete Liste deshalb, weil du ja beliebig viele haben willst. Dann erzeugst du, wie TechMuc zeigte, deine Objekte und speicherst in einem String den Namen des Objektes. Dann, wenn du drauf zugreifen willst, gehst du durch deine verkettete Liste, überprüfst den String des Objektes, das du haben willst, mit jedem Objekt-String und dann irgendwann bist du entweder durch und hast nix gefunden oder das Objekt, dass du wolltest.

Das wars dann auch schon! Oder??

Re: [solved] struct-Name per Laufzeit erstellen [Re: HeelX] #383177
09/16/11 20:23
09/16/11 20:23
Joined: Jul 2008
Posts: 894
T
TechMuc Offline
User
TechMuc  Offline
User
T

Joined: Jul 2008
Posts: 894
Ja ehrlich gesagt, bin ich nur einfach ziemlich irritiert von der Antwort von Ventilator, und noch mehr irritiert von der Frage grin

Re: [solved] struct-Name per Laufzeit erstellen [Re: HeelX] #383178
09/16/11 20:33
09/16/11 20:33
Joined: Dec 2003
Posts: 988
Germany, Magdeburg
JoGa Offline OP
User
JoGa  Offline OP
User

Joined: Dec 2003
Posts: 988
Germany, Magdeburg
das mit der verketteten Liste ist ein gutes Stichwort, da werd ich mich morgen einlesen. Vielen Dank!

@Techmuc: Mein Problem ist, dass ich nicht verstehe, wie ich vorgehen soll, wenn ich mehrere zufällig generierte Objekte habe, de ich handhaben muss.
Stell dir vor, der Spieler öffnet eine Truhe und es fallen 5 zufällig generierte Objekte raus - dann hab ich ja nach deinem Beispiel 5 mal den Pointer "obj"?
Das ist das, was mir nicht in die Gehirnwindungen will, wie ich die Pointer dann unterscheiden kann.

Re: [solved] struct-Name per Laufzeit erstellen [Re: TechMuc] #383180
09/16/11 20:42
09/16/11 20:42
Joined: May 2002
Posts: 7,441
ventilator Offline
Senior Expert
ventilator  Offline
Senior Expert

Joined: May 2002
Posts: 7,441
Originally Posted By: TechMuc
Ja ehrlich gesagt, bin ich nur einfach ziemlich irritiert von der Antwort von Ventilator, und noch mehr irritiert von der Frage grin
wieso? ich hab genau das gleiche gemeint wie heelx. laugh nur weniger detailiert erklärt...

Quote:
sowas funktioniert nur in dynamischen sprachen wie z.b. python.
damit hab ich nur gemeint, dass in dynamischen sprachen strings verwendet werden können um objekte zu erzeugen oder darauf zuzugreifen. sinn machen tut das aber eh selten...

Re: [solved] struct-Name per Laufzeit erstellen [Re: JoGa] #383181
09/16/11 20:46
09/16/11 20:46
Joined: Jul 2008
Posts: 894
T
TechMuc Offline
User
TechMuc  Offline
User
T

Joined: Jul 2008
Posts: 894
Hallo Joga,

Okay ich verstehe deine Gehirnwindungen noch nicht so ganz, aber wir kommen der Sache näher wink
Wenn du eine Kiste hast, aus der kommen 5 Entites raus wird deine Struktur ja vermutlich in etwa so aussehen:

Code:
struct Object {
  ENTITY* p_entity; //entity pointer
  //weitere daten
};



Für jedes Objekt aus der Truhe muss mindestens ein Alloc Befehl ausgeführt werden. Beispiel:

Code:
Object* obj = malloc(sizeof(Object));
obj->p_data = ent_create(...);
obj->weitere_daten = ...;



Das Objekt exisitiert jetzt erstmal und its direkt mit dem Entity verbunden. Kannst dann per typecast darauf zugreifen.. E.g.

Code:
//get object of entity
Object* p_data = (Object*)(ENTITY*)any_ent;



Und so weitere daten aus der Struktur ziehen. Achtung: Das geht nur weil "ENTITY" an erster stelle in der Struktur steht...

so jetzt verstehe ich immer noch nicht so ganz genau was deine Frage ist laugh

Quote:
Das ist das, was mir nicht in die Gehirnwindungen will, wie ich die Pointer dann unterscheiden kann.

Die Pointer unterscheidest du, indem die Pointer unterschiedliche Werte haben und auf unterschiedliche Objekte zeigen. Diese Objekte können dann natürlich auch unterschiedliche Werte haben.

Wenn du außerhalb von bestimmten Events (wie z.B. mausklick o.ä.) auf die Entities zugreifen willst, musst du die Struktur noch in einem Container abspeichern (wie vorher angesprochen von HeelX in einer Liste, in einem Vektor oder was auch immer).

Weitere Unklarheiten,
Her damit..

Gruß,
Timo

Last edited by TechMuc; 09/16/11 20:48.
Re: [solved] struct-Name per Laufzeit erstellen [Re: TechMuc] #383226
09/17/11 15:09
09/17/11 15:09
Joined: Dec 2003
Posts: 988
Germany, Magdeburg
JoGa Offline OP
User
JoGa  Offline OP
User

Joined: Dec 2003
Posts: 988
Germany, Magdeburg
So, vielen Dank für die detailierte Erklärung, das ist wirklich sehr lieb.
Ich habe in einem C++-Buch, das schon ewig ungelesen in meinem Schrnak steht etwas über structs erfahren wollen, aber da stand nicht viel drin, da sind wohl zwei "+" zu viel im Titel laugh
Mal in der Unibibo schaun, wenn ich wieder am Studienort bin.
toller Workshop von HeelX hab ich noch gefunden, da werden auch structs etwas behandelt, das werde ich mir, sobald mein Besuch gekommen und wieder abgezischt ist, zu Gemüte führen ;-)

Tut mir leid, dass ich das Forum zu zumülle, aber ich hab noch ein paar Verständnissfragen tongue

- Wenn aus der Kiste (sagen wir mal) 5 Tomaten fallen, dann erzeuge ich ja diese mit hilfe des structs:
Objekt* Tomate = malloc(sizeof(Object));
// und dann die einzelnen Daten zuweisen
und mein Gehirnwindungsproblem ist jetzt, dass ich 5 "virtuelle" Objekte habe, die aber alle den selben Pointer "Tomate" haben. Und das beisst sich bei mir im Kopf mit dem pointer "player", der ja nur auf ein Entity gesetzt werden kann. Soweit ich das jetzt verstanden habe, sind das ja aber 2 Paar Stiefel (Struct-Pointer und Entity-Pointer).
Doch per structs lassen sich doch neue Engine-objekte (wie z.B Strings) erstellen - und 2 gleiche stringnamen sind ja auch nicht möglich - warum also bei denn Ojekten "Tomate"?

- zweites Problem:
Quote:
Wenn du außerhalb von bestimmten Events (wie z.B. mausklick o.ä.) auf die Entities zugreifen willst, musst du die Struktur noch in einem Container abspeichern (wie vorher angesprochen von HeelX in einer Liste, in einem Vektor oder was auch immer).

Nehmen wir an, der Spieler klickt auf eine Tomate nach der anderen, um sie in sein Obstkörbchen zu packen.
Kann ich da so herangehen, dass ich ein Variable "Maus_gegenstands_ID" erstelle.
Wenn nun der Spieler auf eine Tomate klickt, sucht sie in ihrem Klick-Event in dieser verketteten Liste nach ihrem Struct und kopiert dann die ID-Nummer des Objektes (die beim Truhenöffnen den einzelnen Tomaten per Zufall zugewiesen wurde) in die Variable "Maus_gegenstands_ID".
Wenn nun der Spieler in einen seiner Obstkörbchenplätze klickt, wird diese Nummer in ein Array kopiert, der das Obstkörpchen repräsentiert.
Würde das so funktionieren?

Ich habe mir heute mittag bei der Gartenarbeit eine andere Variante überlegt: Der Gegenstand wird durch eine ID-Nummer repräsentiert.
jede Eigenschaft des Objektes entspricht einer oder mehreren Dezimalstellen. Per if-Anweisungen wird dann die ID zerlegt und nachgeschaut z.B. welche Nummer bei der Dezimalen für das Modell steht - entsprechend der Nummer wird dann das jeweilige Modell erstellt. Eine andere Nummer steht für das 2D-Sprite im Inventar. Eine andere Nummer für den minimalen Schaden, eine andere für den maximalen Schaden, ...
Da die Gegenstände etwas komplexer sind, komme ich auf 16-18 Dezimalstellen. Ich habe aber das Gefühl, dass diese Variante von Vorgestern ist, denn: Sie würde funktionieren, ist aber ziemlich aufwenig, wenn man sich die Menge an Schreibarbeit vorstellt, die benötigt wird, um die einzelnen Nummern in if-Abfragen den versch. Modellen, Sprites, Eigenschaften der Objekten zuzuweisen.
Da du die struct-Sachen ja recht gut durchschaust, könntest du mir vielleicht einen Tipp geben, welche Variante die geschicktere wäre?

Last edited by JoGa; 09/17/11 15:14.
Page 1 of 3 1 2 3

Moderated by  HeelX, Lukas, rayp, Rei_Ayanami, Superku, Tobias, TWO, VeT 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1