Mercurial > hg > Applications > Tokio
diff 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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Examples/toy/toy.tokio Thu Aug 30 14:57:44 2007 +0900 @@ -0,0 +1,79 @@ +%% ------------------------------------------------- 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. +