本文整理汇总了C++中Environment::JuegoTerminado方法的典型用法代码示例。如果您正苦于以下问题:C++ Environment::JuegoTerminado方法的具体用法?C++ Environment::JuegoTerminado怎么用?C++ Environment::JuegoTerminado使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Environment
的用法示例。
在下文中一共展示了Environment::JuegoTerminado方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: MiniMax
double MiniMax(const Environment & tablero,int jug,int prof,int limite,Environment::ActionType & accion){
const double INF=1000000000000.0, mINF=-1000000000000000.0, gano=999999999999999, pierdo=-999999999999999999;
Environment::ActionType accion_anterior;
double mejor, aux;
if(prof==limite or tablero.JuegoTerminado()){
return ValoracionTest(tablero,jug);
}
else{
if(prof%2==0)
mejor=mINF;
else
mejor=INF;
int ult_act=-1;
Environment hijo=tablero.GenerateNextMove(ult_act);
while(!(hijo==tablero)){
aux=MiniMax(hijo,jug,prof+1,limite,accion_anterior);
if(prof%2==0){
if(aux>mejor){
mejor=aux;
accion=static_cast <Environment::ActionType>(ult_act);
}
}
else{
if(aux<mejor){
mejor=aux;
accion=static_cast<Environment::ActionType>(ult_act);
}
}
hijo=tablero.GenerateNextMove(ult_act);
}
return mejor;
}
}
示例2: Poda_AlfaBeta
double Player::Poda_AlfaBeta(const Environment &tablero, int jugador, int prof, const int MAX_PROF,
Environment::ActionType &accion, double alfa, double beta){
if(prof==MAX_PROF || tablero.JuegoTerminado())
return Valoracion(tablero, jugador);
else{
int last_accion=-1;
double temporal;
Environment::ActionType accion_previa;
Environment hijo=tablero.GenerateNextMove(last_accion);
//NODO ALFA
if((prof%2)==0){
while(!(hijo==tablero)){
temporal=Poda_AlfaBeta(hijo, jugador, prof+1,MAX_PROF, accion_previa, alfa, beta);
// Si existe una jugada mejor, actualizamos el alfa.
if(temporal > alfa){
alfa=temporal;
accion=static_cast<Environment::ActionType>(last_accion);
}
if(beta<=alfa){
break;
}
hijo=tablero.GenerateNextMove(last_accion);
}
return alfa;
}
//NODO BETA
else{
while(!(hijo==tablero)){
temporal=Poda_AlfaBeta(hijo, jugador, prof+1,MAX_PROF, accion_previa, alfa, beta);
// Si existe una jugada peor, actualizamos el beta.
if(temporal < beta){
beta=temporal;
accion=static_cast<Environment::ActionType>(last_accion);
}
if(beta<=alfa){
break;
}
hijo=tablero.GenerateNextMove(last_accion);
}
return beta;
}
}
}
示例3: Poda_alphaBetha
double Poda_alphaBetha(const Environment & tablero,int jug,int prof,int limite,Environment::ActionType & accion,double alpha,double betha){
Environment::ActionType accion_anterior=accion;
double aux;
if(prof==limite or tablero.JuegoTerminado()){
return Valoracion(tablero,jug);
}
else{
int ult_act=-1;
Environment hijo=tablero.GenerateNextMove(ult_act);
while(!(hijo==tablero)){
aux=Poda_alphaBetha(hijo,jug,prof+1,limite,accion_anterior,alpha,betha);
if(prof%2==0){
if(aux>alpha){
alpha=aux;
if(prof==0)
accion=static_cast <Environment::ActionType>(ult_act);
}
}
else{
if(aux<betha){
betha=aux;
//if(prof==0)
// accion=static_cast<Environment::ActionType>(ult_act);
}
}
if(betha<=alpha)
return alpha;
hijo=tablero.GenerateNextMove(ult_act);
}
if (prof%2==0)
return alpha;
else
return betha;
}
}
示例4: PodaAlfaBeta
double PodaAlfaBeta(const Environment & tablero, int jugador, int profundidad, int profLimite, Environment::ActionType & accion, double alfa, double beta){
Environment::ActionType ult_accion;
//Profundidad máxima o fin del juego, se acabó
if(profundidad == profLimite || tablero.JuegoTerminado())
return Valoracion(tablero, jugador);
else{ // Hijos
int ult_act = -1;
//Generar siguiente nodo tablero hijo
Environment hijo = tablero.GenerateNextMove(ult_act);
//Profundidad par --> nodo MAX
if(profundidad%2 == 0){
//Recorrido de nodos hijos
while(!(hijo==tablero)){
double aux = PodaAlfaBeta(hijo, jugador, profundidad+1,profLimite,ult_accion,alfa,beta);
// if (profundidad == 0)
//cout << "Acción -> " << ult_act << endl;
if(aux > alfa){
alfa = aux;
if (profundidad == 0)
accion = static_cast<Environment::ActionType> (ult_act);
}
if(beta <= alfa){
return alfa; //poda
} else {
//Generación del siguiente nodo tablero hijo
hijo = tablero.GenerateNextMove(ult_act);
}
}
return alfa; // no poda
}else{
//Nivel impar -> nodo MIN
while(!(hijo==tablero)){
double aux = PodaAlfaBeta(hijo, jugador, profundidad+1, profLimite, ult_accion, alfa, beta);
if(aux < beta)
beta = aux;
if(beta <= alfa){
return beta; //poda
} else{
hijo = tablero.GenerateNextMove(ult_act);
}
}
return beta; // no poda
}
}
}