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 килобайт )
Кол-во скачиваний: 766