Cod_Error actualizarInfo(Info * laInfoActual, Info * laInfoRespaldo, char jugada) { if (jugada == UNDO) { copiarInfo(laInfoActual, laInfoRespaldo); laInfoActual->undos -= 1; laInfoActual->undoPosible = FALSE; return OK; } else { Cod_Error hubo_error; copiarInfo(laInfoRespaldo, laInfoActual); mover(laInfoActual, jugada); hubo_error = ponerFicha(laInfoActual, jugada); laInfoActual->undoPosible = TRUE; return hubo_error; } }
int estrategiaPc ( char ** tablero, int cantFilas , int cantColumnas ,int N, int jugador, int * vector) { int fila, * vectoraux,aux,random,cantColaux=cantColumnas-1; int i; /*ESTRATEGIA 1*/ for (i=0; i < cantColumnas; i++) { if (estaenelTablero(tablero,cantFilas,cantColumnas,i, vector[i]-1 ,0,0) == 1) { fila=ponerFicha(tablero,i,2,vector); /* Se coloca Ficha PC */ if ( comprobarLinea (tablero,cantFilas,cantColumnas,i,fila,N,2) ) return 1; else sacarFicha(tablero,i,vector); /*Si no hay linea se quita la ficha y se intenta en la sig. columna*/ } } /*ESTRATEGIA 2*/ /*Se coloca ficha del jugador. Si hay linea, la misma se retira y se coloca la de la PC caso contrario tambien se quita la del jugador y se repite el proceso en la sig. columna*/ for ( i=0 ; i < cantColumnas; i++) { if ( estaenelTablero(tablero,cantFilas,cantColumnas,i, vector[i] ,0,0) == 1) { fila=ponerFicha(tablero,i,1,vector); if ( comprobarLinea (tablero,cantFilas,cantColumnas,i,fila,N,1) == 1 ) { sacarFicha(tablero,i,vector); ponerFicha(tablero,i,2,vector); return 0; } else sacarFicha(tablero,i,vector); } } /*ESTRATEGIA 3*/ /*Vector que almacena los numeros de columnas disponibles * y se achica en cada ciclo para no repetir numeros aleatorios*/ vectoraux=crearvector(cantFilas,cantColumnas); for (i=0; i < cantColumnas; i++) vectoraux[i]=i; do { random = randInt(0,cantColaux); if ( vector[random] == 0) /* Si la columna posee un solo espacio, se coloca ficha ya * que es imposible generar jugada ganadora del jugador*/ { ponerFicha(tablero, random , 2 , vector); return 0; } if ( estaenelTablero(tablero,cantFilas,cantColumnas, vectoraux[random] , vector[vectoraux[random]] ,0,0) == 1 && estaenelTablero( tablero , cantFilas , cantColumnas , vectoraux[random] , vector[vectoraux[random]]-1 , 0 , 0 ) == 1 && vector[random]!=0) { ponerFicha(tablero, vectoraux[random] , 2 , vector);/*Pone pc*/ fila=ponerFicha(tablero, vectoraux[random] , 1 , vector);/*Pone jugador*/ if ( comprobarLinea (tablero,cantFilas,cantColumnas,vectoraux[random],fila,N,1) == 0) /*Si no hizo linea jugador*/ { sacarFicha(tablero,vectoraux[random],vector); /*Saco jugador*/ return 0; } else { sacarFicha(tablero,vectoraux[random],vector); sacarFicha(tablero,vectoraux[random],vector); } } aux=vectoraux[cantColaux]; vectoraux[cantColaux]=vectoraux[random]; vectoraux[random]=aux; cantColaux--; } while ( cantColaux>0 ); if (cantColaux==0) { ponerFicha(tablero, vectoraux[random] , 2 , vector); } return 0; }