Лыжник спускается с горы

Пример реализации лыжника, который спускается с горы

uses Crt, graph;
var i,driver,mode:integer;

{Создаем тип для удобства работы с координатами}
          Type
           TPoint=Record
            x:Integer;
            y:Integer;
           end;

{Создаем тип для работы с линиями}
          TLine=Record
           x1,y1,x2,y2:Integer;
          end;


           TLiznik1=Record    {Определяем Тип - Тело Лыжника }
             Golova:TPoint;   {Окружность - Голова лыжника}
             R:Integer;       {Радиус головы}
             Tulo:TLine;      {Линия, обозначающая тело лыжника}
             Ruka1,Ruka2:TLine; {Линии, обозначающие руки лыжника}
             Noga1,Noga2:TLine; {Линии, обозначающие ноги лыжника}
             Liza1,Liza2:TPoint; {Лыжи}
          end;


     Var  Sklon1:TLine; {Пряма обозначающая одну границу дороги}
          Sklon2:TLine; {Прямая, обозначающая вторую границу дороги}
          Golova:TPoint; {Голова Лыжника}

          Liznik:TLiznik1; {Весь лыжник}

          {Рисуем Лыжи}
          procedure GetLizi;
           Var
              l1:Integer;
              l2:Integer;
          Begin
              l1:=50; {Длина лыж}
              l2:=20;  {Наклон лыж}

              {Прорисовка лыж (x1,y1,x2,y2)}
              Line(Liznik.Noga1.x2-l1+5,Liznik.Noga1.y2-l2+3,Liznik.Noga1.x2+l1+15,Liznik.Noga1.y2+l2);
              Line(Liznik.Noga2.x2-l1+5,Liznik.Noga2.y2-l2+3,Liznik.Noga2.x2+l1+15,Liznik.Noga2.y2+l2);
          end;

          {Перерисовка изображения и сдвиг лыжника по координатам
          В процедуру добавляются параметры. Это позиция головы лыжника
          Сдвигая 2 точки головы лыжника, мы сдвинем всё его тело
          вместе с лыжами}
          procedure Liznik_edet(sdvigX,sdvigY:Integer);
          Begin
            Golova.X:=SdvigX;{Сдвиг по оси X}
            Golova.Y:=SdvigY;{Сдвиг по оси Y}
          end;

          {Первая прорисовка лыжника}
          procedure Liznik_One;
          Var ii:Integer; {Количество перерисовок}
          Begin
              {Рисуем голову лыжнику}
              Circle(Liznik.Golova.x,Liznik.Golova.y-Liznik.R,Liznik.R);
              {Рисуем туловище }
              With Liznik.Tulo do Begin
                x1:=Liznik.Golova.X;
                y1:=Liznik.Golova.y;
                x2:=Liznik.Golova.x-30;
                y2:=Liznik.Golova.y+30;
                Line(x1-10,y1,x2,y2);
              end;
              {Рисуем первую руку}
              With Liznik.Ruka1 do Begin
                x1:=Liznik.Tulo.x1-10;
                y1:=Liznik.Tulo.y1;
                x2:=Liznik.Tulo.X1-45;
                y2:=Liznik.Tulo.Y1;
                Line(x1,y1,x2,y2);
              end;
              {Рисуем вторую руку}
              With Liznik.Ruka2 do Begin
                x1:=Liznik.Ruka1.x1;
                y1:=Liznik.Ruka1.y1;
                x2:=Liznik.Ruka1.x2+5;
                y2:=Liznik.Ruka1.y2-30;
                Line(x1,y1,x2,y2);
              end;
              {Рисуем первую ногу}
              With Liznik.Noga1 do Begin
                  x1:=Liznik.Tulo.x2;
                  y1:=Liznik.Tulo.y2;
                  x2:=x1-30;
                  y2:=y1+20;
                  Line(x1,y1,x2,y2);
              end;
              {Рисуем вторую ногу}
              With Liznik.Noga2 do Begin
                  x1:=Liznik.Noga1.x1;
                  y1:=Liznik.Noga1.y1;
                  x2:=x1+5;
                  y2:=Liznik.Noga1.y2+20;
                  Line(x1,y1,x2,y2);
              end;
              {Рисуем лыжи. Будем рисовать лыжи из окончания каждой ноги}
              GetLizi;
          end;

          {Рисуем 2 склона, символизирующие дорогу }
 procedure Gora;
  const
      Nakl1=50;
      Nakl2=100;
 Begin
      Sklon1.x1:=20;   Sklon2.x1:=Sklon1.x1+Nakl1;
      Sklon1.y1:=300;  Sklon2.y1:=Sklon1.y1-Nakl2;
      Sklon1.x2:=700;  Sklon2.x2:=Sklon1.x2+Nakl1;
      Sklon1.y2:=500;  Sklon2.y2:=Sklon1.y2-Nakl2;

      Line(Sklon1.x1,Sklon1.y1,Sklon1.x2,Sklon1.y2);
      Line(Sklon2.x1,Sklon2.y1,Sklon2.x2,Sklon2.y2);
 end;

 var ii:Integer;  {Число перерисовок}

begin
  driver:=detect;
    initgraph(driver,mode,'');
     if graphresult<>0 then
       begin
        writeln('ne wislo');
        halt
     end;

      gora; {Ставим лыжника на гору}
       i:=0;

       {Здесь определяем первоначальную позицию лыжника и размер его головы}
       Liznik.Golova.x:=Sklon2.x1+Liznik.Golova.x*5;
              Liznik.Golova.y:=Sklon2.y1;
              Liznik.R:=15;

      {50 повторений с шагом 1}
     for ii:=0 to 50 do Begin
       Liznik_One; {Рисуем лыжника}
       Liznik.Golova.y:=Liznik.Golova.y+3; {Смещаем лыжника по Оси  X}
       Liznik.Golova.x:=Liznik.Golova.x+10;{Смещаем лыжника по Оси Y}
       delay(50); {Скорость перемещения}
       ClearDevice; {Очищаем прошлый рисунок}
       Gora;   {Перерисовываем гору}
     end;
readln;
end.

Комментариев нет:

Отправить комментарий

Если у вас интересные исходники и вы не прочь поделиться, то присылайте daslex@yandex.ru с указанием Темы: Графика Паскаль
К вашей работе будет прикреплено ваше авторство и по желанию добавлена ссылка на ваш сайт.
На одну страницу - Одна работа. На одну работу - Одна ссылка + указание автора


Основное требование - это один файл .pas без сторонних модулей (только с родными. предпочтение Graph).
Можно использовать ассемблерные вставки.

Все что Запускается у меня и работает, я выкладываю. в этом блоге.
Яндекс.Метрика