+ Ответить в теме
Показано с 1 по 1 из 1

Тема: Танк и Человек. Поворот дула

  1. #1
    SNACHMB is on a distinguished road
    Регистрация
    02.06.2015
    Возраст
    28
    Сообщений
    1
    Вес репутации
    0

    По умолчанию Танк и Человек. Поворот дула

    PascalABC.Net Суть задачи: из дула танка вылетает снаряд, который либо попадает в человека, либо пролетает мимо. Реализацию данного процесса я пока не осуществила, поскольку проблема заключается в следующем. Человека можно перемещать с помощью клавиш влево, вправо, а дуло танка - с помощью кнопок вверх вниз. При нажатии на клавишу вверх дуло танка должно поворачиваться на тридцать градусов против часовой стрелки, при нажатии на клавишу вниз дуло должно поворачиваться на тридцать градусов по часовой стрелке. Помогите пожалуйста осуществить поворот прямоугольника (точнее дула), я пробовала несколько раз, но у меня не получилось. Буду очень признательна, помощь действительно необходима. Вот код:
    Program Kursovaya_rabota;
    Uses GraphABC;
    Type Dulo=record//запись дула танка
    lefthighx:integer;
    rightlowy:integer
    end;
    Chelovek=record//запись человека
    coordx:integer;
    coordy:integer
    end;
    Var a,b,a1,b1:integer;
    The_Duloulo;
    The_Victim:Chelovek;
    Procedure Gusenicy;//рисуем гусеницы
    Begin
    setpenwidth(2);
    setpencolor(cllime);
    setbrushcolor(clpurple);
    circle(120,160,10);
    circle(130,160,10);
    circle(140,160,10);
    circle(150,160,10);
    circle(160,160,10);
    circle(170,160,10);
    circle(180,160,10);
    circle(190,160,10)
    End;
    Procedure Bashnya;//рисуем башню
    Begin
    setpenwidth(2);
    setpencolor(cllime);
    setbrushcolor(clteal);
    drawpie(155,155,40,0,180);
    fillpie(155,155,40,0,180)
    End;
    Procedure DrawDulo(var x:integer;var y:integer);//рисуем дуло
    Begin
    setpenwidth(2);
    setpencolor(cllime);
    setbrushcolor(clteal);
    Rectangle(x+145,y+80,x+165,y+130)
    End;
    Procedure DrawVictim (var x1:integer;var y1:integer);//рисуем человека
    Begin
    setpencolor(clpink);
    setbrushcolor(clpink);
    circle(x1+350,y1+90,15);
    setpencolor(clblack);
    setbrushcolor(clwhite);
    circle(x1+340,y1+85,3);
    circle(x1+360,y1+85,3);
    setpixel(x1+340,y1+85,clblack);
    setpixel(x1+360,y1+85,clblack);
    Line(x1+345,y1+100,x1+355,y1+100);
    setpenwidth(2);
    setpixel(x1+350,y1+90,clblack);
    Line(x1+350,y1+105,x1+350,y1+150);
    Line(x1+350,y1+120,x1+340,y1+130);
    Line(x1+350,y1+120,x1+360,y1+130);
    Line(x1+350,y1+150,x1+340,y1+160);
    Line(x1+350,y1+150,x1+360,y1+160);
    End;
    Procedure KeyDown(key:integer);//отжатие клавиш управления дулом и человека
    Var x0,y0,r1:integer;
    Begin
    x0:=The_Dulo.lefthighx+155;
    y0:=The_Dulo.rightlowy+105;
    Lockdrawing;
    Clearwindow;
    case key of
    VK_Up:begin//нажатие на клавишу вверх
    r1:=round(sqrt(sqr(The_Dulo.lefthighx-x0)+sqr(The_Dulo.rightlowy-y0)));
    The_Dulo.lefthighx:={The_Dulo.lefthighx-10}round(x0+r1*cos(pi/6));
    DrawDulo(The_Dulo.lefthighx,The_Dulo.rightlowy);
    Gusenicy;
    Bashnya;
    DrawVictim(The_Victim.coordx,The_Victim.coordy)
    end;
    VK_Down:begin//нажатие на клавишу вниз
    The_Dulo.lefthighx:=The_Dulo.lefthighx+10;
    The_Dulo.rightlowy:=The_Dulo.rightlowy+5;
    DrawDulo(The_Dulo.lefthighx,The_Dulo.rightlowy);
    Gusenicy;
    Bashnya;
    DrawVictim(The_Victim.coordx,The_Victim.coordy)
    end;
    VK_Left:begin//нажатие на клавишу влево
    The_Victim.coordx:=The_Victim.coordx-10;
    DrawDulo(The_Dulo.lefthighx,The_Dulo.rightlowy);
    Gusenicy;
    Bashnya;
    DrawVictim(The_Victim.coordx,The_Victim.coordy);
    end;
    VK_Right:begin//нажатие на клавишу вправо
    The_Victim.coordx:=The_Victim.coordx+10;
    DrawDulo(The_Dulo.lefthighx,The_Dulo.rightlowy);
    Gusenicy;
    Bashnya;
    DrawVictim(The_Victim.coordx,The_Victim.coordy);
    end;
    end;
    redraw;
    sleep(80)
    End;
    Begin
    The_Victim.coordx:=a1;
    The_Victim.coordy:=b1;
    The_Dulo.lefthighx:=a;
    The_Dulo.rightlowy:=b;
    Gusenicy;
    DrawDulo(The_Dulo.lefthighx,The_Dulo.rightlowy);
    Bashnya;
    DrawVictim(The_Victim.coordx,The_Victim.coordy);
    OnKeyDown:=KeyDown;
    End.
    Последний раз редактировалось SNACHMB; 02.06.2015 в 22:15.

  2. По умолчанию

     
    Хотите избавиться от рекламы? Зарегистрируйтесь
+ Ответить в теме

Похожие темы

  1. Поворот изображения (GDI+)
    Добрый день, господа! Я использую метод RotateTransform, но проблема в том, что он, хоть и поворачивает изображение, но сдвигает его относительно...
    от barmaley200 в разделе C и C++
  2. C++, поворот массива
    Нужно создать двумерный массив, заполнить его рандомно нулями и единицами и перевернуть его на 90 градусов по часовой стрелке...С созданием и...
    от FrenZy в разделе задачи на C и C++
  3. Поворот image
    Здравсти помогите пожалуйста с вопросом.Есть компонент image1,как сделать так чтобы он поворачивался по часовой и против часовой стрелки.Причем...
    от Марсель в разделе Delphi и Pascal
  4. Поворот
    Можно ли повернуть объект (например кнопку), на известное число градусов, вокруг своей оси, либо какой-нибудь точки?
    от Anonymous в разделе Операционные системы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения