void timer_ISR(void) { switch (estado){ case STOP: if(pulsador == DERECHO && get_simbolo() != 15 && get_simbolo() != 12){ confirmacion = 1; } boton_pulsado = 1; rEXTINTPND = 0xf; // borra los bits en EXTINTPND rI_ISPC |= BIT_EINT4567; // Se borra el bit pendiente de la interrupcion del boton. rINTMSK &= ~(BIT_EINT4567); // Activa la interrupcion del boton ya que se ha soltado. timer_stop(); break; case PULSAR: num_ms += 1; if (num_ms == 100){ switch (pulsador){ case IZQUIERDO: contador_ficha+=1; break; case DERECHO: num_ms = 0; break; } estado = ESTABLE; } break; case ESTABLE: switch (pulsador){ case IZQUIERDO: //boton izq (0100) num_ms += 1; if(num_ms % 500 == 0){ contador_ficha+=1; } if (rPDATG & (1 << 6)){ //si se ha soltado estado = SOLTAR; num_ms = 0; } break; case DERECHO: //boton der (1000) if (rPDATG & (1 << 7)){ //si se ha soltado estado = SOLTAR; } break; } break; case SOLTAR: num_ms += 1; if (num_ms == 100){ estado = STOP; num_ms = 0; } break; } /* borrar bit en I_ISPC para desactivar la solicitud de interrupcion */ rF_ISPC |= BIT_TIMER0; // BIT_TIMER0 esta definido en 44b.h y pone un uno en el bit 13 que correponde al Timer0 }
void Protagonista::mover_protagonista(char mov, Mazmorra& m){ if (mov == 'w') { if (m.get_vector_arquitectura(get_posicion()%get_largo(), (get_posicion()/get_largo())-1) == ' ' || m.get_vector_arquitectura(get_posicion()%get_largo(), (get_posicion()/get_largo())-1) == 'X') { posicion tmp; tmp.x = get_posicion()%get_largo(); tmp.y = get_posicion()/get_largo(); set_posicion(get_posicion()%get_largo(), (get_posicion()/get_largo())-1); m.set_vector_personajes(tmp.x, tmp.y, ' '); m.set_vector_personajes(get_posicion()%get_largo(), get_posicion()/get_largo(), get_simbolo()); } else if (m.get_vector_arquitectura(get_posicion()%get_largo(), (get_posicion()/get_largo())-1) == '+') { posicion tmp; tmp.x = get_posicion()%get_largo(); tmp.y = get_posicion()/get_largo(); set_posicion(m.get_habitacion_puerta_pos(0, 1)%get_largo(), (m.get_habitacion_puerta_pos(0, 1)/get_largo())-1); m.set_vector_personajes(tmp.x, tmp.y, ' '); m.set_vector_personajes(get_posicion()%get_largo(), get_posicion()/get_largo(), get_simbolo()); set_habitacion_actual(0); } else { cout << "IMPOSIBLE MOVERSE EN ESA DIRECCIÓN, INTÉNTALO DE NUEVO." << endl; } } if (mov == 's') { if (m.get_vector_arquitectura(get_posicion()%get_largo(), (get_posicion()/get_largo())+1) == ' ' || m.get_vector_arquitectura(get_posicion()%get_largo(), (get_posicion()/get_largo())+1) == 'X') { posicion tmp; tmp.x = get_posicion()%get_largo(); tmp.y = get_posicion()/get_largo(); set_posicion(get_posicion()%get_largo(), (get_posicion()/get_largo())+1); m.set_vector_personajes(tmp.x, tmp.y, ' '); m.set_vector_personajes(get_posicion()%get_largo(), get_posicion()/get_largo(), get_simbolo()); } else if (m.get_vector_arquitectura(get_posicion()%get_largo(), (get_posicion()/get_largo())+1) == '+') { if (get_habitacion_actual() == 0) { posicion tmp; tmp.x = get_posicion()%get_largo(); tmp.y = get_posicion()/get_largo(); set_posicion(m.get_habitacion_puerta_pos(2, 1)%get_largo(), (m.get_habitacion_puerta_pos(2, 1)/get_largo())+1); m.set_vector_personajes(tmp.x, tmp.y, ' '); m.set_vector_personajes(get_posicion()%get_largo(), get_posicion()/get_largo(), get_simbolo()); set_habitacion_actual(2); } else if (get_habitacion_actual() == 1) { posicion tmp; tmp.x = get_posicion()%get_largo(); tmp.y = get_posicion()/get_largo(); set_posicion((m.get_habitacion_puerta_pos(2, 0)%get_largo())-1, m.get_habitacion_puerta_pos(2, 0)/get_largo()); m.set_vector_personajes(tmp.x, tmp.y, ' '); m.set_vector_personajes(get_posicion()%get_largo(), get_posicion()/get_largo(), get_simbolo()); set_habitacion_actual(2); } } else { cout << "IMPOSIBLE MOVERSE EN ESA DIRECCIÓN, INTÉNTALO DE NUEVO." << endl; } } if (mov == 'a') { if (m.get_vector_arquitectura((get_posicion()%get_largo())-1, (get_posicion()/get_largo())) == ' ' || m.get_vector_arquitectura((get_posicion()%get_largo())-1, (get_posicion()/get_largo())) == 'X') { posicion tmp; tmp.x = get_posicion()%get_largo(); tmp.y = get_posicion()/get_largo(); set_posicion((get_posicion()%get_largo())-1, (get_posicion()/get_largo())); m.set_vector_personajes(tmp.x, tmp.y, ' '); m.set_vector_personajes(get_posicion()%get_largo(), get_posicion()/get_largo(), get_simbolo()); } else if (m.get_vector_arquitectura((get_posicion()%get_largo())-1, (get_posicion()/get_largo())) == '+') { posicion tmp; tmp.x = get_posicion()%get_largo(); tmp.y = get_posicion()/get_largo(); set_posicion((m.get_habitacion_puerta_pos(0, 0)%get_largo())-1, (m.get_habitacion_puerta_pos(0, 0)/get_largo())); m.set_vector_personajes(tmp.x, tmp.y, ' '); m.set_vector_personajes(get_posicion()%get_largo(), get_posicion()/get_largo(), get_simbolo()); set_habitacion_actual(0); } else { cout << "IMPOSIBLE MOVERSE EN ESA DIRECCIÓN, INTÉNTALO DE NUEVO." << endl; } } if (mov == 'd') { if (m.get_vector_arquitectura((get_posicion()%get_largo())+1, (get_posicion()/get_largo())) == ' ' || m.get_vector_arquitectura((get_posicion()%get_largo())+1, (get_posicion()/get_largo())) == 'X') { posicion tmp; tmp.x = get_posicion()%get_largo(); tmp.y = get_posicion()/get_largo(); set_posicion((get_posicion()%get_largo())+1, (get_posicion()/get_largo())); m.set_vector_personajes(tmp.x, tmp.y, ' '); m.set_vector_personajes(get_posicion()%get_largo(), get_posicion()/get_largo(), get_simbolo()); } else if (m.get_vector_arquitectura((get_posicion()%get_largo())+1, (get_posicion()/get_largo())) == '+') { if (get_habitacion_actual() == 0) { posicion tmp; tmp.x = get_posicion()%get_largo(); tmp.y = get_posicion()/get_largo(); set_posicion((m.get_habitacion_puerta_pos(1, 0)%get_largo())+1, (m.get_habitacion_puerta_pos(1, 0)/get_largo())); m.set_vector_personajes(tmp.x, tmp.y, ' '); m.set_vector_personajes(get_posicion()%get_largo(), get_posicion()/get_largo(), get_simbolo()); set_habitacion_actual(1); } else if (get_habitacion_actual() == 2) { posicion tmp; tmp.x = get_posicion()%get_largo(); tmp.y = get_posicion()/get_largo(); set_posicion((m.get_habitacion_puerta_pos(1, 1)%get_largo()), (m.get_habitacion_puerta_pos(1, 1)/get_largo())-1); m.set_vector_personajes(tmp.x, tmp.y, ' '); m.set_vector_personajes(get_posicion()%get_largo(), get_posicion()/get_largo(), get_simbolo()); set_habitacion_actual(1); } } else { cout << "IMPOSIBLE MOVERSE EN ESA DIRECCIÓN, INTÉNTALO DE NUEVO." << endl; } } }
Protagonista::Protagonista(Mazmorra& m) : Personajes(m.get_largo()){ set_posicion((m.get_acceso()%get_largo())+1, m.get_acceso()/get_largo()); set_simbolo('@'); m.set_vector_personajes((m.get_acceso()%m.get_largo())+1, m.get_acceso()/m.get_largo(), get_simbolo()); set_vidas(5); set_fuerza(5); set_habitacion_actual(0); Beneficio = 0; }