% trace domains file = valores r = real lr = r* i = integer s = symbol st = string c = char li = i* lst = st* key = arr;aba;der;izq; rpag;apag; enter;esc;otro % ___________________________________________________________________________ % ------- ------- predicates actualiza(i,i) a_key(key) b_key(i,key) e_tecla(key) key(i,key) color(i,i,i) fantasma modo_grafico run database - f f(i,i,i,i) % -(Xa,Ya,Xn,Yn) database - brinco brinco(i) % -(Incremento) es el SNAP. database - cambio cambio(i) % -(cambio?) detecta si no es flecha. clauses modo_grafico:- DetectGraph(G_Driver, G_Mode1), color(G_Driver,G_Mode1,G_Mode), InitGraph(G_Driver,G_Mode, _, _, bgi_Path),!. color(1,_,0). color(_,Mode,Mode). run:- a_key(K), !, e_tecla(K), fantasma, run. a_key(Key):- inkey(K), !, char_int(K,Asc), key(Asc,Key). a_key(K_):- !,a_key(K_). key(13,enter):- !. key(27,esc):- !. key(0,Key):- readchar(T), char_int(T,Asc), b_key(Asc,Key). key(_,otro):- !. b_key(72,arr):-!. b_key(80,aba):-!. b_key(75,izq):-!. b_key(77,der):-!. b_key(73,rpag):-!. b_key(81,apag):-!. b_key(_,otro):-!. % --------------------------------------------------------------------------- % --------------------------------------------------------------------------- e_tecla(esc):- !,fail. e_tecla(izq):- f(_,_,X1,Y1), brinco(B), X1 - B > 10, !, X1 - B = X2, actualiza(X2,Y1). e_tecla(arr):- f(_,_,X1,Y1), brinco(B), Y1 - B > 10, !, Y1 - B = Y2, actualiza(X1,Y2). e_tecla(der):- f(_,_,X1,Y1), brinco(B), X1 + B < 590, !, X1 + B = X2, actualiza(X2,Y1). e_tecla(aba):- f(_,_,X1,Y1), brinco(B), Y1 + B < 290, !, Y1 + B = Y2, actualiza(X1,Y2). % izq = 3 arr = 10 der = 600 aba = 300 e_tecla(rpag):- brinco(B), B > 5, !, retractall(_,brinco), B - 5 = B1, asserta(brinco(B1),brinco), retractall(_,cambio), asserta(cambio(1),cambio). e_tecla(apag):- brinco(B), B < 20, !, retractall(_,brinco), B + 5 = B1, asserta(brinco(B1),brinco), retractall(_,cambio), asserta(cambio(1),cambio). e_tecla(enter):- cursor(20,50), f(_,_,X,Y), write(X," ",Y), !, retractall(_,cambio), asserta(cambio(1),cambio). e_tecla( _ ):- !, retractall(_,cambio), asserta(cambio(1),cambio). % --------------------------------------------------------------------------- fantasma:- % cursor ==> wi = 10 hi = 10 not(cambio(1)), f(Xa,Ya,Xn,Yn), Xa1 = Xa - 10, Ya1 = Ya - 10, % Xa2 = Xa + 10, Ya2 = Ya + 10, Xn1 = Xn - 10, Yn1 = Yn - 10, Xn2 = Xn + 10, Yn2 = Yn + 10, getimage(500,350,520,370,Figa), putimage(Xa1,Ya1,Figa,0), getimage(Xn1,Yn1,Xn2,Yn2,Fign), putimage(500,350,Fign,0), setcolor(2), line(Xn1,Yn,Xn2,Yn), line(Xn,Yn1,Xn,Yn2), !. fantasma:- !. actualiza(Xn,Yn):- f(_,_,Xa,Ya), retractall(_,f), retractall(_,cambio), asserta(f(Xa,Ya,Xn,Yn),f), !. % --------------------------------------------------------------------------- goal modo_grafico, outtextxy(200,2,"Control del cursor"), outtextxy(20,60,"Control del cursor"), setcolor(4),rectangle(1,1,601,301), line(10,10,250,250),line(250,250,560,10), retractall(_,f), asserta(f(110,20,110,20),f), retractall(_,brinco), asserta(brinco(1),brinco), getimage(100,10,120,30,Bit), putimage(500,350,Bit,0), readchar(_), fantasma, run, closegraph().