LAPP...
Посмотри пожалуйста....
Да и все..
посмотрите это пожалуйста....
))
Я сделал реализацию своей игры...
Впринципе работает..
Но вот в чём глюк..
в некоторых моментах Шарик двигаться не хочет.....
Или наоборот..
исчезает..
в основном исчезает на синей позиции.......
Т.е. на синем квадратике....
Посмотрите пожалуйста........
Заранее скажу..
В процедуре драг......
На каждую клавишу ставлю проверку...
Конечно длинная...
но как смог..
Вот..
))) 
 Код
Program shar;
 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;
         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;
  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.
Вот сама прога
Попробуйте её....ПЛИЗ!!!
А то не хочется проблем потом от преподователя!!!
)))
 APARIN_O.PAS ( 12.66 килобайт )
Кол-во скачиваний: 840