Hey, ich bin am Programmieren eines Textadventures. Dabei benutze ich für die Story zwischen jeder Entscheidung GameStates, also immer den gleichen Aufbau.
Jetzt habe ich eine Klasse "Player" geschrieben, die bestimmte Attribute hat, die dann durch die Events verändert werden sollen. Allerdings
weiß ich überhaupt nicht, wie ich ein Objekt der Klasse erstellen kann, dass dann in den verschiedenen GameStates immer wiederverwendet wird.
Oder irgendeine andere Lösung, bei der Attribute und Name des einen Spielers in jedem GameState übernommen werden.
Vielleicht hat ja jemand eine Lösung parat
![:)](wcf/images/smilies/smile.png.pagespeed.ce.cw1CRsMB0z.png)
Hier nochmal die Player Klasse:
|
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
30
31
32
33
34
|
#pragma once
#ifndef PLAYER_HPP
#define PLAYER_HPP
#include "Game.h"
class Player
{
public:
Player();
~Player();
std::string Spielername;
enum class Attribute {STAERKE, SCHNELLIGKEIT, SCHOENHEIT, INTELLIGENZ, GLAUBEN, LEBENSPUNKTE};
void changeAttribut(Attribute, int);
void setSpielername(std::string);
std::string getSpielername();
std::int16_t getAttributWert(Attribute);
private:
std::int16_t Staerke = 0;
std::int16_t Schnelligkeit = 0;
std::int16_t Schoenheit = 0;
std::int16_t Intelligenz = 0;
std::int16_t Glauben = 0;
std::int16_t Lebenspunkte = 10;
};
#endif
|
Die cpp-datei:
|
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
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
#include "Player.h"
Player::Player()
{
std::cout << "Spieler-Konstruktor aufgerufen!" << std::endl;
}
void Player::changeAttribut(Attribute attribut, int x)
{
switch (attribut)
{
case Attribute::GLAUBEN:
Glauben += x;
break;
case Attribute::INTELLIGENZ:
Intelligenz += x;
break;
case Attribute::SCHNELLIGKEIT:
Schnelligkeit += x;
break;
case Attribute::SCHOENHEIT:
Schoenheit += x;
break;
case Attribute::STAERKE:
Staerke += x;
break;
case Attribute::LEBENSPUNKTE:
Lebenspunkte += x;
break;
}
}
std::int16_t Player::getAttributWert(Attribute attribut)
{
switch (attribut)
{
case Attribute::GLAUBEN:
return Glauben;
break;
case Attribute::INTELLIGENZ:
return Intelligenz;
break;
case Attribute::SCHNELLIGKEIT:
return Schnelligkeit;
break;
case Attribute::SCHOENHEIT:
return Schoenheit;
break;
case Attribute::STAERKE:
return Staerke;
break;
case Attribute::LEBENSPUNKTE:
return Lebenspunkte;
break;
}
}
void Player::setSpielername(std::string string)
{
Spielername = string;
}
std::string Player::getSpielername()
{
return Spielername;
}
Player::~Player()
{
std::cout << "Spieler-Destruktor aufgerufen!" << std::endl;
}
|
Und das sind die GameStates:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#ifndef GAMESTATE_HPP
#define GAMESTATE_HPP
class Game;
class Player;
class Gamestate
{
public:
virtual void HandleEvents(Game& game) = 0;
virtual void Update(Game& game) = 0;
virtual void Draw(Game& game) = 0;
virtual void Spieler(Player& player) = 0;
virtual ~Gamestate() {};
};
#endif
|
Vielen Dank schonmal im Voraus!