예제 #1
0
void Projectile::move(int dx, int dy) {
    
    if ((id == 1 || id == 2) && max > 0) return;
    
    Monde* gpMonde = gpJeu->getMonde();
    
    if (x+dx+zx <= gpMonde->regionValue(0) || x+dx+zx+zw >= gpMonde->regionValue(2)
    || y+dy+zy <= gpMonde->regionValue(1) || y+dy+zy+zh >= gpMonde->regionValue(3)) {
        fin(); return;
    }
    
    if (id == 3) testAgrippe();
    
    int valeur=0;
    bool obstacle = false;
    
    switch (direction) {
        case N:
            valeur = gpMonde->murValue(x+dx+zx+(zw/2), y+dy+zy+4);
            if (valeur == PLEIN || valeur == BOIS) obstacle = true;
            else if (valeur == BAS || valeur == BAS_GAUCHE || valeur == BAS_DROITE) hauteur--;
            else if (valeur == HAUT || valeur == HAUT_GAUCHE || valeur == HAUT_DROITE) hauteur++;
            break;
        case S:
            valeur = gpMonde->murValue(x+dx+zx+(zw/2), y+dy+zy+zh-1-4);
            if (valeur == PLEIN || valeur == BOIS) obstacle = true;
            else if (valeur == BAS || valeur == BAS_GAUCHE || valeur == BAS_DROITE) hauteur++;
            else if (valeur == HAUT || valeur == HAUT_GAUCHE || valeur == HAUT_DROITE) hauteur--;
            break;
        case O:
            valeur = gpMonde->murValue(x+dx+zx+4, y+dy+zy+(zh/2));
            if (valeur == PLEIN || valeur == BOIS) obstacle = true;
            else if (valeur == DROITE || valeur == HAUT_DROITE || valeur == BAS_DROITE) hauteur--;
            else if (valeur == GAUCHE || valeur == HAUT_GAUCHE || valeur == BAS_GAUCHE) hauteur++;
            break;
        case E:
            valeur = gpMonde->murValue(x+dx+zx+zw-1-4, y+dy+zy+(zh/2));
            if (valeur == PLEIN || valeur == BOIS) obstacle = true;
            else if (valeur == DROITE || valeur == HAUT_DROITE || valeur == BAS_DROITE) hauteur++;
            else if (valeur == GAUCHE || valeur == HAUT_GAUCHE || valeur == BAS_GAUCHE) hauteur--;
            break;
    }
    
    if (((obstacle && !hauteur) || hauteur < 0 || (chmax>0 && chemin>=chmax)) && etape == 1) {
        fin();
    }else {
        x+=dx; y+=dy; 
        if (etape==1) chemin++;
        else chemin--;
        if (id == 3 && chemin <= 0) { vie = 0; gpJeu->getJoueur()->setTypeAnim(AUCUNE);}
    }
}
예제 #2
0
파일: Snipe.cpp 프로젝트: eduardok/ZeldaOLB
void Snipe::depl() {
    Monde* gpMonde = gpJeu->getMonde();
    
    if (x+anglx <= gpMonde->regionValue(0) || x+anglx >= gpMonde->regionValue(2)
    || y+angly <= gpMonde->regionValue(1) || y+angly >= gpMonde->regionValue(3)) {
        fin(); return;
    }
    
    int valeur = gpMonde->murValue((int)(x+anglx), (int)(y+angly));
    bool obstacle = (valeur == PLEIN || valeur == BOIS);
    
    if (angly < 0) {
        if (valeur == BAS || valeur == BAS_GAUCHE || valeur == BAS_DROITE) hauteur--;
        else if (valeur == HAUT || valeur == HAUT_GAUCHE || valeur == HAUT_DROITE) hauteur++;
    }
    if (angly > 0) {
        if (valeur == BAS || valeur == BAS_GAUCHE || valeur == BAS_DROITE) hauteur++;
        else if (valeur == HAUT || valeur == HAUT_GAUCHE || valeur == HAUT_DROITE) hauteur--;
    }
    if (anglx < 0) {
        if (valeur == DROITE || valeur == HAUT_DROITE || valeur == BAS_DROITE) hauteur--;
        else if (valeur == GAUCHE || valeur == HAUT_GAUCHE || valeur == BAS_GAUCHE) hauteur++;
    }
    if (anglx > 0) {
        if (valeur == DROITE || valeur == HAUT_DROITE || valeur == BAS_DROITE) hauteur++;
        else if (valeur == GAUCHE || valeur == HAUT_GAUCHE || valeur == BAS_GAUCHE) hauteur--;
    }
    
    if ((obstacle && !hauteur) || hauteur < 0 ) fin();
    else {
        for (int i = 0; i < 7; i++) {
            historique[7-i][0]=historique[6-i][0];
            historique[7-i][1]=historique[6-i][1];
        }
        historique[0][0]=x;
        historique[0][1]=y;
        x+=anglx; y+=angly;
    }
}
예제 #3
0
파일: Snipe.cpp 프로젝트: eduardok/ZeldaOLB
void Snipe::fin() {
    if (id == 7) {
        Monde* gpMonde = gpJeu->getMonde();
        
        int valeur = gpMonde->murValue((int)(x+anglx), (int)y);
        bool obstacleX = (valeur == PLEIN || valeur == BOIS);
        valeur = gpMonde->murValue((int)x, (int)(y+angly));
        bool obstacleY = (valeur == PLEIN || valeur == BOIS);
        
        if (obstacleX && obstacleY) {anglx=-anglx; angly=-angly; return;}
        if (x+anglx <= gpMonde->regionValue(0) || x+anglx >= gpMonde->regionValue(2)
        || obstacleX) {
            anglx=-anglx;
            return;
        }
        if (y+angly <= gpMonde->regionValue(1) || y+angly >= gpMonde->regionValue(3)
        || obstacleY) {
            angly=-angly;
            return;
        }
        return;
    }
    vie = 0;
}