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

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

11

27.06.2015, 08:15

Dafür brauchst Du Klassen. Keine mehrdimensionalen Vektoren.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Korowai

unregistriert

12

27.06.2015, 08:30

Hi,

mit Klassen habe ich aber das Problem, dass ich für jeden Spieler die Klasse neu definieren muss. Und ich hätte nur eine Klasse, die ich noch in ein Array hochzählen müsste. Soweit ich mich zumindest mit Klassen auskenne...

Ich könnte:

class Schuerfer
{
public:
//Membervariablen 13 Attribute (für jeweils Höchstwerte; aktuelle Werte; Spielwerte) * 3= 39 Variablen
...
//Memberfunktionen
Laraber

Dann kann ich

Schuerfer Schuerfer(i);
Die 39 Variablen zuweisen

AUßerdem noch die Namen abfragen, auch hochzählend

Und dann die Schuerfer(i) in ein array packen, das sich je nach SPielstand hoch und runter zählt, dies wiederum den jeweiligen SPielern zugewiesen.

Geht schon, aber mir scheinen die Vektoren da einfacher...

Mir fehlen da Erfahrungswerte, was meinst Du?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

13

27.06.2015, 09:43

Ich meinte damit, dass Du nicht vector<vector<vector>>> machen sollst, sondern die Sachen kapseln sollst. Vektoren an sich wirst Du schon noch brauchen. Oder std::array, falls die Anzahl eh fest ist.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Schuerfer
{
int Ausdauer;
float Kosten;
}

Spieler
{
vector<Schuerfer>
}

Spiel
{
vector<Spieler>
}


Damit ist wenigstens klar auf was Du zugreifst:
Spiel.Spieler[1].Schuerfer[17].Ausdauer = 12;
Im Gegensatz zu:
my_vector[1][17][3] = 12; // hier versteht kein Mensch (und auch Du bald nicht mehr) auf was zugegriffen wird
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Korowai

unregistriert

14

27.06.2015, 10:15

DAs ist ein sehr guter Ansatz.

Ich denke, ich probiere da mal etwas herum.

Es ist ja durchaus möglich, den Vektor Spieler auf alle weiteren Klassen zu verwenden, die im Spiel auftauchen. Da wirds dann bei nur Vektoren wirklich unübersichtlich.

Grundsätzlich ist mir das erste Experimentieren mit Klassen auch gut gelungen.

War auch so, dass ich Anfangs dachte, dass ich Klassen nicht in Vektoren einbinden kann. Deshalb der Sprung zu der Überlegung, nur Vektoren zu verwenden.

Danke Dir.

Korowai

unregistriert

15

28.06.2015, 13:17

Hallo,

kann sich vielleicht jemand die Zeit nehmen, ein Codebeispiel zu posten, bei dem Klassen in einen Vektor eingeknüpft werden.

Das würde mir das Lernen sehr erleichtern.

Danke.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

16

28.06.2015, 13:47

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
#include <vector>
class foo
{
    int bar;
};

int main()
{
    std::vector<foo> myFoos;
}

Ich würde außerdem zu einem Buch raten. Da sind Klassen und auch Vektoren in und von Klassen (da besteht kein großer Unterschied zu einem int in einer Klasse, was die Deklaration anbelangt) sicherlich enthalten.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Korowai

unregistriert

17

02.07.2015, 18:36

Danke,

ich gebe das heute ein und probiere, ob es funktioniert.

WIe rufe ich dann das entsprechende Fahrzeug auf?

Wird zuerst der VEktor oder erst die Klasse genannt? Wie lautet der Code, wenn ich eine Variable, z.B. den Namensstring des Objektes aufrufen möchte?

Bsp.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Schuerfer
{ public:
string name= "foo";
Schuerfer();
~Schuerfer();
}

int main()
{

vector <Schuerfer> Spieler(0);
for (int i = 0; i<1; i++)
{ Spieler[i].push_back(0); }

cout << "Schiff " << Spieler[0].Schuerfer(0).name << endl;
return 0;
}


Nachtrag: Und wie sieht der Konstruktor aus?

Oh, da gibts ne Menge zu lernen 8)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Korowai« (02.07.2015, 18:45)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

18

02.07.2015, 18:46

Spieler[i].push_back(Schuerfer());
cout << "Schiff " << Spieler[0].name << endl;
Wirklich, besorg Dir ein Buch.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Korowai

unregistriert

19

12.07.2015, 07:48

Hi,

also, ich habe es geschafft, eine Klasse in einen Vektor einzubinden.

Jetzt will ich den Vektor der Klasse in einen übergeordneten Vektor einbinden. Das klappt nicht.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
#include <string>
#include <conio.h>
#include <iterator>
#include <list>
#include <vector>
#include <list>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>


using namespace std;

int Spieleranzahl;
string name;
int Anzahl;
class Schuerfer
{
    public:

// Variablen 
Schuerfer();
};

Schuerfer::Schuerfer ()
{

// Variablen zuweisen

};

int main()
{
Schuerfer Mobil; // Instanz Mobil der Klasse Schuerfer
vector <Schuerfer> Spieler0; // Die Anzahl der Mobile pro Spieler

cout << "Wieviele Schuerfer pro Spieler?" <<endl;
cin >> Anzahl;
Spieler0.resize(Anzahl);
for (int y; y<Anzahl; y++)
{
    Spieler0[y].push_back(Mobil);
};

vector <Schuerfer> Spiel; // Die Anzahl der Spieler


cout << "Wieviele Spieler?" << endl;
cin >> Spieleranzahl;

Spiel.resize(Spieleranzahl);
for (int x; x<Spieleranzahl;x++)
{
    Spiel[x].push_back(Spieler0);
}
;
return 0;
}


Der Compiler meckert:
class Schuerfer has no member named 'push_back'

Was fehlt mir da?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

20

12.07.2015, 09:12

Da fehlt der Name des Members, den Du ansprechen willst:
Spiel[x].Spieler.push_back(Spieler0);

Die Struktur macht allerdings wenig Sinn. Sinn macht z.B. folgendes:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Schuerfer {
public:
    ...
};

class Spieler {
public:
    vector<Schuerfer> schuerfer;
    string name;
};

class Spiel {
public:
    vector<Spieler> spieler;
};

Spieler spieler1;
spieler1.name = "ich";
spieler1.schuerfer.push_back(Schuerfer());
spieler1.schuerfer.push_back(Schuerfer());

Spieler spieler2;
spieler2.name = "du";
spieler2.schuerfer.push_back(Schuerfer());
spieler2.schuerfer.push_back(Schuerfer());

Spiel spiel;
spiel.spieler.push_back(spieler1);
spiel.spieler.push_back(spieler2);
Jedes Spiel hat mehrere Spieler. Jeder Spieler hat mehrere Schürfer. Jeder Schürfer hat irgendwelche Eigenschaften.

Ich sag's nochmal, kauf Dir ein Buch oder such Dir eine Internet-Seite über C++. Du musst doch selber merken, dass Du so nicht arbeiten kannst.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »BlueCobold« (12.07.2015, 09:22)


Werbeanzeige