示例#1
0
uint game_perro_atender_call(ushort accion_id, uint extra) {
	uint result;
	result = NULL;
	switch (accion_id) {
		case 1:
			// moverse
			result = game_perro_mover(sched_tarea_actual(), extra);
			break;
		case 2:
			// cavar
			result = game_perro_cavar(sched_tarea_actual());
			break;
		case 3:
			// olfatear
			result = game_perro_olfatear(sched_tarea_actual());
			break;
		case 4:
			// recibir orden
			result = game_perro_recibir_orden(sched_tarea_actual());
			break;
		default:
			break;

	}
	return result;

	//cambiar a la tarea idle
}
示例#2
0
// recibe un perro, el cual debe cavar en su posición
// *** viene del syscall cavar ***
uint game_perro_cavar(perro_t *perro)
{
	// ~~~ completar ~~~

	//vemos si esta sobre un escondite
	if (game_perro_olfatear(perro) != AQUI) {
		//breakpoint();
		//no esta sobre un escondite
		return 0;
	}

	//vemos si no tiene 10 huesos
	if (perro->huesos >= 10) {
		//breakpoint();
		//no puede cargar mas
		return 0;
	}

	//vemos si al escondite le quedan huesos
	if (game_huesos_en_posicion(perro->x, perro->y) == 0) {
		//no hay huesos
		//breakpoint();
		return 0;
	}

	//aumentamos su cantidad de huesos
	perro->huesos += 1;
	//disminuimos la cantidad de huesos del escondite
	game_huesos_desenterrar(perro->x, perro->y);

	return 1;
}
示例#3
0
uint game_syscall_manejar(uint syscall, uint param1)
{
   	uint res;	
 // ~ completar llamando a las funciones que haga falta ~
   	switch(syscall){
		case 1: res = game_perro_mover(game_perro_actual, param1); break;
		case 2: res = game_perro_cavar(game_perro_actual); break;
		case 3: res = game_perro_olfatear(game_perro_actual); break;
		case 4: res = (uint) game_perro_recibirOrden(game_perro_actual); break;
		default: return -1;
	}
	 return res;
}