Помощь - Поиск - Пользователи - Календарь
Полная версия: Движущийся объект
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
nesh
Всем привет!!!
У меня есть рисунок на паскале на нем надо сделать движущееся солнце, чтобы оно восходило на востоке и заходило на западе, пожалуйста помогите сделать!


program domik;

uses CRT,Graph;
const n=500;
var grdr,grmd,error,d: Integer;
i: integer;

dx,gx,gy,gd,gm,x1,y1:integer;
x,y,vx,vy,p:array[1..n] of integer;
r,l,c:boolean;
procedure solnce(x,y: word;col:byte);
begin
setcolor(col);
circle(x,y,45);
floodfill(x,y,col);
end;
begin
grdr:=detect;
InitGraph(grdr, grmd,'c:\FPC\2.2.0\bin');
ErrorCode := GraphResult;
if ErrorCode <> 0 then
begin
writeln(GraphErrorMsg(ErrorCode));
halt;
end;
setlinestyle(0,255,3);

setcolor(2);
setfillstyle(4,2);
moveto(80,240);
lineto(95,300);
lineto(65,300);
lineto(80,240);
floodfill(80,250,2);
moveto(80,300);
lineto(110,380);
lineto(50,380);
lineto(80,300);
floodfill(80,310,2);
moveto(80,380);
lineto(120,460);
lineto(40,460);
lineto(80,380);
floodfill(80,400,2);
setcolor(6);
setfillstyle(1,6);
bar(75, 460, 85, 500);
{„®¬ЁЄ}
setcolor(4);
rectangle(250,250, 500, 500);
setfillstyle(1,4);
floodfill(255,255,4);
line(250, 250,375,125);
line(500,250,375,125);
moveto(432,180);
lineto(432,130);
line(432,130,452,130);
moveto(452,130);
lineto(452,200);
setcolor(14);
rectangle(300,300,450,420);
setfillstyle(1,14);
floodfill(310,310,14);
setcolor(15);
line(300,333,450,333);
line(375,333,375,420);
setcolor(6);
circle(375,200,30);
line(375,170,375,230);

setcolor(14);
setfillstyle(1,14);
circle(800,80,45);
floodfill(800,80,14);

setcolor(2);
rectangle(0,500,1279,500);
setfillstyle(11,2);
floodfill(0,510,2);

setcolor(8);
rectangle(500,350,1279,350);
setfillstyle(0,8);
bar(500,350,1279,350);
line(600,350,600,500);
line(700,350,700,500);
line(800,350,800,500);
line(900,350,900,500);
line(1000,350,1000,500);
line(1100,350,1100,500);
line(1200,350,1200,500);



readkey;
closegraph;

end.

renesko1
Солнце движется по кругу -->
Вот формулы :
x := round(x0 + cos ( alfa ) * cer ) ;
y := round(y0 + sin ( alfa ) * cer ) ;

x0, y0 : центр вращения.
cer : растояние от центра.
Для передвижения солнца меняем угол alfa.

Или солнце справа по линии ползет на лево.
Тогда меняем координату x.
-------------------------
Рисоавние :
Рисуем солнце.
Меняем координату.
Ждемс.
Стираем солнце.
Рисуем заново.и тд.

nesh
Цитата
Рисоавние :
Рисуем солнце.
Меняем координату.
Ждемс.
Стираем солнце.
Рисуем заново.и тд.


Этот алгоритм мне очень понятен! smile.gif А вот его реализация не очень!!! dry.gif
renesko1
Солнце это arc(x, y, 0, 360, 30) ;
Меняем координаты по вышестоящим формулам.
Пример

цикл

SetColor(0);
arc(x,y,...);
SetColor(15);
arc(x,y...)
x:=...
y:=...
nesh
Цитата
SetColor(0);
arc(x,y,...);
SetColor(15);
arc(x,y...)
x:=...
y:=...


Это в цикле или за ним?! Если делать в цикле, то нужно условие ставить и какое оно здесь?
nesh
Народ, че-то у меня вобще ниче не получается, ПОМОГИТЕ!!!
мисс_граффити
в том виде, в котором ты выложила, не компилируется - неизвестная переменная ErrorCode.

а дальше - ты сама себе создала проблему, нарисовав все так крупно, что солнцу не осталось чистого места. оно же должно ходить ЗА домиком => придется каждый раз домик перерисоввывать. оно тебе надо?

примерно так может выглядеть движение солнца "в чистом поле":
for alpha:=100 to 200 do
begin
setcolor(6);
x0:=(getmaxx div 2)+round(cos(alpha*pi/100)*300);
y0:=getmaxy+round(sin(alpha*pi/100)*300);
circle(x0,y0,40);
setfillstyle(1,6);
floodfill(x0,y0,6);
setcolor(0);
setfillstyle(1,0);
delay(50000);
circle(x0,y0,40);
floodfill(x0,y0,0);
end;
nesh
Че-то оно у меня не двигается!!!
renesko1

while true do
begin
delay(100);
SetColor(0);
arc(x,y,...);
SetColor(желтый цвет);
arc(x,y...)
x := round(x0 + cos ( alfa ) * cer ) ;
y := round(y0 + sin ( alfa ) * cer ) ;
alfa := alfa + 0.1 ;
end ;



Попробуй так.
Здесь солнце желтая окружность.

падла
Цитата(nesh @ 22.04.2008 17:57) *

Всем привет!!!
У меня есть рисунок на паскале на нем надо сделать движущееся солнце, чтобы оно восходило на востоке и заходило на западе, пожалуйста помогите сделать!


program domik;

uses CRT,Graph;
const n=500;
var grdr,grmd,error,d: Integer;
i: integer;

dx,gx,gy,gd,gm,x1,y1:integer;
x,y,vx,vy,p:array[1..n] of integer;
r,l,c:boolean;
procedure solnce(x,y: word;col:byte);
begin
setcolor(col);
circle(x,y,45);
floodfill(x,y,col);
end;
begin
grdr:=detect;
InitGraph(grdr, grmd,'c:\FPC\2.2.0\bin');
ErrorCode := GraphResult;
if ErrorCode <> 0 then
begin
writeln(GraphErrorMsg(ErrorCode));
halt;
end;
setlinestyle(0,255,3);

setcolor(2);
setfillstyle(4,2);
moveto(80,240);
lineto(95,300);
lineto(65,300);
lineto(80,240);
floodfill(80,250,2);
moveto(80,300);
lineto(110,380);
lineto(50,380);
lineto(80,300);
floodfill(80,310,2);
moveto(80,380);
lineto(120,460);
lineto(40,460);
lineto(80,380);
floodfill(80,400,2);
setcolor(6); yes2.gif
setfillstyle(1,6);
bar(75, 460, 85, 500);
{„®¬ЁЄ}
setcolor(4);
rectangle(250,250, 500, 500);
setfillstyle(1,4);
floodfill(255,255,4);
line(250, 250,375,125);
line(500,250,375,125);
moveto(432,180);
lineto(432,130);
line(432,130,452,130);
moveto(452,130);
lineto(452,200);
setcolor(14);
rectangle(300,300,450,420);
setfillstyle(1,14);
floodfill(310,310,14);
setcolor(15);
line(300,333,450,333);
line(375,333,375,420);
setcolor(6);
circle(375,200,30);
line(375,170,375,230);

setcolor(14);
setfillstyle(1,14);
circle(800,80,45);
floodfill(800,80,14);

setcolor(2);
rectangle(0,500,1279,500);
setfillstyle(11,2);
floodfill(0,510,2);

setcolor(8);
rectangle(500,350,1279,350);
setfillstyle(0,8);
bar(500,350,1279,350);
line(600,350,600,500);
line(700,350,700,500);
line(800,350,800,500);
line(900,350,900,500);
line(1000,350,1000,500);
line(1100,350,1100,500);
line(1200,350,1200,500);
readkey;
closegraph;

end.



Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.