Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Турбо Паскаль. Задание на анимацию (http://www.tehnari.ru/f43/t95841/)

Светик123 16.04.2014 22:36

Турбо Паскаль. Задание на анимацию
 
Помогите написать программу, выводящую на экран анимацию "гармошка"

poiu 16.04.2014 22:52

я даже в голове это смутно представляю =)

Светик123 17.04.2014 01:22

я вообще в замешательстве(

Vladimir_S 17.04.2014 09:38

Цитата:

Сообщение от Светик123 (Сообщение 1025583)
Помогите написать программу, выводящую на экран анимацию "гармошка"

Ну Вы хоть словами опишите - что за "гармошка" за такая? :)

Светик123 17.04.2014 21:31

ну как бы объяснить... нужна анимация движения обычной гармошки))
как то так: tehnobaian только строго по горизонтали, без колебаний вверх-вниз)

Vladimir_S 18.04.2014 09:48

Цитата:

Сообщение от Светик123 (Сообщение 1025808)
ну как бы объяснить... нужна анимация движения обычной гармошки))
как то так: tehnobaian только строго по горизонтали, без колебаний вверх-вниз)

Хорошо, попробую на выходных сотворить. Только сразу предупреждаю:
1. Графика - Borland.
2. Инициализацию графического режима (задание параметров функции InitGraph) делаете самостоятельно: у меня она настроена под мою систему и графика инициализируется через использование написанного мною спец. модуля, который у Вас работать не будет.
Если что-то из этого не устроит, напишите.

Светик123 18.04.2014 23:38

я не очень поняла про задание параметров функции,так как раньше не имела дела с графическим модулем. следовательно,не очень представляю как это сделать. но если не очень сложно - постараюсь понять

Daniellos 19.04.2014 08:28

Стандартная процедура инициализации графики описана в справке среды разработки.
На всякий случай привожу здесь (вдруг вам лень искать)

Код:

Uses Graph;

Var  grDriver : Integer;
      grMode : Integer;
      ErrCode : Integer;

Begin
 grDriver:=Detect;
 InitGraph(grDriver, grMode, '');
 ErrCode:=GraphResult;
 If ErrCode = grOk Then
  Begin
  { Графика }
  Line(0, 0, GetMaxX, GetMaxY);
  ReadLn;
  CloseGraph;
  End
 Else WriteLn('Ошибка инициализации графики:', GraphErrorMsg(ErrCode));
End.

Эта программа рисует диагональную линию из левого верхнего угла экрана, до правого нижнего.

Vladimir_S 19.04.2014 09:17

Цитата:

Сообщение от Daniellos (Сообщение 1026107)
Стандартная процедура инициализации графики описана в справке среды разработки. На всякий случай привожу здесь (вдруг вам лень искать)

Да, очень хороший тест. Света, попробуйте запустить эту программку, и если всё будет нормально, то так и сделаем инициализацию.

Vladimir_S 20.04.2014 10:38

Вложений: 3
Цитата:

Сообщение от Vladimir_S (Сообщение 1026113)
Света, попробуйте запустить эту программку, и если всё будет нормально, то так и сделаем инициализацию.

...и молчанье гробовое было ему ответом...
Ладно, в любом случае раз обещал - сделал. Будем исходить из того, что выложенная Давидом тестовая программка работает, и сделаем инициализацию, как там:
Код:

Uses CRT, Graph;

Var
 X0,Y0,StepX:Word;
 grDriver : Integer;
 grMode : Integer;

Procedure Garm(Step:Word);
var i:byte;
begin
 SetLineStyle(SolidLn,0,ThickWidth);
 Line(X0,Y0-40,X0,Y0+40);
 for i:=1 to 8 do
  begin
  Line(X0-Step*2*i,Y0-40,X0-Step*2*i,Y0+40);
  Line(X0+Step*2*i,Y0-40,X0+Step*2*i,Y0+40);
  end;
 SetLineStyle(SolidLn,0,NormWidth);
 for i:=1 to 8 do
  begin
  Line(X0-Step*(2*i-1),Y0-30,X0-Step*(2*i-1),Y0+30);
  Line(X0+Step*(2*i-1),Y0-30,X0+Step*(2*i-1),Y0+30);
  end;
 MoveTo(X0,Y0-40);
 for i:=1 to 8 do
  begin
  LineTo(X0-step*(2*i-1),Y0-30);
  LineTo(X0-step*2*i,Y0-40);
  end;
 MoveTo(X0,Y0+40);
 for i:=1 to 8 do
  begin
  LineTo(X0-step*(2*i-1),Y0+30);
  LineTo(X0-step*2*i,Y0+40);
  end;
 MoveTo(X0,Y0-40);
 for i:=1 to 8 do
  begin
  LineTo(X0+step*(2*i-1),Y0-30);
  LineTo(X0+step*2*i,Y0-40);
  end;
 MoveTo(X0,Y0+40);
 for i:=1 to 8 do
  begin
  LineTo(X0+step*(2*i-1),Y0+30);
  LineTo(X0+step*2*i,Y0+40);
  end;
end;

Procedure Left(Step:Word);
begin
 SetLineStyle(SolidLn,0,ThickWidth);
 Rectangle(X0-16*Step,Y0-40,X0-16*Step-35,Y0+40);
 Line(X0-16*Step-20,Y0-40,X0-16*Step-20,Y0+40);
end;

Procedure Right(Step:Word);
begin
 SetLineStyle(SolidLn,0,ThickWidth);
 Rectangle(X0+16*Step,Y0-40,X0+16*Step+20,Y0+40);
end;

Function LeftBorder(Step:Word):Boolean;
begin
 LeftBorder:=X0-16*Step-35>0;
end;

Begin
 grDriver:=Detect;
 InitGraph(grDriver, grMode, '');

 X0:=GetMaxX div 2;
 Y0:=GetMaxY div 2;
 StepX:=4;
 ClearDevice;
 Garm(StepX);
 Left(StepX);
 Right(StepX);
 SetTextJustify(CenterText,BottomText);
 OutTextXY(X0,Y0*2-20,'Press any key to start...');
 ReadKey;
 Repeat
  StepX:=4;
  repeat
  StepX:=StepX+1;
  If LeftBorder(StepX) then
    begin
    ClearDevice;
    Garm(StepX);
    Left(StepX);
    Right(StepX);
    OutTextXY(X0,Y0*2-20,'Press any key to stop...');
    Delay(100);
    end;
  until Not(LeftBorder(StepX)) or KeyPressed;
  repeat
  StepX:=StepX-1;
  If StepX>3 then
    begin
    ClearDevice;
    Garm(StepX);
    Left(StepX);
    Right(StepX);
    OutTextXY(X0,Y0*2-20,'Press any key to stop...');
    Delay(100);
    end;
  until (StepX=3) or KeyPressed;
 Until KeyPressed;
 ReadKey;
 CloseGraph;
End.

Рисунок, конечно, примитивный, но если нужны всякие рюшечки-кнопочки-клавиши, напишите - сделаем.


Часовой пояс GMT +4, время: 05:00.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.