Hi
Ich bin gerade dabei einen Schachcomputer zu schreiben, der auch schon funktioniert, aber ich habe im Moment das Problem, dass es so aussieht, als würde das Programm die Daten, die ich beim rekursiven Minimax-Algorithmus brauche, nach einem vollendeten Zug nicht wieder frei gibt, sondern besetzt hält.
Der Code, bei dem Part, wo ich den Fehler hin schätze, sieht ungefähr so aus:
|
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
|
bool CMatch::GenerateMovePawn(int x, int y, int depth, int alpha, int beta)
{
CMatch *generatedMove = NULL;
// bauer ein Feld nach unten bewegen
int xNew = x;
int yNew = y-1;
// wenn der platz frei ist
if(IsValidMove(xNew, yNew)
{
if(generatedMove != NULL){
delete generatedMove;
}
generatedMove = new CMatch(*this);
/*
hier dann diverses Minimax Zeug
*/
}
// bauern zwei nach unten bewegen, wenn er noch dort stehz, wo er am Anfang stand
if(y == 1){
xNew = x;
yNew = y-2;
// wenn der platz frei ist
if(IsValidMove(xNew, yNew)
{
if(generatedMove != NULL){
delete generatedMove;
}
generatedMove = new CMatch(*this);
/*
hier dann diverses Minimax Zeug
*/
}
}
/*
ungefähr das gleich nioch für schief schlagen in 2 Richtungen
*/
if(generatedMove != NULL){
delete generatedMove;
}
return true;
}
|
Ich hab mal alles, was irelevant für das problem ist, raus gelassen.
Irgendwas muss ich mit der Speicherreservierung falsch machen...
Danke schon mal,
ProAmateur