/** * @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); }
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(); }