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.
+