% Alexis Engelke - Kreisbewegung start :- new(@picture, picture('Test')), new(@frame, frame('Welt')), new(@dialog, dialog('Welt')), new(@B, button('Neu', message(@prolog, new, ''))), new(@Halt, button('Halt', message(@prolog, halt))), new(@text, text_item('Position')), send(@text, width(50)), send(@text, editable(false)), send(@dialog, display(@B, point(0, 0))), send(@dialog, display(@Halt, point(60, 0))), send(@dialog, display(@text, point(130, 0))), send(@frame, append(@dialog)), send(@picture, below(@dialog)), send(@frame, open). new(_) :- random(2, 30, Size), new(Kreis, circle(Size)), random(0, 5, ColIndex), nth0(ColIndex, [green, black, red, blue, yellow, orange], Col), send(Kreis, colour(Col)), send(Kreis, fill_pattern(colour(Col))), get(@picture, width, W), get(@picture, height, H), MaxH is H - 30, MaxW is W - 30, random(0, MaxW, Xp), random(0, MaxH, Yp), send(Kreis, recogniser(click_gesture(left, '', single, message(@prolog, dwrite, Kreis, Size, Col)))), send(Kreis, recogniser(handler(loc_move, message(@prolog, move, @event?position?x, @event?position?y, Kreis)))), send(@picture, display(Kreis, point(Xp, Yp))). dwrite(Kreis, Size, Color) :- get(Kreis, x, Xpos), get(Kreis, y, Ypos), atomic_list_concat(['X:',Xpos,'; Y:', Ypos, '; Size:', Size, '; Colour:', Color], ' ', MyText), send(@text, value(MyText)). move(MouseX, MouseY, Circle) :- /*get(Circle, radius, R), writeln('H'), get(Circle, x, X), writeln('H2'), get(Circle, y, Y), writeln('H3'), dist(MouseX, MouseY, X, Y, D), writeln(D), D < R,*/ get(@picture, width, W), get(@picture, height, H), MaxH is H - 30, MaxW is W - 30, random(0, MaxW, Xp), random(0, MaxH, Yp), send(Circle, move(point(Xp, Yp))). /* move(MouseX, MouseY, Circle) :- get(Circle, radius, R), get(Circle, x, X), get(Circle, y, Y), dist(MouseX, MouseY, X, Y, D), writeln(D), \+ (D < R).*/ dist(Xa, Ya, Xb, Yb, Dist) :- DeltaX is Xa - Xb, DetlaY is Ya - Yb, Dist is sqrt(DeltaX * DeltaX + DeltaY * DeltaY). :- start.