void Affichage(arbre p) { if(p != NULL) { Affichage(p->fils_g); printf("%d", p->jeton.lexem); Affichage(p->fils_d); } }
int main(){ Monome *tete = NULL; Ajout_ordreM(1,1,&tete); //P_AjoutM(3,2,&tete); //P_AjoutM(4,5,&tete); Ajout_ordreM(2,10,&tete); Ajout_ordreM(2,8,&tete); Ajout_ordreM(3.5,2,&tete); Ajout_ordreM(4,2,&tete); Affichage(tete); return 0; }
void BackFire(int hauteur,int largeur,ROBOT *robot,char **map,char *type_affichage,GRAPH *graph,FEU *feu){ int continuer=1; int i; while(continuer){ //conserve les dernieres coordonnees du robots avec le type de la case robot->pos_old=robot->pos; if(map[robot->pos.y][robot->pos.x-1]=='i'){ robot->pos.x--;//GAUCHE } else if(map[robot->pos.y-1][robot->pos.x]=='i'){ robot->pos.y--;//NORD } else if(map[robot->pos.y][robot->pos.x+1]=='i'){ robot->pos.x++;//DROITE } else if(map[robot->pos.y+1][robot->pos.x]=='i'){ robot->pos.y++;//SUD } //regarde si il est dans le feu for(i=0;i<feu->pos;i++){ if(robot->pos.y==feu->Tab[i].y&&robot->pos.x==feu->Tab[i].x&&(feu->Tab[i].type=='1'||feu->Tab[i].type=='2')){ robot->vie--; continuer=0; } } //augemente le nb de pas robot->dep++; //ecrit le pas precedent et celle du robot SetCase(map,robot->pos_old,'j'); SetCase(map,robot->pos,'P'); //affichage Affichage(map,hauteur,largeur,robot,type_affichage,graph,feu); } return; }
void Deplacement(int hauteur,int largeur,ROBOT *robot,char **map,FEU *feu,QUEUE *q, char *type_affichage,GRAPH *graph,char arrive,char chemin,int stop){ int i; char type_feu='0'; int continuer=1; while(continuer){ //conserve les dernieres coordonnees du robots avec le type de la case robot->pos_old=robot->pos; //suit le chemin du craractere envoyé en parametre et arrive au caractere de parametre envoyé if(map[robot->pos.y-1][robot->pos.x]==chemin||map[robot->pos.y-1][robot->pos.x]==arrive){ robot->pos.y--;//NORD } else if(map[robot->pos.y][robot->pos.x-1]==chemin||map[robot->pos.y][robot->pos.x-1]==arrive){ robot->pos.x--;//GAUCHE } else if(map[robot->pos.y+1][robot->pos.x]==chemin||map[robot->pos.y+1][robot->pos.x]==arrive){ robot->pos.y++;//SUD } else if(map[robot->pos.y][robot->pos.x+1]==chemin||map[robot->pos.y][robot->pos.x+1]==arrive){ robot->pos.x++;//DROITE } //arrive sur le caracteres envoye en parametre if(GetCase(map,robot->pos)==arrive){ continuer=0; } //regarde si on est dans un feu quelle valeur du feu for(i=0;i<feu->pos;i++){ if(robot->pos.y==feu->Tab[i].y&&robot->pos.x==feu->Tab[i].x){ type_feu=feu->Tab[i].type; } } //si il est passé dans un feu il garde en memoire la derniere coordonnee et calcul le chemin le plus court if(type_feu=='1'){ robot->vie--; //conserve les coordonnees du feu robot->feu=robot->pos; //si il arrive a un 1 pour la recherche du feu il se stop if(!stop){ continuer=0; } } //si il arrive dans le 2 il lance l'algo de pathfinding v2 pour reprendre le chemin le plus court tout en esquivant les 2 et 3 if(type_feu=='2'){ robot->vie-=2; //conserve les coordonnees du feu robot->feu=robot->pos; //netoit la map CleanMap(map,largeur,hauteur); //rajoute le feu pour le pathfinding AddFire (map,feu); //scan la map avec comme parametre de ne pas pouvoir aller dans le feu Scan(map,q,robot,1,'E'); //trace le chemin le plus court Trace(map,q); } //regarde si on a 0 pdv if(robot->vie==0){ system(CLEARSCREEN); printf("GAME OVER"); exit(1); } //trace le passage du robot SetCase(map,robot->pos_old,'i'); //si le robot est en mode pompier alors on ecrit p sinon r if(robot->pompier==0){ SetCase(map,robot->pos,'R'); } else{ SetCase(map,robot->pos,'P'); } //augemente le nb de deplacement robot->dep++; //affiche Affichage(map,hauteur,largeur,robot,type_affichage,graph,feu); type_feu='0'; } return; }