Exemple #1
0
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;
}