Mercurial > hg > Applications > Tokio
view Examples/toy/toy.tokio @ 0:cfb7c6b24319
Initial revision
author | kono |
---|---|
date | Thu, 30 Aug 2007 14:57:44 +0900 |
parents | |
children |
line wrap: on
line source
%% ------------------------------------------------- BOUNCE toy :- static([green, red, move, stop, start,quit]), *move:=1,*quit:=0,*stop:=0,*start:=1,*red:=0,*green:=1, bounce_init(W,R,G),@toy1(W,R,G). toy1(W,R,G) :- [](event), % input s1, % automaton []((button_red(R),button_green(G),bounce(W))). % output % ?- compile(['../tableau/gi.out']). event :- nextevent(E),E=E1,event_select(E1). event_select(noevent) :- true. event_select(button(_,start)) :- *start := 1, *stop := 0. event_select(button(_,stop)) :- *stop := 1, *start := 0. event_select(button(_,quit)) :- *quit := 1. button_red(Out) :- *red =0, Out => out(""). button_red(Out) :- *red =1, Out => out("Red"). button_green(Out) :- *green =0, Out => out(""). button_green(Out) :- *green =1, Out => out("Green"). % size(400,400,10,fixed) :- true. size(200,200,5,'7x14') :- true. bounce_init( [Window0, View0, Circ0, Xout0, X, Yout0, Y, Xd, Yd, Ydd, Xlim, Ylim],Xout0,Yout0) :- size(Hight,Width,R,Font), H0 = Hight-2, W0 = Width-2, H1 = Hight/2, W1 = Width/2, View <= view(Hight,Width), % View => setcolors(rgb(65000,0,0),white), Xout <= output("Red",font(Font)), Yout <= output("Green",font(Font)), Start <= button("Start",start,font(Font)), Stop <= button("Stop",stop,font(Font)), Quit <= button("Quit",quit,font(Font)), Box <= hbox([vbox([Xout,Yout,space,Start,Stop,Quit]),View]), Window <= window("Toy Program",Box), Window => open, View => rect(0,0,H0,W0), View => fillcircle(Circ,H1,W1,R), Window0<--Window, View0<--View, Circ0<--Circ, Xout0<--Xout, Yout0<--Yout, Ylim = Hight-10, Xlim = Width-10, Ydd = -R/2, #((@Ylim=Ylim,@Xlim=Xlim,@Ydd=Ydd)), @X = H1, @Y = W1, @Xd = R/2, @Yd = R*2. bounce([_, View, Obj, _Xout, X, _Yout, Y, Xd, Yd, Ydd, Xlim, _]) :- *move = 1,*quit = 0, X0 is integer(X), Y0 is integer(Y), View => moveto(Obj,X0,Y0), Y1 is Y+Yd, calc_xd(X, Xd, Xd1, Xlim), calc_yd(Y, Yd, Ydt, Y1, Yt1), @X = X+Xd,@Xd = Xd1, @Y = Yt1, @Yd = Ydt+Ydd. bounce([_, _, _, _, X, _, Y, Xd, Yd, _, _, _]) :- *move = 0,*quit = 0, @X = X,@Xd = Xd, @Y = Y, @Yd = Yd. bounce([W|_]) :- *quit = 1, W => close. calc_xd(X, Xd, Xd1, _) :- X < 10, Xd1 is abs(Xd). calc_xd(X, Xd, Xd1, Xlim) :- X > Xlim, Xd1 is -abs(Xd). calc_xd(_, Xd, Xd, _):-true. calc_yd(Y, Yd, Ydt, _, Y0) :- Y < 10, Yd > 0 , Ydt = Yd,Y0 = 10. calc_yd(Y, Yd, Ydt, _, Y0) :- Y < 10, Ydt = -Yd*0.9,Y0 = 10. calc_yd(_, Yd, Yd, Y1, Y1):-true.