может ктонибудь посмотреть, почему вся вот ета галиматья не пашет? уте4ки памети меня не волнуют, у меня мин всегда -573 если глубина 7, ели 6, то макс всгда -101
asema - доска siirto - ход siirra - ходи annaArvio - оцени
| Код | Siirto* Generaattori::MiniMax(Asema* a, int d) { Asema* asema = new Asema(*a); Siirto* parasSiirto = NULL; depth = d; int value; int maxValue = -10000; SiirtoLista* s = new SiirtoLista(asema);
for(int i=0; i<s->getSiirrot().size(); i++) { Siirto* siirto = s->getSiirrot().at(i); asema->siirra (siirto->getMistaX(), siirto->getMistaY(), siirto->getMihinX(), siirto->getMihinY()); value = minMove (asema, 1, -10000, 10000);
if (value > maxValue) { maxValue = value; parasSiirto = siirto; } if(parasSiirto==NULL) parasSiirto = siirto; } return parasSiirto; } int Generaattori::maxMove (Asema* a, int d, int alpha, int beta){ Asema* asema = new Asema(*a);
if (asema->isPeli()==false || d==depth) return eva->annaArvio(asema); int maxValue = 0; int value; SiirtoLista* s = new SiirtoLista(asema); for(int i=0; i<s->getSiirrot().size(); i++){ Siirto* siirto = s->getSiirrot().at(i); asema->siirra (siirto->getMistaX(), siirto->getMistaY(), siirto->getMihinX(), siirto->getMihinY()); value = minMove (asema, d+1, alpha, beta); std::cout<<"\nMin"<<value<<"\n";
/*if (value > maxValue) { maxValue = value; }*/ if (value > alpha) { alpha = value; }
if (alpha > beta) { return beta; } } return alpha; }
int Generaattori::minMove (Asema* a, int d, int alpha, int beta){ Asema* asema = new Asema(*a); if (asema->isPeli()==false || d==depth) return eva->annaArvio(asema);
int minValue = 0; int value; SiirtoLista* s = new SiirtoLista(asema); for(int i=0; i<s->getSiirrot().size(); i++){ Siirto* siirto = s->getSiirrot().at(i); asema->siirra (siirto->getMistaX(), siirto->getMistaY(), siirto->getMihinX(), siirto->getMihinY()); value = maxMove (new Asema(*asema), d+1, alpha, beta); std::cout<<"\nMax"<<value<<"\n";
/*if (value > minValue) { minValue = value; }*/ if (value < beta) { beta = value; }
if (beta < alpha) { return alpha; } } return beta; }
|
а вот оценка
| Код |
int Evaluointi::annaArvio(Asema* asema) { int colorKing; int enemy, enemyKing; int color;
if (asema->getSiirtoVuoro()==1) { color = 1; colorKing = 3; enemy = 2; enemyKing = 4; } else { color=2; colorKing = 4; enemy = 1; enemyKing = 3; }
int colorForce = 0; int enemyForce = 0;
int** _lauta = asema->getAsema();
for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { if(_lauta[i][j] != -1) if (_lauta[i][j] == color || _lauta[i][j] == colorKing) colorForce += calculateValue (_lauta[i][j], i, j); else enemyForce += calculateValue (_lauta[i][j], i, j); } }
return colorForce - enemyForce; }
int Evaluointi::calculateValue (int piece, int posi, int posj) { int value;
if (piece == 1 ) if (posi >= 4 && posi <= 7) value = 7; else value = 5; else if (piece != 2) if (posi >= 0 && posi <= 3) value = 7; else value = 5; else value = 10;
return value * _weight[posi][posj]; }
|
вобшем мы как будто в поддавки играем получается, хотя не все ходы глупые уже кучу времени убил... |