Hi
Hab bevor ich das Video geguckt hab gedacht, ich hätte es verstanden, aber jetzt hab ich wirklich auch den Sinn verstanden!
Da ich noch nie vorher, solche "Bäume" programmt hab, wollte ich jetzt einfach mal die grunddtruktur machen und die bewerten-Funktion und
andere Sachen des Algorithmus.
Ich hab das so gemacht, dass ich ein structur für den Baumnode gemacht hab, die, wenn die kein Endknoten ist, ein vector mit Zeigern auf seine Child-knoten hat.
Außerdem hab ich auch eine struktur für das Spielfeld gemacht, worin der status des Spielfelds gespeichert ist.
Davon hat jeder node auch ein Element.
Das erstellen hab ich dann rekursiv gemacht und ich hab eine Funktion zum Anzeigen des jeweiligen Spielfeldes geschrieben, die auch rekursiv ist:
|
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
|
void Node::ShowField ()
{
for(int x=0; x<nChilds.size(); x++)
nChilds[x]->ShowField(); // Hier ist dann der felder!!!!
cout << endl;
for(int x=0; x<3; x++)
{
cout << " ";
for(int y=0; y<3; y++)
{
if(mField.mField[x][y] == 0)
cout << "_ ";
else if (mField.mField[x][y] == 1)
cout << "O ";
else if (mField.mField[x][y] == 2)
cout << "X ";
}
cout << endl;
}
cout << endl;
};
|
Wenn ich jetzt, bevor der fehler kommt, im debug modus mir die Felder der einzelnen Childs des Rootknoten angucke,
stimmen sie mit dem überein, wie sie sein sollten.
Wenn ich aber dann rekursiv in die Funktion reingehe und dann in der ShowField() des ersten Childs mir die Felder aller anderen knoten angucke,
sind diese mit unglaublich hohen Werten definiert, als wären sie gar nicht definiert!
Mir is jetzt aufgefallen, dass das daran liegt, dass ich immer nur Zeiger auf die Childs speichere und wenn ich keine Zeiger speichern,
funktioniert es.
Woran liegt das?
Und gehe ich richtig vor mit dem "Baum"?
EDIT: Hab noch eine Frage:
Ich weiß nicht genau, wie ich die Bewerten-Funktion implementieren soll.
Ich wollte für jedes Kreuzchen (ich), was allein in einer Reihe ist, 1 Punkt geben.
Wenn zwei kreuzchen in einer reihe sind, 5 Punkte.
und wenn 3 kreuzchen in einer Reihe sind, 20 Punkte.
und für die Kreise natürlich dann Minuspunkte.
Teorethisch kann man das ja noch verbessern später.
Und soll ich, wenn zwei Childs die Selbe Punktzahl haben, nach dem Zufall entscheiden oder für den Anfang erst mal einfach alle Durchgehen und immer testen,
ob die bisherige höchspunktzahl überschritten wurde?