% 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().