void afficherParcoursInfixe(const Abin a) { if (!estVide(a)) { afficherParcoursInfixe(gauche(a)); cout << (*a).etiquette; afficherParcoursInfixe(droite(a)); } }
OjMechantSimple::OjMechantSimple(const qreal x, const qreal y, QString left1,QString left2,QString right1,QString right2, const bool deplacement=true) : ObjetJeuMobile(x,y,loadListPixmap(left1,left2,right1,right2)), counter(0),deplacement(deplacement) { if(deplacement) droite(); else gauche(); }
Segment segment (const Point p1, const Point p2){ Segment r; r.d = droite (p1,p2); r.p1 = p1; r.p2 = p2; return r; }
void thread_input() { char c; int r; c = getchar(); switch(c) { case 'z': haut(); break; case 's': bas(); break; case 'd': droite(); break; case 'q': gauche(); break; case 27: r = 1; while ((c = getchar()) != -1) { if (c == 27) { r = 1; continue; } r = r * 128 + c; } switch (r) { case 28097: haut(); break; case 28098: bas(); break; case 28099: droite(); break; case 28100: gauche(); break; } } }
int hauteur(const Abin a) { int Maximum(const int a, const int b); if (estVide(a)) { return 0; } return 1 + Maximum(hauteur(gauche(a)), hauteur(droite(a))); }
void second_letter_one(t_grille grille, t_mots *mot, int i, int j) { if ((j < grille.y) && (mot->word[1] == grille.tab[i][j + 1] && mot->trouve != 1)) droite(grille, mot, i ,j); if ((j > 0) && (mot->word[1] == grille.tab[i][j - 1] && mot->trouve != 1)) gauche(grille, mot, i ,j); if ((i > 0) && (mot->word[1] == grille.tab[i - 1][j] && mot->trouve != 1)) haut(grille, mot, i ,j); if ((i < grille.x) && (mot->word[1] == grille.tab[i + 1][j] && mot->trouve != 1)) bas(grille, mot, i ,j); }
void afficherParcoursLargeur(const Abin a) { FileAttente f; init(f); ajoutQueue(f, a); while (!estVide(f)) { if (!estVide(gauche(getTete(f)))) { ajoutQueue(f, gauche(getTete(f))); } if (!estVide(droite(getTete(f)))) { ajoutQueue(f, droite(getTete(f))); } cout << racine(getTete(f)); retirerTete(f); } //desinit(f); }
vector<Point> rebond (const Point coin[12],const Point boules[15], const Point blanche,const Point cane[2],const int rayon){ // tableau dynamique des points a et b Point p; vector<Point> apt; for (int i =0 ; i < 100 ;i++){apt.push_back(p);} vector<Point> bpt; for (int i =0 ; i < 100 ;i++){bpt.push_back(p); bpt[i].x = -10; bpt[i].y = -10; } Point cb; // coordonnées des points de départ cb.x=blanche.x;cb.y=blanche.y; // boule blanche if(distancepp(cane[0],blanche)<distancepp(cane[1],blanche)){ apt[0] = cane[0]; // pointe canne puis déplacement boule blanche bpt[0] = cane[1]; // arrière canne puis déplacement symétrique }else{ apt[0] = cane[1]; // pointe canne puis déplacement boule blanche bpt[0] = cane[0]; // arrière canne puis déplacement symétrique } // equation des bords, des trous, et de la canne (vérifiées : OK ) Segment bord[6]; for(int i = 0; i < 12; i += 2){ bord[i/2]=segment(coin[i],coin[i+1]); } Segment trou[6]; for(int i=1;i < 12; i += 2){ int j = (i+1)%12; trou[(i-1)/2] = segment(coin[i],coin[j]); } vector<Segment> canne; Segment s; for (int i =0 ; i < 6 ;i++){ canne.push_back(s); } canne[0].p1 = apt[0]; canne[0].p2 = bpt[0]; canne[0].d = droite(canne[0].p1,canne[0].p2); // equation des points d'intersection Segment bs[6]; int Lmax = 5; int j = 0; int r = rayon; int t = 0; while(j < Lmax){ //recherche du point d'intersection : for(int i = 0; i < 6; i++){ if(appartient(trou[i],croisement(canne[j].d,trou[i].d))){ if(pscalaire(bpt[j],apt[j],apt[j],croisement(canne[j].d,bord[i].d)) > 0){ apt[j] = croisement(canne[j].d,trou[i].d); t = 1; } } else{ if(appartient(bord[i],croisement(canne[j].d,bord[i].d))){ if(pscalaire(bpt[j],apt[j],apt[j],croisement(canne[j].d,bord[i].d)) > 0){ apt[j+1] = croisement(canne[j].d,bord[i].d); bs[j+1] = bord[i]; bpt[j+1] = sym(bs[j+1], apt[j]); canne[j+1] = segment(apt[j+1],bpt[j+1]); } } } } /* for(int i = 0; i < 15;i++){ Droite d = droite(apt[j],apt[j+1]); if(distancepd(boules[i],d)<r){ Point p = boules[i]; //apt[j+1].x = (-(int)sqrtf(-d.b*d.b*(-4*d.a*d.a*r*r+d.a*d.a*boules[i].x*boules[i].x+2*d.a*d.b*boules[i].x*boules[i].y+2*d.a*d.c*boules[i].x-4*d.b*d.b*r*r+d.b*d.b*boules[i].y*boules[i].y+2*d.b*d.c*boules[i].y+d.c*d.c))-d.a*d.b*boules[i].y-d.a*d.c+d.b*d.b*boules[i].x)/(d.a*d.a+d.b*d.b); //apt[j+1].y =(d.a*(int)sqrtf(-d.b*d.b*(-4*d.a*d.a*r*r+d.a*d.a*boules[i].x*boules[i].x+2*d.a*d.b*boules[i].x*boules[i].y+2*d.a*d.c*boules[i].x-4*d.b*d.b*r*r+d.b*d.b*boules[i].y*boules[i].y+2*d.b*d.c*boules[i].y+d.c*d.c))+d.a*d.a*d.b*boules[i].y-d.a*d.b*d.b*boules[i].x-d.b*d.b*d.c)/(d.b*(d.a*d.a+d.b*d.b)); apt[j+1].x = (-(int)sqrtf(-d.b*d.b*(-4*d.a*d.a*r*r+d.a*d.a*p.x*p.x+2*d.a*d.b*p.x*p.y+2*d.a*d.c*p.x-4*d.b*d.b*r*r+d.b*d.b*p.y*p.y+2*d.b*d.c*p.y+d.c*d.c))-d.a*d.b*p.y-d.a*d.c+d.b*d.b*p.x)/(d.a*d.a+d.b*d.b); apt[j+1].y = (d.a*(int)sqrtf(-d.b*d.b*(-4*d.a*d.a*r^2+d.a*d.a*p.x^2+2*d.a*d.b*p.x*p.y+2*d.a*d.c*p.x-4*d.b*d.b*r^2+d.b*d.b*p.y^2+2*d.b*d.c*p.y+d.c*d.c))+d.a*d.a*d.b*p.y-d.a*d.b*d.b*p.x-d.b*d.b*d.c)/(d.b*(d.a*d.a+d.b*d.b)); Droite d1 = droite(apt[j+1],boules[i]); Vecteur v; v.x = d1.a; v.y = d1.b; Droite d2 = droitev(apt[j+1],v); bpt[j+1] = projection(d2,apt[j]); canne[j+1] = segment(apt[j+1],bpt[j+1]); t = 0; } } */ j = j+1; if(t == 1 ){ break; } } return apt; }
void deplacements(struct Serpent pSerpents[], int *pNbSerpents, int *pLargeur, int *pHauteur, char pEspace[], int pArret[]) { int i = 0; for( i = 0; i < *pNbSerpents; i++) { switch(pSerpents[i].direction) { case GAUCHE: if(pEspace[pSerpents[i].position - 1] == ' ' && ((pSerpents[i].position) % (*pLargeur)) != 0) { (pSerpents[i].position) -= 1; } else { if(pEspace[pSerpents[i].position + *pLargeur] == ' ' && (pSerpents[i].position + *pLargeur) < (*pLargeur * (*pHauteur))) { gauche(pLargeur, &pSerpents[i]); } else if(pEspace[pSerpents[i].position - *pLargeur] == ' ') { droite(pLargeur, &pSerpents[i]); } else { pArret[i] = 1; } } break; case DROITE: if(pEspace[pSerpents[i].position + 1] == ' ' && ((pSerpents[i].position) % (*pLargeur)) != (*pLargeur - 1)) { (pSerpents[i].position) += 1; } else { if(pEspace[pSerpents[i].position - *pLargeur] == ' ' && (pSerpents[i].position + *pLargeur) > 0) { gauche(pLargeur, &pSerpents[i]); } else if(pEspace[pSerpents[i].position + *pLargeur] == ' ') { droite(pLargeur, &pSerpents[i]); } else { pArret[i] = 1; } } break; case HAUT: if(pEspace[pSerpents[i].position - *pLargeur] == ' ' && ((pSerpents[i].position) - *pLargeur) > 0) { (pSerpents[i].position) -= *pLargeur; } else { if(pEspace[pSerpents[i].position - 1] == ' ' && ((pSerpents[i].position) % (*pLargeur)) != 0) { gauche(pLargeur, &pSerpents[i]); } else if(pEspace[pSerpents[i].position + 1] == ' ') { droite(pLargeur, &pSerpents[i]); } else { pArret[i] = 1; } } break; case BAS: if(pEspace[pSerpents[i].position + *pLargeur] == ' ' && ((pSerpents[i].position) + *pLargeur) < (*pLargeur * (*pHauteur))) { (pSerpents[i].position) += *pLargeur; } else { if(pEspace[pSerpents[i].position + 1] == ' ' && ((pSerpents[i].position) % (*pLargeur)) != (*pLargeur -1)) { gauche(pLargeur, &pSerpents[i]); } else if(pEspace[pSerpents[i].position - 1] == ' ') { droite(pLargeur, &pSerpents[i]); } else { pArret[i] = 1; } } break; default: break; } pEspace[pSerpents[i].position] = pSerpents[i].direction; } }
void trouver_chemin(GameElements::Map * map, Math::Vector2<int> & my_cell,Math::Vector2<int> & target_cell,std::vector<Math::Vector2<int>> & chemin) { value_tab[my_cell[0]][my_cell[1]] =0; Math::Vector2<int> current_cell = target_cell; int val_h = 0,val_b = 0,val_d = 0,val_g = 0; while(!(current_cell[0] == my_cell[0] && current_cell[1] == my_cell[1])) { val_h =0; val_b =0; val_g =0; val_d =0; //calculer les index des cellules autour Math::Vector2<int> haut(current_cell); Math::Vector2<int> bas(current_cell); Math::Vector2<int> gauche(current_cell); Math::Vector2<int> droite(current_cell); Math::Vector2<int> choice(current_cell); if(bas[0] < map->height()-1) bas[0] ++; if(haut[0] > 0) haut[0] --; if(gauche[1] > 0) gauche[1] --; if(droite[1] < map->width()-1) droite[1] ++; int min_val = value_tab[current_cell[0]][current_cell[1]]; if(haut[0] != current_cell[0]){val_h = value_tab[haut[0]][haut[1]];} if(gauche[1] != current_cell[1]){val_g = value_tab[gauche[0]][gauche[1]];} if(droite[1] != current_cell[1]){val_d = value_tab[droite[0]][droite[1]];} if(bas[0] != current_cell[0]){ val_b = value_tab[bas[0]][bas[1]] ;} //rechercher la cellule avec la valeur min la plus proche if(val_h == -1 && val_d == -1 && val_g == -1 && val_b == -1){std::cout << "CELLULE NON ATTEINTE !! " << std::endl;break;} else{ if(val_h != -1) if(min_val > val_h) { min_val = val_h; choice = haut; } if(val_g != -1) if(min_val > val_g) { min_val = val_g; choice = gauche; } if(val_d != -1) if(min_val > val_d) { min_val = val_d; choice = droite; } if(val_b != -1) if(min_val > val_b) { min_val = val_b; choice = bas; } current_cell = choice ; chemin.push_back(choice); } } }
void supprimer(Tas *t, Elem *el) { int i = 0; int j, d, g, s; int idx = el->numero; if(t->val[idx] == NULL) { #ifdef DEBUG printf("Le noeud n'existe pas.\n"); #endif return; } else { i = t->val[idx]->posTas; } #ifdef DEBUG printf("Element trouve : %d\n", i); #endif //decrementer le nombre de noeud t->nbNoeud--; if(i == t->nbNoeud) { //c'est le dernier élément l'effacer uniquement t->tas[t->nbNoeud] = -1; return; } //echanger le dernier noeud avec le noeud à supprimer //et effacer le dernier noeud t->tas[i] = t->tas[t->nbNoeud]; t->tas[t->nbNoeud] = -1; //stocker la valeur dans le tas t->val[t->tas[i]]->posTas = i; //remonter du pere si il existe if(i != 0) { i = pere(i); } //reordonner tous les noeuds au dessous du pere while(i >= 0) { //initialiser le noeud a une valeur impossible j = -1; d = droite(i); g = gauche(i); if((d < t->nbNoeud) && compare(t, d, i)) { if(compare(t, g, d)) { //fils gauche existe et est le plus petit des deux fils j = g; } else { //fils droit existe et est plus petit que le pere j = d; } } else { if((g < t->nbNoeud) && compare(t, g, i)) { //fils gauche existe et est le plus petit que le pere j = g; } //le pere est le plus petit arrêter } if(j>=0) { //il faut faire un swap avec le pére s = t->tas[i]; t->tas[i] = t->tas[j]; t->tas[j] = s; //stocker la valeur dans le tas t->val[t->tas[i]]->posTas = i; t->val[t->tas[j]]->posTas = j; } //j est le nouveau pére i = j; } }