Помощь - Поиск - Пользователи - Календарь
Полная версия: Движущийся объект
Форум «Всё о Паскале» > 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);
  {„(r)¬ЁЄ}
    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); 
 
  setfillstyle(1,6);
  bar(75, 460, 85, 500);
  {„(r)¬ЁЄ}
    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.



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