Abend zusammen!
Ich habe in meinem Spiel (mal wieder :lol: ) ein Problem (ich glaub, es vergeht kaum ein Tag ohne...).
Und zwar möchte ich den Spielstatus (ob jetzt der PC spielt, der Spieler spielt und was der Spieler so macht) in einem DWORD Wert speichern wie man es z.B. von den DX-Flags kennt.
Jetzt hab ich mir einen kleinen Code zusammengebaut, aber er läuft nicht.
Durchs Debuggen konnte ich das Problem lokalisieren:
Wenn eine Aktion getan ist, soll er das entsprechende Flag entfernen und neue setzen. Nur das entfernen klappt nicht.
Hier der Code (*.h und *.cpp zusammen
)
|
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
|
#define COMPUTER_PLAYS 0
#define PLAYER_PLAYS 1
#define COMPUTER_WON 2
#define PLAYER_WON 3
#define PLAYER_WAITS 4
#define PLAYER_SELECTED_FIGUR 5
DWORD State;
// Anfang cpp Datei
// Startwerte setzen (in der Initialisierungsfunktion)
State |= PLAYER_PLAYS;
State |= PLAYER_WAITS;
// [...]
// Klickbehandlungsfunktion, Werte ändern
State &= PLAYER_WAITS; // <--- Hier ist der Fehler
State |= PLAYER_SELECTED_FIGUR;
//Überprüfen ob richtig gesetzt wurde (mit dem Debugger)
bool ask1 = false, ask2 = false, ask3 = false;
if(m_pState & PLAYER_WAITS)ask1 = true;
if(m_pState & PLAYER_SELECTED_FIGUR)ask2 = true;
if(m_pState & COMPUTER_PLAYS)ask3 = true;
|
Nachdem ich herausgefunden habe, dass das Entfernen scheinbar nicht richtig funktioniert, hab ich die Überprüfung (mit ask :lol: ) hinzugefügt und im Debugger festgestellt, dass:
- PLAYER_WAITS gesetzt ist (falsch)
- PLAYER_SELECTED_FIGUR gesetzt ist (richtig)
- COMPUTER_PLAYS nicht gesetzt ist (richtig)
Hab ich einen Pragrammierfehler gemacht (ist &= falsch?) oder ist das einfach nur ein Denkfehler? Hoffe (und glaube) dass mir jmd. helfen kann.
mfg mm
PS: Ich weiß, dass es (wahrschienlich) einfachere und vll. auch bessere Methoden gibt, aber ich finde DWORD halt interessant