Ejemplo n.º 1
0
void Affichage(arbre p)
{
    if(p != NULL)
    {
        Affichage(p->fils_g);
        printf("%d", p->jeton.lexem);
        Affichage(p->fils_d);
    }
}
Ejemplo n.º 2
0
Archivo: main.c Proyecto: nd4pa/tp
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;
}