void task(int x_origen, int y_origen) { /* Tarea */ //breakpoint(); //while(1); int x_actual = x_origen; int y_actual = y_origen; //breakpoint(); while (TRUE) { int direccion = syscall_olfatear(); if (direccion == AQUI) break; actualizar(&x_actual, &y_actual, direccion); syscall_moverse(direccion); } while (syscall_cavar() != 0) {} ir_hacia_desde(0, y_actual, &x_actual, &y_actual); ir_hacia_desde(0, 0, &x_actual, &y_actual); ir_hacia_desde(x_origen, 0, &x_actual, &y_actual); ir_hacia_desde(x_origen, y_origen, &x_actual, &y_actual); while(1) { __asm __volatile("mov $2, %%eax":::"eax"); } }
void ir_hacia_desde(char x_dest, char y_dest, char x_actual, char y_actual) { char dir_h = x_dest > x_actual ? DER : IZQ; char dir_v = y_dest > y_actual ? ABA : ARR; int dist_x = x_dest > x_actual ? x_dest - x_actual : x_actual - x_dest; int dist_y = y_dest > y_actual ? y_dest - y_actual : y_actual - y_dest; int i = 0; for (i = dist_x; i>0; i--) syscall_moverse(dir_h); for (i = dist_y; i>0; i--) syscall_moverse(dir_v); }
void task(int x, int y) { // Perro "CORRO Y ME CUELGO" int i = 20; while(i--){ syscall_moverse(ARR); } while(1) { __asm __volatile("mov $2, %%eax":::"eax"); } }
void ir_hacia_desde(char x_dest, char y_dest, int * x_actual, int * y_actual) { char dir_h = x_dest > *x_actual ? DER : IZQ; char dir_v = y_dest > *y_actual ? ABA : ARR; int dist_x = x_dest > *x_actual ? x_dest - *x_actual : *x_actual - x_dest; int dist_y = y_dest > *y_actual ? y_dest - *y_actual : *y_actual - y_dest; int i = 0; for (i = dist_x; i>0; i--) { actualizar(x_actual, y_actual, (int)dir_h); syscall_moverse(dir_h); } for (i = dist_y; i>0; i--) { actualizar(x_actual, y_actual, (int)dir_v); syscall_moverse(dir_v); } }