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

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

Светик123 21.04.2014 22:34

к сожалению, у меня не было возможности ответить раньше(
мой паскаль ругается, выдает ошибку "file not found" в первой строке. ему не нравится модуль Graph(

Vladimir_S 22.04.2014 11:08

Так, ну этого я и опасался.
Ну что же, попробуем решить проблему.

Начнем с вопроса: есть ли в составе Вашего пакета TurboPascal файл по имени graph.tpu?
Всё остальное - только в случае положительного ответа на этот вопрос.
Итак, если таковой файл имеется, то:
1. Открываем Турбо Среду.
2. Там лезем в Options - Directories.
3. В открывшемся окошке находим строку Unit Directories. Убеждаемся, что там правильно прописан путь к папке, в которой сидит graph.tpu. Если строка пустая или путь не соответствует, то вписываем правильный путь (напр. у меня это C:\TP\UNITS), после чего жмём ОК, потом обязательно вновь щелкаем по Options, а затем по Save.
4. Запускаем программу "Гармошка".
Если она перестанет ругаться на отсутствие файла, но тем не менее не запустится, то начнем конфигурировать параметры процедуры запуска InitGraph.
Но это уже следующий этап.

Если же файла graph.tpu у Вас не обнаруживается, то это означает, что либо там встроена другая (не Borland) графика, либо графика отсутствует вовсе. Если так, то - увы!

P.S. Света, всё-таки было бы очень желательно, если бы Вы смогли появляться здесь почаще. А то при коротких визитах раз в неделю мы, боюсь, протелепаемся с этой задачкой до Нового года.

Светик123 22.04.2014 22:27

я сделала, как вы мне сказали. итог: на отсутствие файла перестал ругаться, но выдал следующее сообщение: BGI Error: Graphics not initialized (use InitGraph)

Daniellos 22.04.2014 22:40

Тогда в этой строке вашей программы
Код:

InitGraph(grDriver, grMode, '');
где стоят апострофы ' ', указать путь к вашему *.bgi файлу. Например:
Код:

InitGraph(grDriver, grMode, 'D:\TP\BIN\');
Ищите в папках egavga.bgi ;)

Светик123 23.04.2014 21:19

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

Vladimir_S 24.04.2014 09:38

Цитата:

Сообщение от Светик123 (Сообщение 1027135)
программа заработала, спасибо. только получается, что гармошка не "играет туда-обратно" а растягивается только в одном направлении. можно, пожалуйста, подредактировать так, чтобы гармошка "играла в обе стороны"?)

Хм... до крайности странно. У меня гармошка вот именно "играет в обе стороны", сперва растягивается, потом, дойдя до левого края экрана, сжимается, потом обратно идёт, и так до нажатия любой клавиши. Похоже, у Вас не срабатывает условие окончания цикла растяжки и перехода к сжатию. Ладно, подумаю.

Ага, кажется понял, "где собачка порылась". Вероятно, Ваш Паскаль несколько строже относится к совместимости типов данных, чем мой. А потому попробуйте заменить функцию LeftBorder на такой вариант:
Код:

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


poiu 24.04.2014 11:11

у меня tp7 тоже грамонь играет в одну сторону.
а со сменой функции вообще какие то артефакты, не правильно отрисовывает.

Vladimir_S 24.04.2014 11:22

Цитата:

Сообщение от poiu (Сообщение 1027204)
у меня tp7 тоже грамонь играет в одну сторону.
а со сменой функции вообще какие то артефакты, не правильно отрисовывает.

Совсем не понимаю. Сейчас запустил (с измененной функцией) в TP7 (обычно я работаю с FreePascal) - безупречно!
Правда, есть одно "но": оба пакета я гоняю исключительно в DOS-моде с эмуляцией VGA-экрана (640х480). А Вы, вероятно, запускаете в оконном? Может быть, дело в этом?
Ладно, поразмыслю над другим вариантом прерывания цикла растяжки и перехода к циклу сжатия.

Vladimir_S 24.04.2014 11:37

Протестируйте, пожалуйста, такой вариант:
Код:

Uses CRT, Graph;

Var
 X0,Y0,StepX,StepX_max:Word;
 grDriver, 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;

Begin
 grDriver:=Detect;
 InitGraph(grDriver, grMode, '________'); - тут самостоятельно!

 X0:=GetMaxX div 2;
 Y0:=GetMaxY div 2;
 StepX_max:=Trunc((X0-35)/16);
 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 StepX<=StepX_max then
    begin
    ClearDevice;
    Garm(StepX);
    Left(StepX);
    Right(StepX);
    OutTextXY(X0,Y0*2-20,'Press any key to stop...');
    Delay(100);
    end;
  until (StepX>=StepX_max) 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.


poiu 24.04.2014 12:41

подтверждаю. в DOS-mode работает туда и обратно. запускал через DOSBox 0.74.


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

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