/**
 * @NAME: inicializarPersonaje
 * @DESC: Inicializa todas las variables y estructuras necesarias para el proceso personaje
 */
void inicializarPersonaje() {
	// TODO agregar inicializaciones necesarias

	levantarArchivoConfiguracionPersonaje(CONFIG_FILE);

	LOGGER = log_create(configPersonajeLogPath(), "PERSONAJE", configPersonajeLogConsola(), configPersonajeLogNivel() );
	log_info(LOGGER, "INICIALIZANDO PERSONAJE '%s' ", configPersonajeNombre());

	strcpy(personaje.nombre, configPersonajeNombre());
	strcpy(personaje.ip_orquestador, configPersonajePlataformaIp());
	personaje.puerto_orquestador = configPersonajePlataformaPuerto();

	reiniciar(false);

	listaHilosxNivel = list_create();

	pthread_mutex_init (&mutexEnvioMensaje, NULL);
	pthread_mutex_init (&mutexVidas, NULL);
	pthread_mutex_init (&mutexListaHilosxNivel, NULL);
	pthread_mutex_init (&mutexReinicio, NULL);

	REINTENTOS = 0;

	inicializarVariablesGlobales();
}
void inicializarVariablesGlobales() {

	reiniciar(true);
	VIDAS = configPersonajeVidas();

	if (planDeNiveles != NULL)
		queue_destroy_and_destroy_elements(planDeNiveles, (void*)destruirObjetivosxNivel);

	planDeNiveles = configPersonajePlanDeNiveles();

	list_clean_and_destroy_elements(listaHilosxNivel, (void*)destruirEstructuraHiloPersonaje);
}
int principal(int argc, char *argv[]) {

	do {
		reiniciar(false);

		levantarHilosxNivel();

		esperarHilosxNivel();

	} while (personaje.reiniciar);

	chequearFinTodosLosNiveles ();

	return 0;
}
/**
 * @NAME: finalizarPersonaje
 * @DESC: Finaliza todas las variables y estructuras que fueron creadas para el proceso personaje
 */
void finalizarPersonaje() {
	log_info(LOGGER, "FINALIZANDO PROCESO PERSONAJE\n");
	reiniciar(false);

	// TODO Bajar Hilos
	finalizarHilosPersonaje();

	pthread_mutex_destroy(&mutexEnvioMensaje);
	pthread_mutex_destroy(&mutexVidas);
	pthread_mutex_destroy(&mutexListaHilosxNivel);
	pthread_mutex_destroy(&mutexReinicio);

	list_destroy_and_destroy_elements(listaHilosxNivel, (void*)destruirEstructuraHiloPersonaje);
	queue_destroy_and_destroy_elements(planDeNiveles, (void*)destruirObjetivosxNivel);

	destruirConfigPersonaje();
	log_destroy(LOGGER);
}
Exemple #5
0
void sudoku::llenarsudoku(int dif, QString jugador){
    QTime time = QTime::currentTime();
    qsrand (time.msec());
    int a=0,k=0,numero=0,size=0,pos=0,x=0,y=0,posibilidadesSize=0;
    QList<int> removidoX;
    for(int i=0 ; i<9; i++){
        for(int j=0; j<9;j++){
            cuadros[k]=new QLineEdit();
            ui->slayout->addWidget(cuadros[k],i,j);
            //llenado las listas listPosX y listPosY con todas las casilla disponibles
            listPosX.append(i);
            listPosY.append(j);
            k++;
        }
    }
// comienzo de la creacion del sudoku
    // Se llena las matriz con ceros
    llenarCeros(matriz);
        while(listPosX.size()!=0){
            // Se eliminan todos los datos que se encuentran almacenados en la lista de posibilidades
            posibilidades.clear();
            // Se obtiene el tamaño de las lista de posibles casilla
            size=listPosX.size();
            // Se genera un numero aleatorio entre 0 y el tamaño de la lista para obtener una casilla disponble
            pos= qrand()%size;
            // obtiene las posiciones X y Y que se encuentran en la posicion "pos" de las listas
            x=listPosX.at(pos);
            y=listPosY.at(pos);
            // Se genera una lista de posibles numero a colocar en la casilla
            posibilidades=listaDePosibilidades(matriz,x,y);
         // matriz[x][y]=0;
            // Se obtiene el tamaño de la lista de posibilidades
            posibilidadesSize=posibilidades.size();
            if(posibilidadesSize!=0){
                // Se obtiene un numero aleatorio entre 0 y el numero de posibles numeros
                numero= qrand()%posibilidadesSize;
                // Se coloca el numero obtenido en el sudoku
                matriz[x][y]=posibilidades.at(numero);
                // Se remueve de las listas los elementos que se encuentran en las posicion "pos"
                listPosX.removeAt(pos);
                listPosY.removeAt(pos);
            }else{
                // Se eliminan los datos almacenado en la lista de numero removidos
                removidoX.clear();
                // Se añaden las posiciones de los numeros removidos a una lista temporal
                removidoX=reiniciar(matriz,x,y);
                for(a=0;a<removidoX.size();a=a+2){
                    //Se añaden los elementos que se encuentran en la lista temporal a la lista de posibles casillas
                    listPosX.append(removidoX.at(a));
                    listPosY.append(removidoX.at(a+1));
                }
            }
        }
        // Se llena una matriz de ceros con pista para ser resuelto
        colocarPistas(matriz,matrizSudoku,dif);
        k=0;
        for(int i=0 ; i<9; i++){
            for(int j=0; j<9;j++){
                numero=matrizSudoku[i][j];
                cuadros[k]->setText(QString::number(numero));
                if(numero!=0){
                    cuadros[k]->setEnabled(false);
                }
                k++;
            }
        }
        sacarCeros();
}