Ejemplo n.º 1
0
//Main
int main(int argc, char *argv[]) {

//VALIDAR IP Y PUERTO RECIBIDO

//conexion con el server
establecerConexionConElServidor(argv);
inicializarMatriz(matriz);
//Espero el mensaje de me conexion exitosa con el servidor 
recv( caller_socket , buffer, TAMBUF ,0);
printf("\nMensaje de Server:%s\n", buffer);

//vector que va a guardar las coordenadas ingresadas por el usuario
char movimientos[7];
int i;

//Recibe y convierte buffer (protoclo), Imprime Matriz de juego recibida al iniciar la partida
printf("MATRIZ DE JUEGO: ESCRIBA FIN PARA FINALIZAR\n");
printMatriz(matriz);

while(!fin_partida){
	printf("Ingrese las coordenadas de las fichas a develar con el siguiente formato:\n");
	printf("X1 Y1 X2 Y2\n");
	gets(movimientos);
	
	//Valida coordenadas a develar ingresadas por el usuario
	if(strcmp(movimientos,"FIN")!=0) {
		while(!validarMovimiento(movimientos)){
			fflush(stdin);
			printf("Formato ingresado incorrecto, reingrese\n"); 
			printf("X1 Y1 X2 Y2\n");
			gets(movimientos);	
		}
	printMatriz(matriz);
	enviarCoordenadas(matriz,buffer,movimientos);	
	}
	/* 
	printf("resultado comparacion: %d \n",strcmp( buffer, "fin" ));
	printf("mensaje buffeu: %s \n", buffer);*/
	if(strcmp( movimientos, "FIN" ) == 0 || aciertos==50)
		fin_partida = true;
	//printf("\nMensaje de Server:%s\n", buffer);
	//sleep(10); //PARA PROBAR
}
printf("*****************************SALISTE DE LA PARTIDA, CANTIDAD DE ACIERTOS:%d*****************************8\n", aciertos);
exit(0);
}
Ejemplo n.º 2
0
int jugar(tTablero tablero, int modo, int jugador){

	enum tDireccion dir=NULA;
	tMovimiento mov;
	char nombre[MAX_NOM];
	tFlag jugada=START, quiereGuardar=0, hayCadena=0, quiereCambiar, hayGanador=0, calcularGanador=1, primerUndo=1;
	int captura;
	int a,b; /*TEMP*/
	int estado = SEGUIR;
	tFlag hayPaika;
	tCasilla ** tableroAuxiliar;
	
	if(modo==PVE)
		tableroAuxiliar = generarMatrizTablero(tablero.filas, tablero.cols);	
	
	imprimirTablero(&tablero);
		

	while (!hayGanador && jugada != QUIT) {
		if (calcularGanador) {
			hayGanador = estadoPostJugada(&tablero, jugador, &hayPaika);
			calcularGanador = 0;
		}

		if (!hayGanador) {

			if (hayCadena && (jugador == BLANCO || modo == PVP)) /* si hay cadena y no es la computadora */
				pedirCadena(&mov);
			else if (jugador == BLANCO || modo == PVP) 	/* si no es la computadora */
				jugada = pedirJugada(&mov, nombre);
			else{
				/*Mueve la computadora */
				jugada=MOV;
				if(calcularMovCompu(&mov, &tablero, hayPaika, hayCadena, dir) != 0){
					imprimirError(ERR_MEM_COMPU);
					exit(1);
				}
			}
			if (jugada == MOV) {
						
				if(modo==PVE && jugador==BLANCO){
					/*Copia el tablero al auxiliar solo antes de que juegue el usuario
					** (siempre es BLANCO) y solo si el juego es vs. Computadora*/
					copiarTablero(&tablero, tableroAuxiliar);
					primerUndo=1;
				}
				
				if (jugador == BLANCO || jugador == NEGRO) {
					captura = validarMovimiento(jugador, &tablero, mov, &dir, hayPaika);
					if (captura == AMBOS) /* ambiguedad en la jugada*/
						mov.tipoMov = pedirCaptura();
					else if (captura == APPROACH || captura == WITHDRAWAL)
						mov.tipoMov = captura;
					imprimirError(captura); /* en caso de movimiento valido, no imprime nada */
				}

				if (captura >= 0) {	/* el movimiento es válido */
					actualizarTablero(&tablero, dir, mov);
					imprimirTablero(&tablero);
					hayCadena = 0;

					if (captura != NINGUNO) /* si no fue PAIKA, busca una posible cadena */
						hayCadena = jugadaObligada(&tablero, jugador, mov.coordDest, dir);

					if (hayCadena) {
						/* al haber cadena, el origen es el nuevo destino */
						mov.coordOrig.fil = mov.coordDest.fil;
						mov.coordOrig.col = mov.coordDest.col;
					}

					else {	/* cambio de turno */
						printf("Cambio!\n");
						jugador = !jugador; /* Cambia */
						printf("\nLe toca al jugador %s\n", jugador ? "negro" : "blanco");
						dir = NULA; /* Ninguna */
						calcularGanador = 1; /* calculamos un posible ganador */
						limpiarTocadas(&tablero);
					}
				}
			}

			else if (jugada == UNDO) {
				if (modo == PVE) {
					if(primerUndo){
						intercambiarTableros(&tablero, &tableroAuxiliar);
						primerUndo=0;
						}
					else
						imprimirError(ERR_UNDO_DOBLE);
				imprimirTablero(&tablero);
				}
				else
					imprimirError(ERR_UNDO);
				
				/* aca va lo del error del undo */
			}

			else if (jugada == QUIT) {
				printf("Desea guardar su juego antes de salir?\n");
				quiereGuardar = leerSN();
				if (quiereGuardar)
					pedirNombre(nombre);
			}

			if (jugada == SAVE || quiereGuardar) {
				do {
					printf("Desea guardar su juego con el nombre '%s'?\n", nombre);
					quiereCambiar = !leerSN();
					if (quiereCambiar)
						pedirNombre(nombre);
				} while (quiereCambiar);
				guardarPartida(&tablero, modo, jugador, nombre);
				printf("Se ha guardado su juego con el nombre '%s'\n", nombre);
			}
		}
	}

	return hayGanador; /* si se salió por QUIT, hayGanador vale 0 */
}