% Utilitaires de visualisation de routes :- module(util_visu,[ouvre_fen/0,cree/2,cree/3,visu_raz/0,deplace/2,deplace/3]). :-dynamic(table_ref/3) . ouvre_fen :- new(@p,picture('Route')), send(@p,open). % Paramétrage % Longueur et largeur des véhicules selon leur type % div(Type,Longueur, Largeur) dim(voiture, 30,18). dim(moto,20,8). dim(camion,40,25). % longueur d'une "place" entre 2 véhicule et premiere place affichee au départ dim(place,50). premiere_place(50). % Route : longueur, largeur et position en y du bord gauche (c'est à dire : haut) dim(route,1000,80,100). % Nom de la route nom_route('RN13'). % Couleurs : traduction francais-anglais (pour xpce) french2english(jaune,yellow). french2english(rouge,red). french2english(bleu,blue). french2english(vert,green). % Création d'un véhicule. Il sera visualisé dans le bord haut gauche. % Rem. on pourra donc avoir superposition de différents véhicules cree(Nom,Type,Couleur) :- dim(Type,W,H), member(Type,[voiture,camion, moto]),!, french2english(Couleur,Color), new(Ref_box,box(W,H)), new(Ref_tex,text(Nom)), assert(table_ref(Nom,Ref_box,Ref_tex)), new(_,constraint(Ref_box,Ref_tex,identity(center))), send(@p,display,Ref_box), send(@p,display,Ref_tex), send(Ref_box,fill_pattern,colour(Color)). % Création et visualisation de la route cree(Nom,route) :- dim(route,Long,Larg,Pos),Y2 is Larg + Pos, new(@route,device), send(@route,display, line(start_x := 0, start_y := Pos,end_x := Long, end_y:=Pos )), send(@route,display, line(start_x := 0, start_y := Y2,end_x := Long, end_y:=Y2 )), send(@route,display, text(Nom),point(10,Y2)), send(@p,display,@route). % Remise à zero ("kill") des objets graphiques créés par les prédicats % cree/2 (route) et cree/3 (véhicules). visu_raz :- free(@route), fail. visu_raz :- table_ref(_Nom,B,T), free(B), free(T), fail. visu_raz :- retractall(table_ref(_,_,_)). % Déplacement de l'objet B (donné par sa référence en tant qu'objet XPCE, % pas paar son nom) à droite de N pixels bouge(B,N) :- get(B,x,X),get(B,y,Y), X1 is X+N, send(B,move,point(X1,Y)). % Déplacement "standard" de N places (N positif ou negatif) du véhicule de nom Nom deplace(Nom,N) :- dim(place,P), N1 is N*P, table_ref(Nom, B,_), bouge(B,N1). % Positionnement en (X,Y) du véhicule nommé Nom deplace(Nom,X,Y) :- table_ref(Nom, B,_), send(B,move,point(X,Y)).