Beispiel #1
0
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;
	}
}
Beispiel #2
0
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;

}