コード例 #1
0
ファイル: main.c プロジェクト: gizbor/TP1
int main(int argc, char* argv[]){
        /* NOTA: las variables están declaradas acá para evitar el warning:
        ISO C90 forbids mixed declarations and code [-pedantic] */
        int error;
        FILE* parchivo;
        tcelda tablero[MAX_DIMENSION*MAX_DIMENSION]={0};

        error=validarParametrosNumericos(argc, argv);
        if (error!=0) return error;

        if (argc < 4)
            parchivo=stdin;
       else
            if ((parchivo=fopen(argv[3], "r"))==NULL){
              DEBUG_MSG("Error: archivo no existe o no se puede abrir.\n");
              return ERROR_ARCHIVO_NO_ABRE;
            }

        inicializarDeArchivo(atoi(argv[1]), parchivo, tablero);
        if (IMPRIMIR_MATRIZ==1)
            imprimirTablero(atoi(argv[1]), tablero);

        correrProceso(atoi(argv[1]), atoi(argv[2]), tablero);

        if (argc==4)
            fclose(parchivo);

return 0;
}
コード例 #2
0
ファイル: main.c プロジェクト: gizbor/TP1
/** Descripcion: procesa el tablero inicializado. */
void correrProceso(int n, int iteraciones, tcelda* tablero){
    int i,j,k;
    tcelda vecino, contador_vivos, *celda;

    imprimirEnFormatoEntrada(n, tablero);
    for (k=0; k<iteraciones; k++){
      for (i=0; i<n; i++){
                for (j=0; j<n; j++){
                      contador_vivos=0;
                      celda=getCelda(n, i,j,tablero);
                      for (vecino=1; vecino<=8; vecino++){
                             if (estaVivo(n, vecino, i, j, tablero)==0)
                               contador_vivos++;
                       }
                       setNuevoEstado(celda, analizarEstado(n, \
                                            contador_vivos, i, j, tablero));
                  }
               }
               aplicarCambios(n, tablero);
               if (IMPRIMIR_MATRIZ==1){
                      printf("> Iteracion %d \n", k);
                      imprimirTablero(n, tablero);
               }
        imprimirEnFormatoEntrada(n, tablero);
        }
 }
コード例 #3
0
ファイル: tilesFront.c プロジェクト: jjssvv/TPE
int
juegoNuevo(tJuego * juego)
{
	tPunto nPunto;
	
	juego->tablero = crearTablero(juego, 1);
	
	imprimirTablero(juego);
	
	while (1) // TODO: Reemplazar 1 por checkearTablero()
	{
		verificarJugada(juego);
		reacomodarTablero(juego);
		imprimirTablero(juego);
	}
	
	return 0;
}
コード例 #4
0
ファイル: fanoronaFront.c プロジェクト: marcelolynch/fanorona
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 */
}
コード例 #5
0
ファイル: jugar2.c プロジェクト: marcelolynch/fanorona
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 */
}
コード例 #6
0
ファイル: jugar2.c プロジェクト: marcelolynch/fanorona
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 */
}