![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Zac |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: ![]() ![]() ![]() |
Привет. Задали вот сделать програмку . показывающую фазы луны. анимация с использованием динамической памяти. я написал, но почемуто дергается картинка (кадры), хотя координаты там тока числа и везде одинаковые, никаких вычислений.
Как сделано - процедура рисует общуюю картину ![]()
Program Moon;
Uses CRT, Graph;
var
size1:integer;
star, gd,gm:integer;
Img1:pointer;
Procedure Img;
var i: integer;
begin
SetBKcolor(0);
For i:=1 to 50 do
begin
star:=random(14)+1;
PutPixel(Random(350),Random(150),star);
end;
SetColor(2);
setFillStyle(1,2); {Земля}
Bar(0,150,350,210);
SetColor(6);
setFillStyle(1,6);{Ствол дерева}
Bar(40,120,47,170);
SetColor(10); {Листва}
Circle(20,120,20);
SetFillStyle(1,10);
FloodFill(20,120,10);
Circle(67,120,20);
SetFillStyle(1,10);
FloodFill(67,120,10);
Circle(43,100,30);
SetFillStyle(1,10);
FloodFill(43,100,10);
SetColor(1); { ОЗЕРО }
Ellipse(200,175,0,360,100,20);
SetFillStyle(9,1);
FloodFill(200,175,1);
end;
Procedure Moon;
begin
SEtcolor(15);
Circle(300,60,40);
SetFillStyle(1,14);
FloodFill(300,60,15);
Circle(280,50,10);
Circle(330,60,7);
Circle(300,79,8);
end;
begin
Gd:=Detect;
InitGraph(Gd, Gm, '');
If GraphResult <> grOk Then Halt(1);
While not Keypressed do
begin
{1 КАДР}
SetActivePage(0);
SetVisualPage(1);
cleardevice;
Img;
Size1:=ImageSize(0,0,350,210);
GetMem(Img1, size1);
GetImage(0,0,350,210,Img1^);
cleardevice;
PutImage(0,0,Img1^,XorPut);
SetActivePage(1);
SetVisualPage(0);
{2 кадр}
Freemem(Img1,size1);
img1:=nil;
Delay(50000);
Delay(50000);
cleardevice;
Img; moon;
setColor(0);
Circle(320,60,40);
SetFillStyle(1,0);
FloodFill(320,60,0);
Size1:=ImageSize(0,0,350,210);
GetMem(Img1, size1);
GetImage(0,0,350,210,Img1^);
cleardevice;
PutImage(0,0,Img1^,XorPut);
SetActivePage(0);
SetVisualPage(1);
Freemem(Img1,size1);
img1:=nil;
Delay(50000);
Delay(50000);
Cleardevice;
{3 кадр}
img; moon;
SetFillStyle(1,0);
SetColor(0);
Bar(300,20,340,100);
Size1:=ImageSize(0,0,350,210);
GetMem(Img1, size1);
GetImage(0,0,350,210,Img1^);
ClearDevice;
PutImage(0,0,Img1^,XorPut);
SetActivePage(1);
SetVisualPage(0);
Freemem(Img1,size1);
img1:=nil;
Delay(50000);
Delay(50000);
ClearDevice;
{4 кадр}
img; moon;
setColor(0);
Circle(360,60,40);
SetFillStyle(1,0);
FloodFill(340,60,0);
Size1:=ImageSize(0,0,350,210);
GetMem(Img1, size1);
GetImage(0,0,350,210,Img1^);
ClearDevice;
PutImage(0,0,Img1^,XorPut);
SetActivePage(0);
SetVisualPage(1);
Freemem(Img1,size1);
img1:=nil;
Delay(50000);
Delay(50000);
ClearDevice;
{5 кадр}
img; moon;
Size1:=ImageSize(0,0,350,210);
GetMem(Img1, size1);
GetImage(0,0,350,210,Img1^);
ClearDevice;
PutImage(0,0,Img1^,XorPut);
SetActivePage(1);
SetVisualPage(0);
Freemem(Img1,size1);
img1:=nil;
Delay(50000);
Delay(50000);
ClearDevice;
{6 кадр}
img; moon;
setColor(0);
Circle(240,60,40);
SetFillStyle(1,0);
FloodFill(260,60,0);
Size1:=ImageSize(0,0,350,210);
GetMem(Img1, size1);
GetImage(0,0,350,210,Img1^);
ClearDevice;
PutImage(0,0,Img1^,XorPut);
SetActivePage(0);
SetVisualPage(1);
Freemem(Img1,size1);
img1:=nil;
Delay(50000);
Delay(50000);
ClearDevice;
{7кадр}
img; moon;
SetFillStyle(1,0);
SetColor(0);
Bar(300,20,260,100);
Size1:=ImageSize(0,0,350,210);
GetMem(Img1, size1);
GetImage(0,0,350,210,Img1^);
ClearDevice;
PutImage(0,0,Img1^,XorPut);
SetActivePage(1);
SetVisualPage(0);
Freemem(Img1,size1);
img1:=nil;
Delay(50000);
Delay(50000);
ClearDevice;
{8 кадр}
img; moon;
setColor(0);
Circle(280,60,40);
SetFillStyle(1,0);
FloodFill(280,60,0);
Size1:=ImageSize(0,0,350,210);
GetMem(Img1, size1);
GetImage(0,0,350,210,Img1^);
ClearDevice;
PutImage(0,0,Img1^,XorPut);
SetActivePage(0);
SetVisualPage(1);
Freemem(Img1,size1);
img1:=nil;
Delay(50000);
Delay(50000);
ClearDevice;
end;
readln;
CloseGraph;
end.
Сообщение отредактировано: Zac - 11.02.2008 11:45 |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата может я не учел какието особенности работы паскаля с графикой Именно... А точнее - ты забыл про то, что для того, чтобы использовать видеостраницы, надо инициализировать такой режим, в котором их по крайней мере больше одной. Detect инициализирует наилучший из возможных режимов, т.е. VGAHi, с одной страницей...Меняешь вот на это: ...
Gd:=vga;
Gm:=VgaMed;
InitGraph(Gd, Gm, '');
...
и проверяешь...А вообще, можно было бы и цикл сделать - было бы гораздо короче... |
Zac |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: ![]() ![]() ![]() |
Спасибо огромное ! ) помогло! просто я этого не знал. на лекциях только упомянули про 4 видео страницы и как их менять местами и все.. преподу незачет )
Тема исчерпана |
![]() ![]() |
![]() |
Текстовая версия | 29.07.2025 10:00 |