示例#1
0
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();

}
示例#3
0
文件: Algo.cpp 项目: Bugro/CUBI
Segment segment (const Point p1, const Point p2){


	Segment r;
	r.d = droite (p1,p2);
	r.p1 = p1;
	r.p2 = p2;

	return r; 
}
示例#4
0
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;
        }

    }
}
示例#5
0
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)));
}
示例#6
0
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);
}
示例#7
0
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);

}
示例#8
0
文件: Algo.cpp 项目: Bugro/CUBI
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;





}	
示例#9
0
文件: snake.c 项目: simard/MasterCCI
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;
      
    }
  
  
}
示例#10
0
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);
		}	
	}
}
示例#11
0
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;
  }
}