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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2011, 18:38   #1
GreenDay
Пользователь
 
Аватар для GreenDay
 
Регистрация: 02.11.2010
Сообщений: 21
По умолчанию Графика в TurboPascal: Процедуры, рисующие на экране смешанный лес (лес состоит из елей) по курсору

Здраствуйте.
Суть задачи: Напишите программу, рисующую на экране смешанный лес (лес состоит из елей и берез). Пользователь управляет курсором и при
нажатии определенных клавиш на экране появляется ель или береза.

Решил разбить задачу на куски(рисование березы, рисование ели, управление курсором).
Получилось вот что:
Рисование березы:
Код:
program bereZA;
uses graph;
var grD,grM:integer;
begin
  grD:=detect;
  InitGraph(grD,grM,'');
  setcolor(3);
  line (320,240,320,100);
  line (320,100,300,130);
  line (320,100,340,130);
  line (320,130,300,160);
  line (320,130,340,160);
  line (320,160,300,190);
  line (320,160,340,190);
readln;
end.
Рисование ели:
Код:
program elka;
uses graph;
var grD,grM:integer;
begin
  grD:=detect;
  InitGraph(grD,grM,'');
  setcolor(3);
  line (320,240,320,100);
  line (320,100,300,130);
  line (320,100,340,130);
  line (300,130,340,130);
  line (320,130,300,160);
  line (320,130,340,160);
  line (300,160,340,160);
  line (320,160,300,190);
  line (320,160,340,190);
  line (300,190,340,190);
 readln;
end.
Управление курсором:
Код:
program o_chudo_ono_rabotaet;
uses wincrt,graph;
var grM,grD:integer;
    xmax,ymax:integer;
    c:char;
begin
  grD:=detect;
  InitGraph(grD,grM,'');
  xmax:=getmaxX div 2;
  ymax:=getmaxY div 2;
  setcolor(3);
  line (xmax,ymax,xmax+10,ymax);
  repeat
    if keypressed then
      begin
        c:=readkey;
          case c of
            #72:begin
                  setcolor(0);
                  line(xmax,ymax,xmax+10,ymax);
                  ymax:=ymax-10;
                  setcolor(3);
                  line(xmax,ymax,xmax+10,ymax);
                end;
            #80:begin
                  setcolor(0);
                  line(xmax,ymax,xmax+10,ymax);
                  ymax:=ymax+10;
                  setcolor(3);
                  line(xmax,ymax,xmax+10,ymax);
                end;
            #77:begin
                  setcolor(0);
                  line(xmax,ymax,xmax+10,ymax);
                  xmax:=xmax+10;
                  setcolor(3);
                  line(xmax,ymax,xmax+10,ymax);
                end;
            #75:begin
                  setcolor(0);
                  line(xmax,ymax,xmax+10,ymax);
                  xmax:=xmax-10;
                  setcolor(3);
                  line(xmax,ymax,xmax+10,ymax);
                end;
          end;
      end;
  until c=#27;
end.
деревья должны начинать рисоваться с той позиции, где стоит курсор...

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

сейчас недосуг правильно нарисовать, поэтому просто, как идея...

Код:
procedure Elka(x,y: integer);
begin
  setcolor(3);
  line (x,y+140,x,y);
  line (x,y,x-30,y+30);
  line (x,y,x+30,y+30);
  line (x-20,y+30,x+30,y+30);
  line (x,y+30,x,y+60);
  line (x,y+60,x+40,y+60);
  line (x-20,y+60,x+40,y+60);
  line (x,y+60,x,y+90);
  line (x,y+60,x+40,y+90);
  line (x-20,y+90,x+40,y+90);
end;
...
  repeat
    if keypressed then
      begin
          c:=readkey;
          case c of
.......
            #75:begin
                  setcolor(0);
                  line(xmax,ymax,xmax+10,ymax);
                  xmax:=xmax-10;
                  setcolor(3);
                  line(xmax,ymax,xmax+10,ymax);
                end;
            #13:begin
                  Elka(xmax,ymax)
                end;
рисование "палки-ёлки" по Enter
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.05.2011, 13:31   #3
GreenDay
Пользователь
 
Аватар для GreenDay
 
Регистрация: 02.11.2010
Сообщений: 21
По умолчанию

Спс большое, вот что получилось:

Код:
program o_chudo_ono_rabotaet;
uses wincrt,graph;
procedure Elka(x,y:integer);
begin
  setcolor(2);
  line(x,y,x,y-140);
  line(x,y-140,x-30,y-110);
  line(x,y-140,x+30,y-110);
  line(x-30,y-110,x+30,y-110);{«Ё*Ёп ®в ЎҐаe§л}
  line(x,y-60,x+40,y-30);
  line(x-40,y-30,x+40,y-30);{ҐйҐ 1}
  line(x,y-60,x-40,y-30);
end;
procedure bereza(x,y:integer);
begin
  setcolor(2);
  line(x,y,x,y-140);
  line(x,y-100,x+25,y-140);
  line(x,y-60,x-25,y-100);
  line(x,y-20,x+25,y-60);
end;
var grM,grD:integer;
    xmax,ymax:integer;
    c:char;
begin
  grD:=detect;
  InitGraph(grD,grM,'');
  xmax:=getmaxX div 2;
  ymax:=getmaxY div 2;
  setcolor(3);
  line (xmax,ymax,xmax+10,ymax);
  repeat
    if keypressed then
      begin
        c:=readkey;
          case c of
            #72:begin
                  setcolor(0);
                  line(xmax,ymax,xmax+10,ymax);
                  ymax:=ymax-10;
                  setcolor(3);
                  line(xmax,ymax,xmax+10,ymax);
                end;
            #80:begin
                  setcolor(0);
                  line(xmax,ymax,xmax+10,ymax);
                  ymax:=ymax+10;
                  setcolor(3);
                  line(xmax,ymax,xmax+10,ymax);
                end;
            #77:begin
                  setcolor(0);
                  line(xmax,ymax,xmax+10,ymax);
                  xmax:=xmax+10;
                  setcolor(3);
                  line(xmax,ymax,xmax+10,ymax);
                end;
            #75:begin
                  setcolor(0);
                  line(xmax,ymax,xmax+10,ymax);
                  xmax:=xmax-10;
                  setcolor(3);
                  line(xmax,ymax,xmax+10,ymax);
                end;
            'b':begin
                  Elka(xmax,ymax);
                end;
            'e':begin
                  bereza(xmax,ymax);

                end;
          end;
      end;
  until c=#27;
end.
GreenDay вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нарисовать и сдвинуть треугольники (Графика в TurboPascal) Ньютон Паскаль, Turbo Pascal, PascalABC.NET 1 28.04.2011 20:54
Лес в паскале GreenDay Помощь студентам 2 19.04.2011 09:20
Процедуры, строка, графика, работа с текстами nurkamol Помощь студентам 0 15.06.2010 20:37
Процедуры, строка, графика, работа с текстами nurkamol Паскаль, Turbo Pascal, PascalABC.NET 0 14.06.2010 20:02
В чем состоит ошибка? Lisёноk Помощь студентам 3 20.03.2010 18:06