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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2011, 07:15   #1
GreenDay
Пользователь
 
Аватар для GreenDay
 
Регистрация: 02.11.2010
Сообщений: 21
По умолчанию Рисунок в паскале.

Здраствуйте.
Условие задачи вот: нарисовать человечка, движением которого вправо и влево можно управлять с помощью клавиатуры.

Я нарисовал, вот что получилось:

Код:
uses crt,graph;
var c:char;
    grD,grM,i,x,h:integer;
begin
  grD:=detect;
  InitGraph(grD,grM,'');
  line(10,400,1200,400);
  x:=500;
  h:=15;
  Setcolor(11);
  circle(500,270,16);
  line(500,286,500,350);
  line(500,350,470,400);
  line(500,350,530,400);
  line(500,310,460,286);
  line(500,310,540,286);
  for i:=0 to 100 do
    begin
      Setcolor(0);
      circle(500,270,16);
      line(500,286,500,350);
      line(500,350,470,400);
      line(500,350,530,400);
      line(500,310,460,286);
      line(500,310,540,286);
      x:=x+h;
      Setcolor(11);
      circle(500,270,16);
      line(500,286,500,350);
      line(500,350,470,400);
      line(500,350,530,400);
      line(500,310,460,286);
      line(500,310,540,286);
      delay(100);
        if keypressed then
          begin
            c:=readkey;
              if c='a'then h:=-10;
                if c='d' then h:=10;
          end;
    end;
readln;
closegraph;
end.
Как заставить это двигаться?


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 08.03.2011 в 08:08.
GreenDay вне форума Ответить с цитированием
Старый 08.03.2011, 08:25   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Как заставить это двигаться?
да так же, как всегда заставлюят двигаться анимационных персонажей:
рисуете персонаж. Выжидаете паузу (примерно 1/20 секунды). Стираете. Изменяете координаты, (и, при желании, положение частей персонажа), выводите персонаж в новом месте.
повторяете данный процесс в цикле (либо бесконечном, либо по достижению какого-то условия). всё.

Вам нужно начать с того, что перерисовать человечка в относительных координатах.

например, так:
Код:
  grD:=detect;
  InitGraph(grD,grM,'..\bgi');
  line(10,400,1200,400);
  x:=500;
  h:=-5;
  Setcolor(11);
  circle(x,270,16);
  line(x,286,x,350);
  line(x,350,x-30,400);
  line(x,350,x+30,400);
  line(x,310,x-40,286);
  line(x,310,x+40,286);
  for i:=0 to 100 do
    begin
      delay(100);
      Setcolor(0);
      circle(x,270,16);
      line(x,286,x,350);
      line(x,350,x-30,400);
      line(x,350,x+30,400);
      line(x,310,x-40,286);
      line(x,310,x+40,286);
      x:=x+h;
      Setcolor(11);
      circle(x,270,16);
      line(x,286,x,350);
      line(x,350,x-30,400);
      line(x,350,x+30,400);
      line(x,310,x-40,286);
      line(x,310,x+40,286);
        if keypressed then
          begin
            c:=readkey;
              if c='a'then h:=-10;
                if c='d' then h:=10;
          end;
    end;
p.s. нужно ещё - добавить ограничение по ширине экрана - чтобы он либо не улетал за край, либо появлялся с другой стороны (зациклить)
и ещё, вместо цикла for здесь предпочтительней цикл по условию - нажали Esc - выход, если не нажали - продолжается анимация...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.03.2011, 10:34   #3
GreenDay
Пользователь
 
Аватар для GreenDay
 
Регистрация: 02.11.2010
Сообщений: 21
По умолчанию

Хм, получилось вот такая штука:
Код:
program chudo;
uses crt,graph;
var x,i,h,grM,grD:integer;
    c:char;
begin
  grD:=detect;
  InitGraph(grD,grM,'');
  x:=500;
  h:=10;
  Setcolor(3);
  circle(x,270,16);
  line(x,286,x,350);
  line(x,350,x-30,400);
  line(x,350,x+30,400);
  line(x,310,x-40,286);
  line(x,310,x+40,286);
  repeat
    if keypressed then
      begin
        c:=readkey;
          case c of
            'a':begin
                  setcolor(0);
                  circle(x,286,16);
                  line(x,286,x,350);
                  line(x,350,x-30,400);
                  line(x,350,x+30,400);
                  line(x,310,x-40,286);
                  line(x,310,x+40,286);
                  x:=x-h;
                  setcolor(3);
                  circle(x,286,16);
                  line(x,286,x,350);
                  line(x,350,x-30,400);
                  line(x,350,x+30,400);
                  line(x,310,x-40,286);
                  line(x,310,x+40,286);
                end;
             'd':begin
                   setcolor(0);
                   circle(x,286,16);
                   line(x,286,x,350);
                   line(x,350,x-30,400);
                   line(x,350,x+30,400);
                   line(x,310,x-40,286);
                   line(x,310,x+40,286);
                   setcolor(3);
                   x:=x+h;
                   circle(x,286,16);
                   line(x,286,x,350);
                   line(x,350,x-30,400);
                   line(x,350,x+30,400);
                   line(x,310,x-40,286);
                   line(x,310,x+40,286);
                 end;
              #27:exit;
          end;
      end;
  until c=#27;
end.
Спасибо.

Последний раз редактировалось GreenDay; 08.03.2011 в 11:19.
GreenDay вне форума Ответить с цитированием
Старый 08.03.2011, 11:21   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну и плохо получилось!
Зачем Вы код рисования человечка в обработку нажатия клавиш засунули?!


впрочем, Вас ваше решение устраивает?
значит, всё хорошо...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.03.2011, 11:25   #5
GreenDay
Пользователь
 
Аватар для GreenDay
 
Регистрация: 02.11.2010
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну и плохо получилось!
Зачем Вы код рисования человечка в обработку нажатия клавиш засунули?!


впрочем, Вас ваше решение устраивает?
значит, всё хорошо...
а что с ним остовалось еще делать?=)
GreenDay вне форума Ответить с цитированием
Старый 08.03.2011, 12:31   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, я же говорил, заменить цикл for ...
Код:
ch := #0;
repeat
  тут старый Ваш код
until ch=#27;
и всё..

впрочем. Хозяин — барин!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисунок в паскале... аня2312 Помощь студентам 0 04.05.2010 17:59
Рисунок в Паскале Колин Фриланс 7 02.02.2010 22:13
Рисунок в паскале Lexman777 Помощь студентам 13 02.02.2010 07:38
Графика в паскале. движущийся рисунок ohucheni Помощь студентам 0 13.11.2009 20:01
рисунок на паскале с помощью массива darika Паскаль, Turbo Pascal, PascalABC.NET 22 10.10.2009 19:47