Program FLAG; uses crt,graph; type PCircle = ^TCircle; Tcircle = object x,y,Radius,rradius : integer; color:byte; visible:boolean; Constructor Init(ix,iy:integer; iRadius:integer; icolor: byte); procedure Show;virtual; function gety:integer; virtual; procedure hide; virtual; procedure drag(step:integer;ch:char); procedure MoveTo(xnew,ynew:integer); function isvisible:boolean; end; var driver,i,mode,y,x:integer; p1,p2,p3:pcircle; Ch,Q:char; procedure igrpole; begin setbkcolor(black); setcolor(darkgray); setfillstyle(solidfill,4); bar(120,6,276,162); setfillstyle(solidfill,15); bar(276,6,432,162); setfillstyle(solidfill,15); bar(432,6,588,162); setfillstyle(solidfill,1); bar(276,162,432,318); setfillstyle(solidfill,15); bar(120,162,276,318); setfillstyle(solidfill,15); bar(432,162,588,318); setfillstyle(solidfill,2); bar(432,318,588,474); setfillstyle(solidfill,15); bar(120,318,276,474); setfillstyle(solidfill,15); bar(276,318,432,474); for i:=157 to 167 do line(120,i,276,i); for i:=427 to 437 do line(i,6,i,162); for i:=313 to 323 do line(120,i,432,i); line(120,6,588,6); line(120,6,120,474); line(120,474,588,474); line(588,6,588,474); line(276,6,276,474); line(432,6,432,474); line(120,162,588,162); line(120,318,588,318); end; constructor Tcircle.init; begin x:=ix; y:=iy; radius:=iradius; color:=icolor; visible:=false; end; function Tcircle.IsVisible; begin IsVisible:=visible; end; procedure Tcircle.show; var tempcolor:byte; begin tempcolor:=getcolor; setcolor(color); setfillstyle(solidfill,color); fillellipse(x,y,radius,radius); visible:=true; setcolor(tempcolor); end; procedure Tcircle.Hide; var tempColor:byte; begin tempColor:=color; color:=getpixel(x+radius+5,y+radius+5); setfillstyle(solidfill,color); show; visible:=false; color:=TempColor; end; procedure Tcircle.Drag(Step:integer;ch:char); const centr1x=198; centr2x=354; centr3x=510; centr1y=84; centr2y=240; centr3y=396; begin Case Ord(Ch) of 72:if (x<>198) and (y<>84) and ((x<>354) or (y<>396)) and (((p1^.x<>centr2x) or (p1^.y<>centr1y)) or {Начало проверки красного и синего шарика на позиции 354} ((p2^.x<>centr2x) or (p2^.y<>centr2y))) and (((p1^.x<>centr2x) or (p1^.y<>centr2y)) or ((p2^.x<>centr2x) or (p2^.y<>centr1y))) and {Конец проверки красного и синего шарика на позиции 354} (((p1^.x<>centr3x) or (p1^.y<>centr1y)) or {Начало проверки красного и синего шарика на позиции 510} ((p2^.x<>centr3x) or (p2^.y<>centr2y))) and (((p1^.x<>centr3x) or (p1^.y<>centr2y)) or ((p2^.x<>centr3x) or (p2^.y<>centr1y))) and {Конец проверки красного и синего шарика на позиции 510} (((p1^.x<>centr2x) or (p1^.y<>centr1y)) or {Начало проверки красного и зеленого шарика на позиции 354} ((p3^.x<>centr2x) or (p3^.y<>centr2y))) and (((p1^.x<>centr2x) or (p1^.y<>centr2y)) or ((p3^.x<>centr2x) or (p3^.y<>centr1y))) and {Конец проверки красного и зеленого шарика на позиции 354} (((p1^.x<>centr3x) or (p1^.y<>centr1y)) or {Начало проверки красного и зеленого шарика на позиции 510} ((p3^.x<>centr3x) or (p3^.y<>centr2y))) and (((p1^.x<>centr3x) or (p1^.y<>centr2y)) or ((p3^.x<>centr3x) or (p3^.y<>centr1y))) and {Конец проверки красного и зеленого шарика на позиции 510} (((p3^.x<>centr2x) or (p3^.y<>centr1y)) or {Начало проверки зеленого и синего шарика на позиции 354} ((p2^.x<>centr2x) or (p2^.y<>centr2y))) and (((p3^.x<>centr2x) or (p3^.y<>centr2y)) or ((p2^.x<>centr2x) or (p2^.y<>centr1y))) and {Конец проверки зеленого и синего шарика на позиции 354} (((p3^.x<>centr3x) or (p3^.y<>centr1y)) or {Начало проверки зеленого и синего шарика на позиции 510} ((p2^.x<>centr3x) or (p2^.y<>centr2y))) and (((p3^.x<>centr3x) or (p3^.y<>centr2y)) or ((p2^.x<>centr3x) or (p2^.y<>centr1y))) then {Конец проверки зеленого и синего шарика на позиции 510} MoveTo(x, y-Step); {Up} 75:if (x<>198) and ((x<>510) or (y<>84)) and (((p1^.x<>centr1x) or (p1^.y<>centr1y)) or {na4alo proverki 2-h sharikov na pozicii 354} ((p2^.x<>centr2x) or (p2^.y<>centr1y))) and (((p1^.x<>centr2x) or (p1^.y<>centr1y)) or ((p2^.x<>centr1x) or (p2^.y<>centr1y))) and {konec proverki 2-h sharikov na pozicii 354} (((p1^.x<>centr1x) or (p1^.y<>centr2y)) or {na4alo proverki 2-h sharikov na pozicii 550} ((p2^.x<>centr2x) or (p2^.y<>centr2y))) and (((p1^.x<>centr2x) or (p1^.y<>centr2y)) or ((p2^.x<>centr1x) or (p2^.y<>centr2y))) and {konec proverki 2-h sharikov na pozicii 550} (((p1^.x<>centr1x) or (p1^.y<>centr3y)) or {na4alo proverki 2-h sharikov na pozicii 354} ((p2^.x<>centr2x) or (p2^.y<>centr3y))) and (((p1^.x<>centr2x) or (p1^.y<>centr3y)) or ((p2^.x<>centr1x) or (p2^.y<>centr3y))) and (((p1^.x<>centr1x) or (p1^.y<>centr1y)) or {na4alo proverki 2-h sharikov na pozicii 354} ((p3^.x<>centr2x) or (p3^.y<>centr1y))) and (((p1^.x<>centr2x) or (p1^.y<>centr1y)) or ((p3^.x<>centr1x) or (p3^.y<>centr1y))) and {konec proverki 2-h sharikov na pozicii 354} (((p1^.x<>centr1x) or (p1^.y<>centr2y)) or {na4alo proverki 2-h sharikov na pozicii 550} ((p3^.x<>centr2x) or (p3^.y<>centr2y))) and (((p1^.x<>centr2x) or (p1^.y<>centr2y)) or ((p3^.x<>centr1x) or (p3^.y<>centr2y))) and (((p1^.x<>centr1x) or (p1^.y<>centr3y)) or {na4alo proverki 2-h sharikov na pozicii 354} ((p3^.x<>centr2x) or (p2^.y<>centr3y))) and (((p1^.x<>centr2x) or (p1^.y<>centr3y)) or ((p3^.x<>centr1x) or (p2^.y<>centr3y))) and (((p3^.x<>centr1x) or (p3^.y<>centr1y)) or {na4alo proverki 2-h sharikov na pozicii 354} ((p2^.x<>centr2x) or (p2^.y<>centr1y))) and (((p3^.x<>centr2x) or (p3^.y<>centr1y)) or ((p2^.x<>centr1x) or (p2^.y<>centr1y))) and {konec proverki 2-h sharikov na pozicii 354} (((p3^.x<>centr1x) or (p3^.y<>centr2y)) or {na4alo proverki 2-h sharikov na pozicii 550} ((p2^.x<>centr2x) or (p2^.y<>centr2y))) and (((p3^.x<>centr2x) or (p3^.y<>centr2y)) or ((p2^.x<>centr1x) or (p2^.y<>centr2y))) and (((p3^.x<>centr1x) or (p1^.y<>centr3y)) or {na4alo proverki 2-h sharikov na pozicii 354} ((p2^.x<>centr2x) or (p2^.y<>centr3y))) and (((p3^.x<>centr2x) or (p1^.y<>centr3y)) or ((p2^.x<>centr1x) or (p2^.y<>centr3y))) then {konec proverki 2-h sharikov na pozicii 354} MoveTo(x-Step, y); {Left} 77:if (x<>510) and ((x<>354) or (y<>84)) and (((p1^.x<>centr1x) or (p1^.y<>centr1y)) or {na4alo proverki 2-h sharikov na pozicii 354} ((p2^.x<>centr2x) or (p2^.y<>centr1y))) and (((p1^.x<>centr2x) or (p1^.y<>centr1y)) or ((p2^.x<>centr1x) or (p2^.y<>centr1y))) and {konec proverki 2-h sharikov na pozicii 354} (((p1^.x<>centr3x) or (p1^.y<>centr2y)) or {na4alo proverki 2-h sharikov na pozicii 550} ((p2^.x<>centr2x) or (p2^.y<>centr2y))) and (((p1^.x<>centr2x) or (p1^.y<>centr2y)) or ((p2^.x<>centr3x) or (p2^.y<>centr2y))) and {konec proverki 2-h sharikov na pozicii 550} (((p1^.x<>centr3x) or (p1^.y<>centr3y)) or {na4alo proverki 2-h sharikov na pozicii 354} ((p2^.x<>centr2x) or (p2^.y<>centr3y))) and (((p1^.x<>centr2x) or (p1^.y<>centr3y)) or ((p2^.x<>centr3x) or (p2^.y<>centr3y))) and (((p1^.x<>centr1x) or (p1^.y<>centr1y)) or {na4alo proverki 2-h sharikov na pozicii 354} ((p3^.x<>centr2x) or (p3^.y<>centr1y))) and (((p1^.x<>centr2x) or (p1^.y<>centr1y)) or ((p3^.x<>centr1x) or (p3^.y<>centr1y))) and {konec proverki 2-h sharikov na pozicii 354} (((p1^.x<>centr3x) or (p1^.y<>centr2y)) or {na4alo proverki 2-h sharikov na pozicii 550} ((p3^.x<>centr2x) or (p3^.y<>centr2y))) and (((p1^.x<>centr2x) or (p1^.y<>centr2y)) or ((p3^.x<>centr3x) or (p3^.y<>centr2y))) and (((p1^.x<>centr3x) or (p1^.y<>centr3y)) or {na4alo proverki 2-h sharikov na pozicii 354} ((p3^.x<>centr2x) or (p2^.y<>centr3y))) and (((p1^.x<>centr2x) or (p1^.y<>centr3y)) or ((p3^.x<>centr3x) or (p2^.y<>centr3y))) and (((p3^.x<>centr1x) or (p3^.y<>centr1y)) or {na4alo proverki 2-h sharikov na pozicii 354} ((p2^.x<>centr2x) or (p2^.y<>centr1y))) and (((p3^.x<>centr2x) or (p3^.y<>centr1y)) or ((p2^.x<>centr1x) or (p2^.y<>centr1y))) and {konec proverki 2-h sharikov na pozicii 354} (((p3^.x<>centr3x) or (p3^.y<>centr2y)) or {na4alo proverki 2-h sharikov na pozicii 550} ((p2^.x<>centr2x) or (p2^.y<>centr2y))) and (((p3^.x<>centr2x) or (p3^.y<>centr2y)) or ((p2^.x<>centr3x) or (p2^.y<>centr2y))) and (((p3^.x<>centr3x) or (p1^.y<>centr3y)) or {na4alo proverki 2-h sharikov na pozicii 354} ((p2^.x<>centr2x) or (p2^.y<>centr3y))) and (((p3^.x<>centr2x) or (p1^.y<>centr3y)) or ((p2^.x<>centr3x) or (p2^.y<>centr3y))) then MoveTo(x+Step, y); {Right} 80:if (x<>198) and (y<>396) and ((x<>354) or (y<>240)) and (((p1^.x<>centr2x) or (p1^.y<>centr1y)) or {Начало проверки красного и синего шарика на позиции 354} ((p2^.x<>centr2x) or (p2^.y<>centr2y))) and (((p1^.x<>centr2x) or (p1^.y<>centr2y)) or ((p2^.x<>centr2x) or (p2^.y<>centr1y))) and {Конец проверки красного и синего шарика на позиции 354} (((p1^.x<>centr3x) or (p1^.y<>centr3y)) or {Начало проверки красного и синего шарика на позиции 510} ((p2^.x<>centr3x) or (p2^.y<>centr2y))) and (((p1^.x<>centr3x) or (p1^.y<>centr2y)) or ((p2^.x<>centr3x) or (p2^.y<>centr3y))) and {Конец проверки красного и синего шарика на позиции 510} (((p1^.x<>centr2x) or (p1^.y<>centr1y)) or {Начало проверки красного и зеленого шарика на позиции 354} ((p3^.x<>centr2x) or (p3^.y<>centr2y))) and (((p1^.x<>centr2x) or (p1^.y<>centr2y)) or ((p3^.x<>centr2x) or (p3^.y<>centr1y))) and {Конец проверки красного и зеленого шарика на позиции 354} (((p1^.x<>centr3x) or (p1^.y<>centr3y)) or {Начало проверки красного и зеленого шарика на позиции 510} ((p3^.x<>centr3x) or (p3^.y<>centr2y))) and (((p1^.x<>centr3x) or (p1^.y<>centr2y)) or ((p3^.x<>centr3x) or (p3^.y<>centr3y))) and {Конец проверки красного и зеленого шарика на позиции 510} (((p3^.x<>centr2x) or (p3^.y<>centr1y)) or {Начало проверки зеленого и синего шарика на позиции 354} ((p2^.x<>centr2x) or (p2^.y<>centr2y))) and (((p3^.x<>centr2x) or (p3^.y<>centr2y)) or ((p2^.x<>centr2x) or (p2^.y<>centr1y))) and {Конец проверки зеленого и синего шарика на позиции 354} (((p3^.x<>centr3x) or (p3^.y<>centr3y)) or {Начало проверки зеленого и синего шарика на позиции 510} ((p2^.x<>centr3x) or (p2^.y<>centr2y))) and (((p3^.x<>centr3x) or (p3^.y<>centr2y)) or ((p2^.x<>centr3x) or (p2^.y<>centr3y))) then MoveTo(x, y+Step); {Down} end; { case} end; function tcircle.gety:integer; begin gety:=y; end; procedure Tcircle.MoveTo(xnew,ynew:integer); var Flag:boolean; begin Flag:=IsVisible; if Flag then Hide; x:=xnew; y:=ynew; if Flag then Show; end; begin driver:=vga; mode:=2; initgraph(driver,mode,'c:\bp\bgi'); igrpole; new(p1,init(198,84,25,10)); new(p2,init(354,240,25,9)); new(p3,init(510,396,25,12)); p1^.show; p2^.show; p3^.show; repeat ch:=readkey; if ord(ch)=0 then ch:=readkey; p1^.drag(156,ch); p2^.drag(156,ch); p3^.drag(156,ch); until (((p1^.x=510) and (p1^.y=396)) and ((p2^.x=354) and (p2^.y=240)) and ((p3^.x=198) and (p3^.y=84))) or (ord(ch)=13); closegraph; end.