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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2011, 18:48   #1
Leshii
Форумчанин
 
Регистрация: 26.07.2011
Сообщений: 376
По умолчанию Графика.

Доброго времени суток.Нужна помощь.

Суть задания нарисовать флаг (.После сей задачи по нажатию клавишы "Y"поднять флаг,и потом по нажатию клавишы "N" опустить(этот момент опускаю).).

Код:
Program INDZ;
Uses crt,graph;
var driver,mode:integer;
   x,y,x1,y1:integer;
begin
clrscr;
Initgraph(driver,mode,'');
setcolor(15);
Rectangle(230,300,410,180);

setcolor(4);
setfillstyle(1,4);
Rectangle(370,300,410,180);
floodfill(390,240,4);

setcolor(4);
setfillstyle(1,4);
Rectangle(230,300,270,180);
floodfill(250,240,4);

setcolor(15);
setfillstyle(1,15);
Rectangle(270,300,370,180);
floodfill(320,240,15);

Readln;
end.

Как переместить обьекты вверх ну и потом соотвественно вниз(тоесть поднять или же опустить).Своего рода как анимация но я так понял с задержкой.
Насколько я понял есть такая штука moveto(...); и к нему же цикл добавить? или как?Если возможно то пояснить.
Люблю на ты.Я человек простой

Последний раз редактировалось Leshii; 22.10.2011 в 21:45.
Leshii вне форума Ответить с цитированием
Старый 22.10.2011, 22:04   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Легко. Оборачиваешь свою отрисовку в функу:
Код:
procedure draw(x,y:integer;Clear:boolean);
begin
 if Clear then setcolor(0) else setcolor(15);
  Rectangle(x+230,y+300,x-410,y-180);

 if Clear then setcolor(0) else setcolor(4);
  setfillstyle(1,4);
  Rectangle(x+370,y+300,x-410,y-180);
... И так остальные функи отрисовки
end;
Сам цикл можно описать так:
Код:
for i:=100 downto 10 do begin
  // рисуем флаг 
 draw(100,i,false);
 // Ждем
 delay(10);
 // Стираем нарисованное
 draw(100,i,true);
end;
Идея понятна?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.10.2011, 22:30   #3
Leshii
Форумчанин
 
Регистрация: 26.07.2011
Сообщений: 376
По умолчанию

Благодарю, идею уловил.Пошол осваивать.

Пост удалил.Если возможно потрите его пожалуйста

Прошу прощение за дабл постинг.Переделал всё работает.Ещё раз спасибо за совет.Но вопрос вот теперь какой.Как избавится от ряби при передвижении объекта?(программа рабочая, две процедуры одинаковые за исключением циклов).

Код:
Program INDZ;
Uses crt,graph;
var   gd,gm:integer;
      x,y:integer;
	    i:integer;
	    size:integer; p:pointer;
      X0,Y0:integer;
      q:char;
Procedure Podnyat_Flag;
begin
initgraph(gd,gm,'');

size:=imagesize(370,300,410,180);
getmem(p,size);
setcolor(4);
setfillstyle(1,4);
Rectangle(370,300,410,180);

size:=imagesize(230,300,270,180);
getmem(p,size);
setcolor(4);
setfillstyle(1,4);
Rectangle(230,300,270,180);


size:=imagesize(270,300,370,180);
getmem(p,size);
setcolor(15);
setfillstyle(1,15);
Rectangle(270,300,370,180);

setfillstyle(1,4);
Initgraph(gd,gm,'');
for y:= 280 downto 100 do
begin
delay(1000);
cleardevice;
putimage(355,y,p^,1);
putimage(215,y,p^,1);
putimage(255,y,p^,1);
delay(1000);
cleardevice;
setcolor(4);
setfillstyle(1,4);
Rectangle(346,y,380,y+180);
floodfill(376,279,4);
setcolor(4);
setfillstyle(1,4);
Rectangle(210,y,244,y+180);
floodfill(240,279,4);
setcolor(15);
setfillstyle(1,15);
Rectangle(245,y,345,y+180);
floodfill(285,279,15);
end;
end;
Procedure Opystit_flag;
begin
initgraph(gd,gm,'');

size:=imagesize(370,300,410,180);
getmem(p,size);
setcolor(4);
setfillstyle(1,4);
Rectangle(370,300,410,180);

size:=imagesize(230,300,270,180);
getmem(p,size);
setcolor(4);
setfillstyle(1,4);
Rectangle(230,300,270,180);


size:=imagesize(270,300,370,180);
getmem(p,size);
setcolor(15);
setfillstyle(1,15);
Rectangle(270,300,370,180);

setfillstyle(1,4);
Initgraph(gd,gm,'');
for y:= 100 to 240 do
begin
delay(1000);
cleardevice;
putimage(355,y,p^,1);
putimage(215,y,p^,1);
putimage(255,y,p^,1);
delay(1000);
cleardevice;
setcolor(4);
setfillstyle(1,4);
Rectangle(346,y,380,y+180);
floodfill(376,279,4);
setcolor(4);
setfillstyle(1,4);
Rectangle(210,y,244,y+180);
floodfill(240,279,4);
setcolor(15);
setfillstyle(1,15);
Rectangle(245,y,345,y+180);
floodfill(285,279,15);
end;
end;
begin
clrscr;
write('Podnyat_Flag Y/N: ');
readln(q);
initgraph(gd,gm,'');
case q of
 'Y':Podnyat_Flag;
 'N':Opystit_flag;
end;
readln;
closegraph;
end.
Люблю на ты.Я человек простой

Последний раз редактировалось Leshii; 23.10.2011 в 20:46.
Leshii вне форума Ответить с цитированием
Старый 23.10.2011, 18:32   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
getimage(355,150,385,180,p^);
getimage(215,150,245,180,p^);
getimage(255,150,345,180,p^);
Не понял... Одна и та же переменная? По идее эти три функции будут три раза в разных координатах выводить одно и то же.
Цитата:
Как избавится от ряби
Ты используешь в цикле cleardevice;
А теперь внимательно посмотри что использую я
Подсказка - зарисовку отрисованного цветом фона.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.10.2011, 20:45   #5
Leshii
Форумчанин
 
Регистрация: 26.07.2011
Сообщений: 376
По умолчанию

Код:
getimage(355,150,385,180,p^);
getimage(215,150,245,180,p^);
getimage(255,150,345,180,p^);
Да так и есть,я их просто как для проверки брал чтоб после движения три блока подогнать друг под друга.Первоначально они разъехались.

А вот касательно ряби просто почитал до того литературку ну и решил попробовать(Cleardevice)должного эфекта не получил.Вот и имею ляпы.
У меня просто две программы сего чуда.В одной строю во вторую закидываю.Уже когда дорисую клиновой листочек сюда тогда допишу всю программу.Но тот кустик он поистине ужасен.
Люблю на ты.Я человек простой
Leshii вне форума Ответить с цитированием
Старый 02.11.2011, 01:03   #6
Leshii
Форумчанин
 
Регистрация: 26.07.2011
Сообщений: 376
По умолчанию

Доброго времени суток.Нужна помощь.
Собственно прошу не пугаться.обильное количество точек что после масива есть многоугольник, а именно клиновый листочек канадского флага.Теперь пару вопросов:
1)Пытался построить линиями(листочек), плюнул на это дело и понял что будет не лучше.Потом полистал литературу увидел эдакую штуку как DrowPoly(полбеды).Без анимации построил (в результате кривось накось получил листок марихуаны , но суть не в этом).Хотел спросить как бы его так впихнуть в эту анимацию ту что ниже(говорю сразу пробовал, линии по которым строил фигуру разъехались).Посему вопрос как это сделать?Или намекнуть как, я со своей стороны до сути докопаюсь.
2) Пробовал я делать вместо Cleardevice процедурой(которая подчищает задний план изображения дабы немигала анимация, в результате получал или черный экран или просто ничего(возможно делал вообще неправильно).Чтобы вы могли посоветовать по даной программе? Принимаю даже самую ужасную критику и т.д.(вплоть до "лучше бы вам переделать программу") Я только за услышать мнение о том что написал.

Код:
Program INDZ;
Uses crt,graph;
type
 Pointype=Record
   x,y:integer;
 end;
 const  Points: array [1..24] of Pointype=((x:309;y:222),
(x:300;y:200),
(x:310;y:204),
(x:318;y:185),
(x:325;y:204),
(x:340;y:200),
(x:328;y:222),
(x:345;y:210),
(x:340;y:225),
(x:360;y:215),
(x:343;y:235),
(x:355;y:235),
(x:335;y:255),
(x:343;y:264),
(x:323;y:259),
(x:315;y:259),
(x:295;y:263),
(x:305;y:255),
(x:290;y:235),
(x:300;y:235),
(x:280;y:215),
(x:300;y:225),
(x:296;y:210),
(x:309;y:222));
var

      gd,gm:integer;
      y:integer;
	    size:integer; p:pointer;
      q:char;

Procedure Podnyat_Flag;
begin
initgraph(gd,gm,'');

size:=imagesize(370,300,410,180);
getmem(p,size);
setcolor(4);
setfillstyle(1,4);
Rectangle(370,300,410,180);

size:=imagesize(230,300,270,180);
getmem(p,size);
setcolor(4);
setfillstyle(1,4);
Rectangle(230,300,270,180);


size:=imagesize(270,300,370,180);
getmem(p,size);
setcolor(15);
setfillstyle(1,15);
Rectangle(270,300,370,180);


Initgraph(gd,gm,'');
setfillstyle(1,Black);
for y:=240 downto 100 do
begin 

delay(1000);
cleardevice;

setcolor(4);
setfillstyle(1,4);
Rectangle(340,y,410,y+180);
floodfill(376,279,4);

setcolor(4);
setfillstyle(1,4);
Rectangle(145,y,215,y+180);
floodfill(200,279,4);

setcolor(15);
setfillstyle(1,15);
Rectangle(215,y,340,y+180);
floodfill(285,279,15);

end;
end;
Procedure Opystit_flag;
begin
initgraph(gd,gm,'');

size:=imagesize(370,300,410,180);
getmem(p,size);
setcolor(4);
setfillstyle(1,4);
Rectangle(370,300,410,180);

size:=imagesize(230,300,270,180);
getmem(p,size);
setcolor(4);
setfillstyle(1,4);
Rectangle(230,300,270,180);


size:=imagesize(270,300,370,180);
getmem(p,size);
setcolor(15);
setfillstyle(1,15);
Rectangle(270,300,370,180);

Initgraph(gd,gm,'');
setfillstyle(1,Black);
for y:= 100 to 240 do
begin

cleardevice;
setcolor(4);
setfillstyle(1,4);
Rectangle(340,y,410,y+180);
floodfill(376,279,4);

setcolor(4);
setfillstyle(1,4);
Rectangle(145,y,215,y+180);
floodfill(200,279,4);

setcolor(15);
setfillstyle(1,15);
Rectangle(215,y,340,y+180);
floodfill(285,279,15);

end;
end;
begin
initgraph(gd,gm,'');
write('Podnyat_Flag Y/N: ');
readln(q);
setfillstyle(1,Black);
case q of
 'Y':Podnyat_Flag;
 'N':Opystit_flag;
end;
readln;
closegraph;
end.
Да и хотелось бы её домучать таки, дабы тут, если народ таки будет юзать поиск по паскалю был пример как можно сделать(чесно скажу, искал но того что надо не нашол).
Люблю на ты.Я человек простой
Leshii вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графика kresik Паскаль, Turbo Pascal, PascalABC.NET 0 28.05.2011 11:14
3d графика 555shiro WPF, UWP, WinRT, XAML 1 17.03.2011 22:44
Графика dancer_el Паскаль, Turbo Pascal, PascalABC.NET 0 17.04.2010 14:07
Графика в С# onded Общие вопросы .NET 2 10.12.2009 13:56
графика jenja Общие вопросы Delphi 0 07.05.2009 13:56