Example #1
0
void pedirCadena (tMovimiento *mov) {
	tFlag esValido = 1;
	char str[STR_DIM2]; 
	char nuevoStr[15]; /* tamaño suficiente para evaluar si el usuario introdujo de más */
	int fo, co;
	int n;

	fo = ++(mov->coordOrig.fil); /* sumamos 1 a las coordenadas, pues leerCoord les resta 1 */
	co = ++(mov->coordOrig.col);

	printf("Puede encadenar una movimiento!\n");
	printf("Ingrese solo la coordenada de la casilla a la que desea moverse y el tipo de captura si es necesario\n");
	printf("Se imprimira su nueva casilla de origen.\n");

	do {
		imprimirError(esValido); /* en una primer instancia no imprimirá nada, pues esValido es mayor a 0 */

		printf("> M [%d,%d]", fo, co);

		n = getlinea(nuevoStr, 15);

		if (n >= MIN_STR2 && n <= MAX_STR2) {
			sprintf(str, "M [%d,%d]%s", fo, co, nuevoStr);
			esValido = validarMovFormato (str, mov); /* devuelve menor a 0 en caso de error */
		}
		else
			esValido = ERR_FMT_MOV1;

	} while (esValido < 0); /* si es menor a cero es error */

	return; 
}
void operacionMKDISK(parametros *listaParametros){
  int path = verificarPath(listaParametros->path,"dsk");
  int size = transformarSize(listaParametros);
  imprimirError(path,"PATH");

  if(path==1 && size==1) crearDisco(listaParametros);
  //imprimirError(size,"SIZE");

}
Example #3
0
int main(int argc, char *argv[]) {

	/*Manejo de Señales*/
	signal(SIGCHLD, levantaMuertos);
	/*Fin manejo de señales*/

	/*Variables*/
	int s, e;
	int nivel=1;
	int childPid;
	FILE *archivoSalida;
	/*Fin variables*

	/*Validación de Parametros*/
	if(argc == 2 && strcmp(argv[1],"-h") == 0) {
		help();
		exit(0);
	}
	if(argc != 3) {
		imprimirError(0);
	}

	s = atoi(argv[1]);
	e = atoi(argv[2]);

	if (s <= 0) {
		imprimirError(1);
	}

	if (strcmp(argv[2],"0") != 0 && e <= 0) {
		imprimirError(2);
	}
	/*Fin validación de Parametros*/
	
	//guarda el momento en el que la ejecución debería terminar	
	time_t tiempoFin = time(NULL) + s;
	
	while(difftime(tiempoFin, time(NULL)) >= 0) {		//loop while la diferencia de la hora actual y el tiempo de fin calculado sea  mayor a cero
		childPid=fork();
		if (childPid == -1) {
			imprimirError(3);
		} else {
			//luego de lanzar un hijo el proceso duerme e
			double dif=difftime(tiempoFin, time(NULL));			
			/*Si la diferencia entre el tiempo actual y el tiempo de finalización calculado es menor a "e", se agregan 10 seg más a la ejecución*/			
			dif<e ? sleep(dif+10) : sleep(e);
			if (childPid == 0) {
				nivel++; //incrementa el nivel de los hijos
			}
		}
	}

	archivoSalida = fopen("SALIDA.txt", "a");
	if(!archivoSalida) {
		imprimirError(4);
	}
	if(childPid==0) {
		printf("Nivel alcanzado: %d PID: %d\n", nivel, getpid());
		fprintf(archivoSalida, "Nivel alcanzado: %d PID: %d\n", nivel, getpid());
	}
	fclose(archivoSalida);

}
Example #4
0
int jugar(tPartida partida){

	tMovimiento mov;
	char nombre[MAX_NOM];
	tFlag quiereGuardar=0, quiereCambiar, quiereUndo, hayGanador=0, calcularEstado=1;
	enum tJugada jugada = START;
	int captura;

	imprimirTablero(partida);
		
	while (!hayGanador && jugada != QUIT) {
		if (calcularEstado) {
			hayGanador = estadoJuego(partida);
			calcularEstado = 0;
		}

		if (!hayGanador) {

			if ( hayCadena(partida) && ( jugadorActual(partida) == BLANCO || modoJuego(partida) == PVP)) 
				/* si hay cadena y no es la computadora */
				mov = pedirCadena(partida);

			else if (jugadorActual(partida) == BLANCO || modoJuego(partida) == PVP){ 	
				/* si no es la computadora */
				printf("\nTurno del jugador %s\n", jugadorActual(partida) ? "negro" : "blanco");
				jugada = pedirJugada(&mov, nombre);
				}
			else{
				/*Mueve la computadora */
				printf("\nMueve la computadora:");
				if(calcularMovCompu(&mov, partida) != 0){
					imprimirError(ERR_MEM_COMPU);
					exit(1);
				}
			}
			if (jugada == MOV) {
			
				captura = mover(partida, &mov);
			
				if (captura == AMBIGUO) {
					/*Hay que pedirle que especifique*/
					mov.tipoMov = pedirCaptura();
					captura = mover (partida, &mov);
				}
				if (captura >= 0) { /* si el movimiento fue válido */
					imprimirMov (&mov);
					imprimirTablero(partida);
					if (!hayCadena(partida)) { /* cambiamos de turno */
						cambiarTurno (partida);
						calcularEstado=1;
					}
				}
				else
					imprimirError(captura);
			}
			else if (jugada == UNDO) {
					quiereUndo = undo(partida);
					if( quiereUndo == OK ){
						imprimirTablero(partida);
						calcularEstado = 1; /*Tiene que volver a chequear el tablero */
					}
					else
						imprimirError(quiereUndo);
			}

			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);
				if (guardarPartida(partida, nombre) != ERROR)
					printf("Se ha guardado su juego con el nombre '%s'\n", nombre);
				else
					imprimirError(ERR_SAVE);
			}
		}
	}

	return hayGanador; /* si se salió por QUIT, hayGanador vale 0 */
}
Example #5
0
/* main crea la partida según las especificaciones del usuario 
** y llama a jugar con dicha partida. */
int main(void){
	
	int opcion;
	int modo;
	tPartida partida;
	char nombre[MAX_NOM];	
	tFlag ganador;
	int filas, columnas;
	
	printf("\n\t\t=*=*=*=*=*=*=*=*=*==FANORONA==*=*=*=*=*=*=*=*=*=*=");
	printf("\n\t\t=*=*=*=*=*=*=*=*=FUTURAMA EDITION=*=*=*=*=*=*=*=*=\n\n");

	printf("\n\t\t=*=*=*=*=*=*=*==NOTAS SOBRE EL JUEGO=*=*=*=*=*=*=*=\n");
	printf("\n\t\t\t\tLa captura es obligatoria\n");
	printf("\n\t\tLas casillas fuertes se marcan con letras mayusculas\n");
	printf("\t\ty las debiles oon minuscula");
	printf("\n\n\t\tEl formato de movida es \"M [Fo,Co][Fd,Cd][w]\", o bien\n");
	printf("\t\t\"M [Fo,Co][Fd,Cd][a]\", siendo Fo,Co Fd,Cd las coordenadas\n");
	printf("\t\tde origen y destino, y w/a el tipo de movida (WITHDRAWAL \n");
	printf("\t\t o APPROACH)\n\n");
	printf("\t\t=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=\n\n");
	printf("\tElija una opcion:\n\n");
	printf("\t\t1. Juego nuevo: vs PC\n");
	printf("\t\t2. Juego nuevo: dos jugadores\n");
	printf("\t\t3. Cargar partida de archivo\n");
	printf("\t\t4. Salir\n\n");
	do{
		opcion=getint("Ingrese un numero de opcion > "); 
	}while(opcion<1 || opcion>4);

	if(opcion == 1 || opcion == 2){
		modo = opcion == 1 ? PVE : PVP; /* 1 es juego contra la computadora, 2 es dos jugadores*/	
		pedirDimensiones(&filas, &columnas);
		partida=generarPartida(filas,columnas, modo);
	
		if(partida == NULL){
			imprimirError(ERR_MEM_COMPU);
			return 1;
		}
	}
	else if(opcion == 3){
		/*Cargar partida*/
		printf("Ingrese el nombre del archivo:\n > ");
		leerLinea(nombre, MAX_NOM);
		partida=cargarPartida(nombre); /*modo cambia al correspondiente (0 o 1)*/
	        if(partida == NULL){
			printf("\nError al intentar abrir el archivo \"%s\". Abortando...\n\n", nombre);
			return 1;
		}
		printf("\nMODO DE JUEGO: %s\n", modoJuego(partida)?"DOS JUGADORES":"JUGADOR VS COMPUTADORA");
		printf("TURNO DEL JUGADOR %s\n", jugadorActual(partida)?"NEGRO":"BLANCO");
		printf("DIMENSIONES DEL TABLERO: %dx%d\n\n", numFilas(partida),numCols(partida));
	}
			
	else{
		/* Salir */
		printf("\n\t\t¡Adios!\n\n");
		return 0;
	}


	ganador = jugar(partida);		

	switch(ganador) {
		case GANADOR_BLANCO: printf("\a\n\n\t===========GANADOR: BLANCO==========\n\n"); break;
		case EMPATE: printf("\a\n\n\t===========EMPATE===========\n\n"); break;
		case GANADOR_NEGRO: printf("\a\n\n\t==========GANADOR: NEGRO===========\n\n"); break;
	}
	eliminarPartida(partida);
	return 0;

}
Example #6
0
int jugar2(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);	
		copiarTablero(&tablero, tableroAuxiliar);
		}

	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 */
				if(calcularMovCompu(&mov, &tablero, hayPaika, hayCadena, dir) != 0){
					imprimirError(ERR_MEM_COMPU);
					exit(1);
				}
			}
			if (jugada == MOV) {
			
				captura = mover(jugador, modo, &tablero, tableroAuxiliar, &mov, &dir, hayPaika, &hayCadena);
			
				if (captura == AMBOS) {
					/*Hay que pedirle que especifique*/
					mov.tipoMov = pedirCaptura();
					captura = mover (jugador, modo, &tablero, tableroAuxiliar, &mov, &dir, hayPaika, &hayCadena);
				}
				if (captura >= 0) { /* si el movimiento fue válido */
					imprimirTablero(&tablero);
					if (!hayCadena) { /* cambiamos de turno */
						cambiarTurno (&jugador, &tablero, &dir);
						primerUndo=1;
						calcularGanador=1;
						printf("Cambio!\nLe toca al jugador %s\n", jugador ? "negro" : "blanco");
					}
				}
				else
					imprimirError(captura);
			}
			else if (jugada == UNDO) {
				if (modo == PVE) {
					if(primerUndo){
						intercambiarTableros(&tablero, &tableroAuxiliar);
						imprimirTablero(&tablero);
						primerUndo=0;
						calcularGanador = 1; /*Tiene que volver a chequear el tablero */
					}
					else
						imprimirError(ERR_UNDO_DOBLE);
				}
				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);
				if (guardarPartida(&tablero, modo, jugador, nombre) != ERROR)
					printf("Se ha guardado su juego con el nombre '%s'\n", nombre);
				else
					printf("Error: no se ha podido guardar su juego.\n");
			}
		}
	}

	return hayGanador; /* si se salió por QUIT, hayGanador vale 0 */
}
Example #7
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 */
}