:-object wasp5 : [bcilib]. var url = './soccer/soccer1b.wrl'. var sleeptime=100. var distance=5. var timelimit = 500. var interpolation=5. main :- text_area(Browser), set_output(Browser), format('Load the game ...~n'), loadURL(url), format('the game will start in 5 seconds,~n'), format('note that the total playing time period is ~w seconds,~n', [timelimit]), delay(5000), format('the game startup,~n'), play_ball(me, ball). play_ball(Agent, Ball) :- -- timelimit, timelimit > 0, !, format('time left: ~w seconds~n', [timelimit]), delay(800), near_ball_then_kick(Agent, Ball), play_ball(Agent, Ball). play_ball(_, _). near_ball_then_kick(Agent, Ball):- getViewpointPositionEx(Agent,X,_Y,Z), getPosition(Ball,X1,Y1,Z1), Xdif is X1-X, Zdif is Z1-Z, Dist is sqrt(Xdif*Xdif + Zdif*Zdif), Dist < 5, !, X2 is Xdif*distance, Z2 is Zdif*distance, X3 is X2 + X1, Z3 is Z2 + Z1, move_to_position(Ball, position(X1,Y1,Z1),position(X3,Y1,Z3),interpolation). near_ball_then_kick(_, _). move_to_position(Ball,_,position(X,Y,Z),0):- setPosition(Ball,X,Y,Z). move_to_position(Ball, position(X1,Y1,Z1),position(X2,Y2,Z2),C):- C1 is C-1, Xdif is X2 -X1, Zdif is Z2 -Z1, X is X1 + Xdif/C, Z is Z1 + Zdif/C, setPosition(Ball,X,Y1,Z), sleep(100), move_to_position(Ball,position(X,Y1,Z),position(X2,Y2,Z2),C1). getViewpointPositionEx(_,X,Y,Z) :- getSFVec3f(proxSensor,position,X,Y,Z). getViewpointOrientationEx(_,X,Y,Z,R):- getSFRotation(proxSensor,orientation,X,Y,Z,R). :-end_object wasp5.