Шарик влетает в стакан, отскакивает от стенок, ударяется о дно стакана и меняет направление движения и т.д. При этом сверху стакана закрывается крышкой, шарик продолжает движение внутри. Траекторию движения шарика не показывать. Программа завершается нажатием «мышкой» кнопки «Стоп» на экране — Pascal(Паскаль)

uses graph, WinDos, Crt;
var cpu:Tregisters;
 
var mousex,mousey,select:integer;
 
var menu:record n,x0,y0,w,h,h2:integer;end;
 
procedure mouseinit;
begin
cpu.ax:=0;intr($33,cpu);
end;
 
procedure mouseshow;
begin
cpu.ax:=1;intr($33,cpu);
end;
 
procedure mousehide;
begin
cpu.ax:=2;intr($33,cpu);
end;
 
function mousepoll:integer;
begin
cpu.ax:=3;intr($33,cpu);
mousex:=cpu.cx;
mousey:=cpu.dx;
mousepoll:=cpu.bx;
end;
 
procedure menushow;
var i,x,y,c:integer;
begin
x:=menu.x0;y:=menu.y0;
for i:=1 to menu.n do begin
if i=select then c:=1 else c:=0;
SetFillStyle(1,c);
bar(x,y,x+menu.w,y+menu.h);
rectangle(x,y,x+menu.w,y+menu.h);
SetTextJustify(CenterText,CenterText);
if i=1 then OutTextXY(x+menu.w div 2,y+menu.h div 2,'Start')
else        OutTextXY(x+menu.w div 2,y+menu.h div 2,'Stop');
y:=y+menu.h2;
end;
end;
 
procedure menupoll;
var i,x,y:integer;
begin
if mousepoll<>1 then exit;
mousehide;
x:=menu.x0;y:=menu.y0;
for i:=1 to menu.n do begin
if (mousex>x) and (mousey>y)
   and (mousex<x+menu.w) and (mousey<y+menu.h) then select:=i;
y:=y+menu.h2;
end;
menushow;
mouseshow;
end;
 
 
procedure menunew;
begin
select:=0;
with menu do begin
n:=2;
x0:=550;
y0:=400;
w:=80;
h:=20;
h2:=40;
end;
menushow;
end;
 
var
grDriver: Integer;
grMode: Integer;
ErrCode: Integer;
x,y,r,dx,dy,x0,y0,x1,y1,moving: Integer;
begin
grDriver := vga;
grMode := vgahi;
InitGraph(grDriver, grMode,'');
ErrCode := GraphResult;
if ErrCode <> grOk then exit;
menunew;
moving:=0;
x0:=50;y0:=50;
x1:=x0+400;y1:=y0+300;
x:=x0+50;y:=y0+30;r:=10;
dx:=1;dy:=1;
rectangle(x0,y0,x1,y1);
circle(x,y,r);
mouseinit;
mouseshow;
while select<>2 do begin
  if select=1 then moving:=1;
  if moving<>0 then begin
    {mousehide;}
    setcolor(0);circle(x,y,r);
    if x <= x0+r+5 then dx:=1;
    if x >= x1-r-5 then dx:=-1;
    if y <= y0+r+5 then dy:=1;
    if y >= y1-r-5 then dy:=-1;
    x:=x+5*dx;y:=y+5*dy;
    setcolor(15);circle(x,y,r);
    {mouseshow;}
    Delay(50);
  end;
  menupoll;
end;
 
mousehide;
CloseGraph;
end.

Leave a Comment

+ 47 = 51