Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

21

29.01.2015, 21:23

Ich denke eher, dass es an meinem Verständnis liegt:

Ich möchte aus meiner ini datei die 100 Sportler auslesen und deren Eigenschaften, gespeichert in Variablen verwenden, um damit die Zeit des Sportlers in einem Rennen zu berechnen.
Wenn ich mit fstream die komplette ini ausgelesen habe, wie kann ich dann bewerkstelligen, das die variablen sportler0001.msteileranstieg...
sportler0002.msteileranstieg... sportler0100.msteileranstieg anlegt werden?
In meinem Beispiel weiter oben habe ich ja nur einen Wert ausgelesen und zugeordnet. Für eine Schleife bräuchte ich ja bei jedem Durchlauf eine andere Variablenbezeichnung, und das geht (nach meinem Wissensstand) ja nicht.

22

29.01.2015, 21:34

Du must ja nicht zwingend alles aufeinmal auslesen und dann 100 Sportler Instanzen erstellen.

Wie wäre es mit pro Sportler eine Datei anzulegen?

Du könntest auch Sportler0001Eigenschafft001 bis Sportler0001Eigenschafft010 laden (oder wieviel es auch immer sind) und eine Instanz deines Sportlers erstellen
dann kommt Sportler0002Eigenschafft001 bis Sportler0002Eigenschafft010 laden und wieder eine neu Instanz erstellen.... und so weiter

Dabei kannst du dann die Zwischen gespeicherten Daten wieder überschreiben, wenn die neu Instanz erstellt wurde.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

23

29.01.2015, 21:43

Das Programm soll ja beim Start eines neuen Spiels die Daten aus der Ini nehmen, damit ich später Balancing vornehmen kann, oder Sportler hinzufügen/löschen kann ohne den Code zu verändern. Das wäre ja dann nicht möglich. habe gerade nochmal geschaut, es sind 22 Eigenschaften pro Sportler.
Wenn ich es so haben möchte, wie ich es will, muss ich dann wirklich jeden Wert mit

sportler0001.mleichteranstieg = GetPrivateProfileInt("sportler0001", "leichteranstieg",

einzeln auslesen?

24

29.01.2015, 22:03

Wer hindert dich dran, in die ini zu schreiben wieviel Sportler drin stehen?
Jetzt hat es auch erst Kick gemacht was dein Problem mit der Ini Datei ist, du müsstest dafür sorgen das die daten in Reihenfolge, dort in der Datei stehen, damit du immer genau die Werte eines Sportlers laden kannst, wenn du Zeile für Zeile die Datei einliest.

Schau dir mal TinyXML2 an. Das ist eine Lib die hilft XML-Datei auszulesen, Ich denke das könnte für dich interessanter sein wie ein ini Format.
Die daten würden dann im XML format in einer Datei stehen

C-/C++-Quelltext

1
2
3
4
5
6
<Sportler name="XYZ">
    <Eigenschafften Ausdauer="10" Zielgenauigkeit="99" />
</Sportler>
<Sportler name="ZYX">
    <Eigenschafften Ausdauer="11" Zielgenauigkeit="89" />
</Sportler>


Dabei wäre dann egal wieviel Sportler drin stehen, da die Daten über eine Schleife geladen werden können.

Ich persönlich finde es sehr praktisch, liegt natürlich an dir, dich wieder in ein neues Thema zu stürzen.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

25

29.01.2015, 22:09

Vielen Dank!
Bin nicht auf ini festgelegt, habe allerdings ein Spiel bei dem ich es sehr praktisch finde.
xml hört sich vielversprechend an.

26

30.01.2015, 22:35

Bin wieder ratlos...
Das Ergebnis eines Sportlers errechnet sich durch eine Funktion mit verschiedenen Parametern. Bisher habe ich vor Funktionsaufruf immer die Attribute des Sportlers den Parametern zugewiesen z.B.: steileranstieg = sportler0001.msteileranstieg;...
Funktionskopf:
float fergebnis(int steileranstieg, int leichteranstieg, int flach, int abfahrt, int selbstvertrauen...

Jetzt meine Fragen:

1. Muss ich das wieder mühsam mit jedem startenden Sportler machen?
2. Wenn ich in der Memberfunktion die Startattribute der Sportler einlese, kann ich diese nicht in der main Funktion verwenden, bzw. mit zufälligen Zahlen - gebe ich am Ende der Funktion die Werte mit cout aus sind sie richtig, warum(funktion und Variablen sind public)?


Ich bin irgendwie an einem Punkt, wo ständig neue Probleme auftauchen. Meine Quelldatei hat zig Tausend Zeilen und Variablen und das einzige was es kann ist das Ergebnis von einem Rennen ausgeben (zugegeben in sehr zufriedenstellender Weise ;) ). Ich bin noch weit davon weg zu verstehen, wie ich jetzt zu Spielbeginn mir aussuchen kann, welche Athleten ich in meinem Team haben möchte, deren Training, Taktik etc. zu beeinflussen und dann auch noch eine KI hinzubekommen.

Wenn ihr mir jetzt sagt, das ist normal und ich habe später eben mehrere Hunderttausend Zeilen und brauche noch ein halbes Jahr, dann muss ich da wohl durch. Wenn ich mir aber vorstelle, dass ich jeden Tag Stunden programmiere und das wegen meiner Unkenntnis für die Katz war und ich sowieso das Spiel nie fertig kriege wäre das sehr frustrierend.

27

31.01.2015, 02:50

Du solltest dir dringend einige Programmiergrundlagen zulegen...
Insbesondere Arrays, und speziell für C++ std::vector.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

28

31.01.2015, 10:50

Ich versteh dein Problem nicht.

Du solltest dich mal mit OOP (Objektorientierte Programmierung) beschäftigen.

Es werden noch eine lange Zeit Probleme auftauchen, aber ein gute Basis werden dir helfen diese zu lösen.

z.B. sollte deine Klasse Sportler Funktionen besitzen die seine Privaten Membervariablen nach aussen weiter gebeben (sogenannte getter-Funktion)
Somit kannst du der Funktion die irgend ein Ergebnis berechnet den Sportler als parameter übergeben und die Funktion holt sich die benötigten Daten über die jeweilige get-Funktion.

Wie gesagt ich kann dein Problem nicht verstehen/nachvollziehen. Lektüre besorgen und die Basics lernen.

Gruß Koschi
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

29

02.02.2015, 20:53

Danke für den Tipp. Kannte Arrays schon, hab mich jetzt aber nochmal genauer damit beschäftigt. Daraus ergibt sich jetzt folgendes Problem:

Ich habe meine Klasse Sportler:
class csportler
{
public:
//Sportler
LPTSTR name[20];
int eigenschaften[8]; /*Konstanten: alter, land, alterrente, groesse, gewicht,
talentschiessen, talentlaufen, regeneration;*/

int attribut[13]; /*, steileranstieg, leichteranstieg, flach, abfahrt, ausdauer,
, geschwliegend, genauliegend, geschwstehend, genaustehend,
selbstvertrauen, frische, ehrgeiz, form;*/
float ergebnis, Fehler[4]; // Fehler: maximal 4xSchießen
int statistik[4]; //punktesaison, punktegesamt, siegesaison, siegegesamt

Wie kann ich jetzt ein bzw. mehrere Arrays als Parameter der Funktion Training übergeben (nicht kopieren, da die werte ja verändert werden sollen)

void ftraining (int sportler[i].attribut[]) // for Schleife mit "i", damit alle Sportler trainieren.

So geht`s natürlich nicht...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »mirk13« (02.02.2015, 21:06)


30

04.02.2015, 18:20

Ich kann mich nur wieder holen, mit OOP beschäftigen/lernen.

Wenn dein Programm wächst, weist du doch später gar nicht mehr welches Array an welcher stelle für Daten hält.

anstelle von

C-/C++-Quelltext

1
int ArrayFürIrgendwas[8];
mach

C-/C++-Quelltext

1
2
int irgendwas1;
int irgendwas2;

und schreibe getter/setter methoden

C-/C++-Quelltext

1
2
int getIrgendwas1() const;
void setIrgendwas1(int value);


So kann man den Code lesen auch wenn er mal lange Zeit nicht angefasst wurde.

Zu deinem Problem mit dem Array übergeben.

Das darfst du mal googeln gibt genug lektüre im netz darüber, Sogar hier im Forum schon x-mal gefragt.

Gruß Koschi
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Werbeanzeige