Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * @brief Logica del processo del singolo coccodrillo
- *
- * @param arg puntatore alla struttura ThreadArgs di inizializzazione
- */
- void* croc_logic(void* arg){
- int steps=0, phase_steps=0;
- bool next_phase=false;
- ThreadArgs thread_args = *((ThreadArgs*)arg);
- //spacchettamento argomento
- WINDOW* win = thread_args.win;
- Obj croc = thread_args.obj;
- int delay = thread_args.delay;
- Direction direction = thread_args.direction;
- //id del thread
- croc.tid = pthread_self();
- //prima inizializzazione passi
- switch(croc.id){
- case BAD_CROC_L:
- case BAD_CROC_R:
- phase_steps = rand_range(MIN_BAD_CROC_STEPS, MAX_BAD_CROC_STEPS);
- break;
- default:
- phase_steps = EMERGING_STEPS;
- break;
- }
- //ciclo di generazione delle coordinate
- while(true){
- //spostamento
- croc.x += (direction==LEFT ? -1 : 1);
- //se il coccodrillo e' totalmente fuori dalla window
- if(obj_out_of_win(win, croc, BOXED)){
- //randomizza il fatto di essere buono o cattivo
- croc.id = rand_croc_id(direction);
- //se e' fuori riporta al bordo corretto
- croc.x = direction==LEFT ? getmaxx(win)-2 : 2-CROC_W;
- //se e' cattivo prepara l'immersione
- switch(croc.id){
- case BAD_CROC_L:
- case BAD_CROC_R:
- phase_steps = rand_range(MIN_BAD_CROC_STEPS, MAX_BAD_CROC_STEPS);
- }
- }
- //cammina sino alla prossima fase
- if(steps < phase_steps){
- steps++;
- }else{
- steps = 0;
- next_phase = true;
- }
- //controllo di prossima fase
- if(next_phase){
- next_phase = false;
- //fasi di immersione ed emersione del coccodrillo
- switch(croc.id){
- //* Inizia l'immersione
- case BAD_CROC_L:
- case BAD_CROC_R:
- phase_steps = SUBMERGING_STEPS;
- croc.id = (direction==LEFT) ? BAD_CROC_L_SUBMERGING : BAD_CROC_R_SUBMERGING;
- break;
- //* Immerso
- case BAD_CROC_L_SUBMERGING:
- case BAD_CROC_R_SUBMERGING:
- phase_steps = UNDER_WATER_STEPS;
- croc.id = BAD_CROC_SUBMERGED;
- break;
- //* Inizia l'emersione
- case BAD_CROC_SUBMERGED:
- phase_steps = UNDER_WATER_STEPS;
- croc.id = (direction==LEFT) ? GOOD_CROC_L_EMERGING : GOOD_CROC_R_EMERGING;
- break;
- //* Emerso
- case GOOD_CROC_L_EMERGING:
- case GOOD_CROC_R_EMERGING:
- phase_steps = EMERGING_STEPS;
- croc.id = (direction==LEFT) ? GOOD_CROC_L : GOOD_CROC_R;
- break;
- }
- }
- write_buffer(croc);
- usleep(delay);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement