Движение треугольника по синусоиде (программа не работает) - Turbo Pascal

Формулировка задачи:

Здравствуйте! Помогите пожалуйста с лабораторкой. Подскажите, почему не работает. (программа запускается, номер цвета принимается, но треугольник не показывает и двигать его не собирается)
{Статические объекты. Вариант 17.
 Движение закрашенного треугольника по синусоиде из левого нижнего
 в правый верхний угол экрана.}
PROGRAM Sta_Obj_17;
USES Graph,Crt;
TYPE
  TMesto=Object{"Место"}
           x,y:Integer;
           Constructor Init(initx,inity:Integer);
           Destructor Done;
         End;
  TPoint=Object(TMesto){"Точка"}
           Procedure Show(color:BYTE);Virtual;
           Procedure Hide;Virtual;
           Procedure MoveTo(newx,newy:Integer;color:BYTE);
         End;
  TTriangle=Object(TPoint){"Треугольник"}
            Constructor Init(initx,inity:integer);
            Procedure Show(color:BYTE); Virtual;
            Procedure Hide; Virtual;
          End;
  TGraph=Object {"Графика"}
           grdriver:Integer;
           grmode:Integer;
           Procedure Init(gd,gm:Integer;path:STRING);
           Procedure Fin;
         End;
 
{Описание методов объекта "место"}
Constructor TMesto.Init(initx,inity:Integer);
Begin
  x:=initx;   {текущие координаты}
  y:=inity;
End;
 
Destructor TMesto.Done;
Begin
  WriteLn;
End;
 
{Описание методов объекта "точка"}
Procedure TPoint.Show(color:BYTE);
Begin
  PutPixel(x,y,color);{Рисование точки}
End;
 
Procedure TPoint.Hide;
Begin
  PutPixel(x,y,GetBkColor);{Гашение}
End;
 
Procedure TPoint.MoveTo(newx,newy:Integer;color:BYTE);
Begin
  Hide;        {Гашение}
  x:=newx;     {Новые координаты}
  y:=newy;
  Show(color); {Рисование}
End;
 
{Описание методов объекта "графика"}
Procedure TGraph.Init(gd,gm:Integer;path:STRING);
Begin
  grdriver:=gd;    {Номера драйверов}
  grmode:=gm;
  IniTGraph(grdriver,grmode,path);
End;
 
Procedure TGraph.Fin;
Begin
  CloseGraph;
End;
 
{Описание методов объекта "круг"}
Constructor TTriangle.Init(initx,inity:integer);    {:integer dobavila}
Begin
  TPoint.Init(initx,inity);
 
End;
 
Procedure TTriangle.Show(color:BYTE);
Begin
  SetColor(Color);       {Текущий цвет}
  SetFillStyle(1,color); {Установка вида штриховки}
  line(x,y,x-20,y-40);   {Рисование}
 line(x,y,x+20,y-40);
 line(x-20,y-40,x+20,y-40);
  FloodFill(x,y,color)   {Закрашивание}
End;
 
Procedure TTriangle.Hide;
Begin
  SetColor(GetBkColor);      {Текущий цвет-это цвет фона}
  SetFillStyle(1,GetBkColor);{Установка вида штриховки}
  line(x,y,x-20,y-40);    {Гашение окружности}
 line(x,y,x+20,y-40);
 line(x-20,y-40,x+20,y-40);
  FloodFill(x,y,GetBkColor); {Закрашивание}
End;
 
VAR
  pc:TTriangle;
  world:TGraph;
  x,y:Integer;
  col:Byte;
 
Begin
  ClrScr;
  WriteLn(' Движение закрашенного треугольника ');
  WriteLn(' из левого нижнего');
  WriteLn(' угла экрана в правый верхний');
  WriteLn(' Введите цвет рисования треугольника (от 1 до 15)');
  ReadLn(col);
  WriteLn('Нажмите ENTER');
  ReadLn;
  World.Init(DETECT,DETECT,'C:\TP\BGI');
  Delay(10000);
  x:=50;
  y:=GetMaxY-50;
  pc.Init(x,y);
  pc.Show(col);
  REPEAT
    Delay(100);
    x:=x+1;
    y:=GetMaxY-x+Round(50*Sin((x-50)*10*PI/360));
    pc.MoveTo(x,y,col);
  UNTIL y<=25;
  World.Fin;
End.


textual

Код к задаче: «Движение треугольника по синусоиде (программа не работает) - Turbo Pascal»

PROGRAM Sta_Obj_17;
USES Graph,Crt;
TYPE
  TMesto=Object{"Место"}
           x,y:Integer;
           Constructor Init(initx,inity:Integer);
           Destructor Done;
         End;
  TPoint=Object(TMesto){"Точка"}
           Procedure Show(color:BYTE);Virtual;
           Procedure Hide;Virtual;
           Procedure MoveTo(newx,newy:Integer;color:BYTE);
         End;
  TTriangle=Object(TPoint){"Треугольник"}
            Constructor Init(initx,inity:integer);
            Procedure Show(color:BYTE); Virtual;
            Procedure Hide; Virtual;
          End;
  TGraph=Object {"Графика"}
           grdriver:Integer;
           grmode:Integer;
           Procedure Init(gd,gm:Integer;path:STRING);
           Procedure Fin;
         End;
 
{Описание методов объекта "место"}
Constructor TMesto.Init(initx,inity:Integer);
Begin
  x:=initx;   {текущие координаты}
  y:=inity;
End;
 
Destructor TMesto.Done;
Begin
  WriteLn;
End;
 
{Описание методов объекта "точка"}
Procedure TPoint.Show(color:BYTE);
Begin
  PutPixel(x,y,color);{Рисование точки}
End;
 
Procedure TPoint.Hide;
Begin
  PutPixel(x,y,GetBkColor);{Гашение}
End;
 
Procedure TPoint.MoveTo(newx,newy:Integer;color:BYTE);
Begin
  Hide;        {Гашение}
  x:=newx;     {Новые координаты}
  y:=newy;
  Show(color); {Рисование}
End;
 
{Описание методов объекта "графика"}
Procedure TGraph.Init(gd,gm:Integer;path:STRING);
Begin
  grdriver:=gd;    {Номера драйверов}
  grmode:=gm;
  IniTGraph(grdriver,grmode,path);
End;
 
Procedure TGraph.Fin;
Begin
  CloseGraph;
End;
 
{Описание методов объекта "круг"}
Constructor TTriangle.Init(initx,inity:integer);    {:integer dobavila}
Begin
  TPoint.Init(initx,inity);
 
End;
 
Procedure TTriangle.Show(color:BYTE);
Begin
  SetColor(Color);       {Текущий цвет}
  SetFillStyle(1,color); {Установка вида штриховки}
  line(x,y,x-20,y-40);   {Рисование}
 line(x,y,x+20,y-40);
 line(x-20,y-40,x+20,y-40);
  FloodFill(x,y,color)   {Закрашивание}
End;
 
Procedure TTriangle.Hide;
Begin
  SetColor(GetBkColor);      {Текущий цвет-это цвет фона}
  SetFillStyle(1,GetBkColor);{Установка вида штриховки}
  line(x,y,x-20,y-40);    {Гашение окружности}
  line(x,y,x+20,y-40);
  line(x-20,y-40,x+20,y-40);
  FloodFill(x,y,GetBkColor); {Закрашивание}
End;
 
VAR
  pc:TTriangle;
  world:TGraph;
  x,y:Integer;
  col:Byte;
 
Begin
  ClrScr;
  WriteLn(' Движение закрашенного треугольника ');
  WriteLn(' из левого нижнего');
  WriteLn(' угла экрана в правый верхний');
  WriteLn(' Введите цвет рисования треугольника (от 1 до 15)');
  ReadLn(col);
  WriteLn('Нажмите ENTER');
  ReadLn;
  World.Init(DETECT,DETECT,'C:\TP\BGI');
 Delay(100);
  x:=250;
  y:=getmaxy;
  pc.Init(x,y);
  pc.Show(col);
  REPEAT
    Delay(10);
    x:=x+1;
    y:=getmaxy-Round(50*Sin((x-50)*10*PI/360));
    pc.MoveTo(x,y,col);
  UNTIL x>=900;
  World.Fin;
End.
Эта работа вам не подошла?

Вы всегда можете заказать любую учебную работу у наших авторов от 20 руб.


СДЕЛАЙТЕ РЕПОСТ

14   голосов, оценка 3.857 из 5

Источник