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

1

15.11.2005, 01:29

tictactoe

Hi!

Ich hab folgendes Problem:
Für meinen TicTacToe-gametree verwende ich die klasse TTTTreeNode mit folgenden Funktionen:


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
void TTTTreeNode::init(char cCurrentplayer) {
    TTTBoard* pBoard;
    TTTTreeNode* pTTTTreeNode;

    // wechsle Spieler

    this->cPlayer = (cCurrentplayer==PLAYER_1)?PLAYER_2:PLAYER_1;

    // Spiel zu Ende, keine weiteren Kinder

    if (this->board->isFilled()) return;
    if (this->board->isWon()) return;

    // sonst

    for (int iy=0; iy<BOARD_Y;++iy) {
        for (int ix=0; ix<BOARD_X;++ix) {
            pTTTTreeNode = NULL;
            // dieser Zug wurde noch nicht gemacht

            if (this->board->getField(ix, iy)==NULL) {
                // neues Board, identisch mit eigenem Board

                pBoard = new TTTBoard(this->board);
                // setze Spieler

                pBoard->setStone(this->cPlayer, ix, iy);
                // neuer Knoten mit dem Board zu diesem Zug

                pTTTTreeNode = new TTTTreeNode(pBoard);

                // initialiesere Kindknoten

                pTTTTreeNode->init(this->cPlayer);
            }
            this->attach(((iy*BOARD_Y)+ix), pTTTTreeNode);
        }
    }
}


C-/C++-Quelltext

1
2
3
4
5
6
7
int TreeNode::count() {
    int count = 1;
    for (unsigned int i=0; i<this->successors.size();++i) {
        if (this->successors[i]!=NULL) count = count + this->successors[i]->count();
    }
    return count;
}


Die Maximale Anzahl aller möglichen Knoten in TTT sind imho 9! (= 362.880)
Da ja einige Knoten schon früher keine Nachfolger mehr haben, wel sie gewonnene Spielzüge enthalten, sollte die Anzahl der tatsächlichen Knoten noch etwas darunter liegen.
Auf Symetrie und andere Optimierung verzichte ich einstweilen.

Wenn ich init() jetzt von meinem wurzelknoten mit einem leeren board aus aufrufe, wir ein Baum aufgebaut der aus 549946 Knoten besteht.

Also entweder meine count()-Methode ist falsch, oder in der init() klappt was nicht.

Kann mir wer sagen wo der Fehler liegt?