Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2012, 17:36   #1
AntoshkaK
Пользователь
 
Регистрация: 08.11.2011
Сообщений: 29
Стрелка Анимация. Надо найти ошибку

У меня получилось, что восьмиугольник отскакивает 1 раз вместо 5. Где ошибка?

Код:
Uses GraphABC;
Const
   sz=20;
   k=5;
   d=5;
Procedure Octagon(x,y:Integer);
   begin
     Line(x+sz,y, x+sz*2,y);
      Line(x+sz*2,y, x+sz*3,y+sz);
       Line(x+sz*3,y+sz, x+sz*3,y+sz*3);
        Line(x+sz*3,y+sz*3, x+sz*2,y+sz*4);
         Line(x+sz*2,y+sz*4, x+sz,y+sz*4);
          Line(x+sz,y+sz*4, x,y+sz*3);
           Line(x,y+sz*3, x,y+sz);
            Line(x,y+sz, x+sz,y);
    end;

Var
   wh,kol,x,y,direct:Integer;
Begin
   wh:=WindowHeight;
   CenterWindow;
    x:=0;
     y:=0;
      Direct:=1;
       kol:=0;
     SetSmoothing(false);
    Repeat
       SetPenColor(clRed);
        Octagon(x,y);
       Sleep(10);
       SetPenColor(clWhite);
        Octagon(x,y);
   If (x>=wh-sz*3-d) and (y>=wh-sz*3-d) Then
    direct:=-1;
   If x<=sz Then
   begin
    direct:=1;
     kol:=kol+1;
   end;
   x:=x+direct*d;
   y:=y+direct*d;
    Until kol>k;
      SetPenColor(clRed);
       Octagon(x-sz-d,y-sz-d);
End.

Последний раз редактировалось AntoshkaK; 27.01.2012 в 19:01.
AntoshkaK вне форума Ответить с цитированием
Старый 28.01.2012, 16:27   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну вы же считаете не количество отражений, а количество шагов... поэтому и завершается быстро..

и ещё, кто вас учил так ужасно форматировать код?!

А попробуйте такое решение:
Код:
uses GraphABC;
const
  sz = 20;
  k = 5;
  d = 5;

procedure Octagon(x, y: Integer);
begin
  Line(x + sz, y, x + sz * 2, y);
  Line(x + sz * 2, y, x + sz * 3, y + sz);
  Line(x + sz * 3, y + sz, x + sz * 3, y + sz * 3);
  Line(x + sz * 3, y + sz * 3, x + sz * 2, y + sz * 4);
  Line(x + sz * 2, y + sz * 4, x + sz, y + sz * 4);
  Line(x + sz, y + sz * 4, x, y + sz * 3);
  Line(x, y + sz * 3, x, y + sz);
  Line(x, y + sz, x + sz, y);
end;

var
  wh, kol, x, y, direct: Integer;
begin
  wh := WindowHeight;
  CenterWindow;
  x := 0;
  y := 0;
  Direct := 1;
  kol := 0;
  SetSmoothing(false);
  repeat
    SetPenColor(clRed);
    Octagon(x, y);
    Sleep(10);
    SetPenColor(clWhite);
    Octagon(x, y);
    if (x >= wh - sz * 3 - d) and (y >= wh - sz * 3 - d) then
      direct := -1;
    if x <= sz then
    begin
      if direct < 0 then kol := kol + 1;
      direct := 1;
    end;
    x := x + direct * d;
    y := y + direct * d;
  until kol > k;
  SetPenColor(clRed);
  Octagon(x - sz - d, y - sz - d);
end.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Надо найти ошибку в подстановке. ЕвгениуS БД в Delphi 0 23.12.2011 12:11
Надо найти ошибку в коде С Mr.Merso Общие вопросы C/C++ 0 14.05.2011 18:13
Не могу найти ошибку, анимация в паскаль Karima Помощь студентам 0 25.11.2010 16:56
надо найти ошибку в паскале Len4i]{ Помощь студентам 3 03.06.2010 12:06
Ребят,надо найти ошибку vovey Помощь студентам 7 28.03.2010 12:40