Объектно-ориентированное программирование. Разработка программы, имеющей графическую заставку, работу с массивом, матрицей и со связным списком, страница 6

end;

end;

{разрушение связанного списка}

destructor objspis.Done;

var

buff:link;

i:integer;

begin

for i:=1 to k do

begin

buff:=list^.next;

dispose(list);

list:=buff;

end;

end;

{Графическая заставка}

procedure zastavka;

var

gd,gm,x,y,x1,y1,dx,dy:integer;

{Фон}

procedure background;

var

x1,y1:integer;

begin

{прорисовка звезд}

setfillstyle(1,1);

for y1:=0 to 10 do

for x1:=0 to 40 do

begin

pieSlice(x1*100,y1*100,30,30,10);

pieSlice(x1*70,y1*60,30,30,10);

end;

{прорисовка плaнеты c кoльцaми}

FillEllipse(550,50,45,40);

Ellipse(550,50,150,388,50,10);

Ellipse(550,50,135,402,60,15);

Ellipse(550,50,125,414,70,20);

{прорисовка сoлнцa}

setfillstyle(1,14);

PieSlice(0,0,0,360,80);

end;

{полет самолета}

procedure sam;

var       xq,yq,dxq,dyq:integer;

ch:char;

procedure  write_sam(xk,yk:integer);

begin

{прорисовка корпуса}

line(xk-90,yk-45,xk-70,yk-45);

line(xk-90,yk-45,xk-90,yk+15);

line(xk-90,yk+15,xk+45,yk+15);

line(xk+45,yk+15,xk+100,yk);

line(xk-70,yk-45,xk-55,yk-15);

line(xk-55,yk-15,xk+55,yk-15);

line(xk+55,yk-15,xk+100,yk);

setfillstyle(3,2);

floodfill(xk,yk,15);

{прорисовка руля}

line(xk-80,yk-45,xk-80,yk-10);

line(xk-80,yk-10,xk-90,yk-10);

setfillstyle(8,2);

floodfill(xk-85,yk-35,15);

{прорисовка крыльев}

setfillstyle(8,2);

line(xk-15,yk,xk+45,yk);

line(xk-35,yk+50,xk-5,yk+50);

line(xk-15,yk,xk-35,yk+50);

line(xk+45,yk,xk-5,yk+50);

floodfill(xk,yk+20,15);

floodfill(xk,yk+5,15);

line(xk-35,yk-30,xk-5,yk-30);

line(xk-35,yk-30,xk-20,yk-15);

line(xk-5,yk-30,xk+40,yk-15);

floodfill(xk-20,yk-20,15);

line(xk-75,yk,xk-50,yk);

line(xk-85,yk+20,xk-75,yk+20);

line(xk-75,yk,xk-85,yk+20);

line(xk-50,yk,xk-75,yk+20);

floodfill(xk-70,yk+5,15);

floodfill(xk-80,yk+18,15);

{прорисовка кабины}

arc(xk+70,yk-6,0,145,15);

setfillstyle(9,2);

floodfill(xk+72,yk-10,15);

end;

{затирание самолета прямоугольником цвета фона}

procedure  del_sam(xk,yk:integer);

begin

setfillstyle(1,0);

bar(xk-90,yk-50,xk+100,yk+50);

end;

{движение по экрану}

procedure  dvig_sam(var xk,yk:integer; dxk,dyk:integer);

begin

write_sam(xk,yk);

delay(2000);

del_sam(xk,yk);

xk:=xk+dxk;

yk:=yk+dyk;

end;

begin

background;

xq:=0;  yq:=320;

write_sam(xq,yq);

readkey;

dxq:=0; dyq:=0;

repeat

settextstyle(0,0,3);

outtextxy(140,440,'Kibaljuk_Alexei_I361');

dvig_sam(xq,yq,dxq,dyq);

background;

ch:=' ';

if keypressed

then ch:=readkey;

case ch of

#72: if dyq<>-5 then dec(dyq);

#80: if dyq<>5  then inc(dyq);

#75: if dxq<>-5 then dec(dxq);

#77: if dxq<>5  then inc(dxq);

end;

if xq<-5 then dxq:=-dxq;

if yq<0 then dyq:=-dyq;

if xq>680 then xq:=0;

if yq>500 then yq:=0;

until ch=#27;

end;

begin

gd:=9; {тип драйвера-VGA}

gm:=2; {режим работы адаптера-640*480}

x:=700;

y:=350;

dx:=0;

initgraph(gd,gm,'');            {инициализация графического режима}

sam;

closegraph;                          {закрытие графического режима}

end;

{Создание меню}

procedure menu(kurs:integer);

var

y,i:integer;

begin

clrscr;

textcolor(yellow);

gotoXY(23,5);

write('Для работы выберите нужный пункт меню!');

textcolor(lightblue);

gotoXY(24,9);

writeln('╔══════════════════════════╗');

for i:=1 to l do

begin

gotoXY(24,9+i);

writeln('║                          ║');

end;

gotoXY(24,15);

writeln('╚══════════════════════════╝');

writeln;

textcolor(yellow);

men[1]:='  Массив   ';

men[2]:='  Матрица    ';

men[3]:='  Связанный список   ';

men[4]:='  Заставка  ';

men[5]:='  Выход         ';

y:=10;

for i:=1 to l do

begin

gotoXY(25,y);

y:=y+1;

if i=kurs then

textbackground(red)

else

textbackground(black);

write(men[i]);

textbackground(black)

end;

textcolor(white)

end;

{движение курсора в меню}

procedure kursor;

begin

key:=readkey;

if key =#0 then

key:=readkey;

case key of

{нажатие стрелки вниз}

#80: if kurs<l then

kurs:=kurs+1

else

kurs:=1;

{нажатие стрелки вверх}

#72: if kurs>1 then

kurs:=kurs-1

else

kurs:=l;

{нажатие клавиши ENTER}

#13: begin

case kurs of

1: begin

p:=new(ptrobjmas,Init(m));            {ввод массива}

clrscr;

write('Исходный массив:');

p^.OutData;                {Вывод исходного массива}

p^.Job;                          {Обработка массива}

writeln;

write('Полученный массив:');