Помощь - Поиск - Пользователи - Календарь
Полная версия: Задание: В виде мультфильма представить картину
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
flashg
Задание:

Кто нибудь знает как это сделать, есть ли исходник

В виде мультфильма представить картину медленного захода солнца за линию горизонта с изменением освещения пейзажа.
volvo
flashg, а пейзаж должен быть, конечно, 3D? Иначе какое же изменение освещения? blink.gif Тогда ты ошибся разделом... Тебе в Delphi (или 32-битные компиляторы) + OpenGL в руки...

Или уточни задание: Что за пейзаж, как задаешь, чем можно пользоваться ...
Guest
нет нас пока учат на паскале я глаза не видел дельфи

а разве нельзя его вест этот 2ух мерный пейзаж цветом радуги сплошным оброзом изменять
flashg
это вот всё задание нам таким оброзом дают - а пользоватся можно тока паскалем.

выше отавленый комент под GUEST это мое сообщение
volvo
Цитата(Guest @ 3.08.05 0:02)
а разве нельзя его вест этот 2ух мерный пейзаж цветом радуги сплошным оброзом изменять

Во-первых, чтобы его изменять, надо его сначала нарисовать... Ты это умеешь? И потом, что значит "цветом радуги" и "сплошным образом"? Непонятно... Единственное, что можно попытаться сделать - это прочитать "пейзаж" из внешнего BMP (или PCX) файла, поверх него отрисовать "солнце", и потом затемнять все изображение, начиная с того момента, как "солнце" коснулось "горизонта" (при этом яркость изображения будет = 100%), до того момента, как "оно" за горизонтом скроется полностью (тогда яркость будет = 0%, и экран будет полностью черным)...

Но вот как реализовать отрисовку пикселов с заданной степенью яркости (или просто смену яркости для пикселов) - надо думать...
Malice
Цитата(volvo @ 3.08.05 0:26)
Но вот как реализовать отрисовку пикселов с заданной степенью яркости (или просто смену яркости для пикселов) - надо думать...

Палитру крутить надо.
flashg
и как это палитра крутится
Malice
Цитата(flashg @ 3.08.05 11:35)
и как это палитра крутится


Для начала сохрани начальную палитру:
Код
port[$3c8]:=номер цвета;
red;=port[$3c9];
green:=port[$3c9];
blue:=port[$3c9];

Так установить цвет:
Код
port[$3c8]:=номер цвета;
port[$3c9]:=красный;
port[$3c9]:=зеленый;
port[$3c9]:=синий;


По мере "восхождения" меняй все палитру от 0 до оригинальной, все как бы проявится.
flashg
Моё задание звучит так

В виде мультфильма представить картину медленного захода солнца за линию горизонта с изменением освещения пейзажа.
========================================================
вопрос как мне сделать линию на сплошном цвете и изменение цвета пейзажа

+ у меня ко всем графическим програ==ам глюк после запуска не возможно вернутся к редоктированию он (паскаль) зависает на этой процедуре показывания графического результата.





Код

{прототип заката}
program zakat;
uses
   crt,graph;
var
  grdr,grmd,i,j,g:integer;
begin
    grdr:=detect;
    initgraph(grdr,grmd,'c:\pascal\bgi');
    setbkcolor(lightblue);
    g:=getbkcolor;
    i:=50; j:=50;
    while i<getmaxX do
    begin
         setcolor(red);
         setfillstyle(1,yellow);
         fillellipse(i,j,20,20);
         delay(3000);
         setcolor(g);
         setfillstyle(1,g);
         fillellipse(i,j,20,20);
         i:=i+random(3);
         j:=j+random(2);
    end;
readln;
end.
klem4
Ты не закрыл графику.
CloseGraph.
volvo
flashg,
Цитата
вопрос как мне сделать линию на сплошном цвете и изменение цвета пейзажа

Линия НА ЛЮБОМ цвете рисуется через Line(x1, y1, x2, y2), ну а насчет изменения цвета пейзажа - попробуй ВНИМАТЕЛЬНО перечитать, например, пост №8...

Кстати, ты в графический-то режим переходишь (InitGraph), а CloseGraph за тебя кто будет делать?
flashg
Цитата(Malice @ 3.08.05 16:31)
Для начала сохрани начальную палитру:
Код
port[$3c8]:=номер цвета;
red;=port[$3c9];
green:=port[$3c9];
blue:=port[$3c9];

Так установить цвет:
Код
port[$3c8]:=номер цвета;
port[$3c9]:=красный;
port[$3c9]:=зеленый;
port[$3c9]:=синий;






Цитата(flashg @ 12.08.05 19:20)
Код

{прототип заката}
program zakat;
uses
   crt,graph;
var
  grdr,grmd,i,j,g:integer;
begin
    grdr:=detect;
    initgraph(grdr,grmd,'c:\pascal\bgi');
    setbkcolor(lightblue);
    g:=getbkcolor;
    i:=50; j:=50;
    while i<getmaxX do
    begin
         setcolor(red);
         setfillstyle(1,yellow);
         fillellipse(i,j,20,20);
         delay(3000);
         setcolor(g);
         setfillstyle(1,g);
         fillellipse(i,j,20,20);
         i:=i+random(3);
         j:=j+random(2);
    end;
readln;
end.



ну и куда мне это в мою заготовку втыкать blink.gif
Malice
Цитата(flashg @ 12.08.05 18:57)
ну и куда мне это в мою заготовку втыкать  blink.gif


Гы smile.gif Через Copy, Paste программы не пишутся. Сохраняешь в начале в массив. Меняешь в цикле по ходу движения.
flashg
окей нашёл пример домик с палянкой и нужный фон дом и фон убрал пытался втиснуть солнце а вышла глюконация

вот глянте - в чём моя ошибка

Код
uses crt,graph;
const a:array [1..9] of byte=(0,0,1,3,11,3,1,0,0);
var GrDriver,GrMode,i,g,j:integer;

procedure dom;
const
cga=1;
begin
    setcolor(2);
    line(0,400,getmaxX,400);
    g:=getbkcolor;
    i:=50; j:=50;
    while i<700 do
    begin
        setcolor(yellow);
         setfillstyle(1,yellow);
         fillellipse(i,j,40,40);
         delay(2000);
         setcolor(g);
         setfillstyle(1,g);
         fillellipse(i,j,40,40);
         i:=i+random(3);
         j:=j+random(2);
    end;
end;

procedure fon (i:word);
Begin
    SetBkColor(i);
    SetFillStyle(1,green);
    SetColor(lightgreen);
End;

BEGIN
    GrDriver:=EGA; GrMode:=EGAHi;
    initgraph(GrDriver,GrMode,'c:\pascal\BGI'); {прописать расположение паскаля}
    if GraphResult<>grOK then halt(1);
    for i:=1 to 9 do
       begin
             fon(a[i]);
             dom;
             delay(65000);
             delay(65000);
        end;
closegraph;
end.
    readln;

Malice
В этом коде ошибок нет. Летает солнышко как и задумано smile.gif
flashg
да но фон та чёрный постоянный а задумывался сменяющейся
Код
uses crt,graph;
const a:array [1..9] of byte=(0,0,1,3,11,3,1,0,0);
var GrDriver,GrMode,i:integer;

procedure fon (i:word);
Begin
    SetBkColor(i);
    SetFillStyle(1,green);
    SetColor(lightgreen);
End;

BEGIN
    GrDriver:=EGA; GrMode:=EGAHi;
    initgraph(GrDriver,GrMode,'c:\pascal\BGI'); {прописать расположение паскаля}
    if GraphResult<>grOK then halt(1);
    for i:=1 to 9 do
        begin
             fon(a[i]);
             delay(65000);
             delay(65000);
             end;
closegraph;
end.
    readln;
    END.
klem4
я конечно не уверен...попробуй вот так :


procedure fon (i:word);
Begin
SetBkColor(i);
SetFillStyle(0,i);
FloodFill(0,0,i);
End;


тока с цветами уже сам разберсь как тебе менять
flashg
вот вариант в котором фон тока не меняется а всё остальное работает
flashg
дубль 3

фон меняется солнце есть но за солнцем глючный след и снова бесконечность
Код
uses crt,graph;
const a:array [1..9] of byte=(10,9,5,3,11,7,8,10,11);
var GrDriver,GrMode,i,g,j:integer;
f:word;

procedure dom;
const
cga=1;
begin
    line(0,300,getmaxX,300);
    SetBkColor(f);
    i:=50; j:=50;
    while i<300 do
    begin
        setcolor(yellow);
         setfillstyle(1,yellow);
         fillellipse(i,j,40,40);
         delay(2000);
         setcolor(f);
         setfillstyle(1,f);
         fillellipse(i,j,40,40);
         i:=i+random(3);
         j:=j+random(2);
    end;
end;

procedure fon (f:word);
Begin
    SetBkColor(f);
    SetFillStyle(1,f);
    SetColor(f);
End;

BEGIN
    GrDriver:=cGA; GrMode:=cGAHi;
    initgraph(GrDriver,GrMode,'c:\pascal\BGI'); {прописать расположение паскаля}
    if GraphResult<>grOK then halt(1);
    for f:=1 to 9 do
       begin
             fon(a[f]);
             dom;
             delay(100);
             delay(100);
        end;
closegraph;
end.
    readln;

flashg
сделал:
Код

uses crt,graph;
const a:array [1..9] of byte=(10,9,5,3,11,7,8,10,11);
var GrDriver,GrMode,i,g,j:integer;
   Palette : PaletteType;
f:word;

procedure dom;
const
    maxi = 400;
    starti = 0;
begin
    line(0,maxi,getmaxX,maxi);
    i:=starti; j:=50;
   { SetRGBPalette(f, round((maxi - i - starti)*256/maxi), 0, 0);{}
    SetBkColor(f);
    while i<360 do
    begin
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
         SetRGBPalette(f, round((maxi - i - starti)*63/maxi), 0, 0);{}
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

         setcolor(yellow);
         setfillstyle(1,yellow);
         fillellipse(j,i,40,40);
         delay(4000);
         setcolor(f);
         setfillstyle(1,f);
         fillellipse(j,i,40,40);
         i:=i+random(3);
         j:=j+random(2);
    end;
end;

procedure fon (f:word);
Begin
    SetBkColor(f);
    SetFillStyle(1,f);
    SetColor(f);
End;

BEGIN
    GrDriver:=VGA; GrMode:=VGAHi;
    initgraph(GrDriver,GrMode,'c:\pascal\bgi'); {прописать расположение паскаля}
    if GraphResult<>grOK then halt(1);
    f := 1;
    GetPalette(Palette);
    fon(a[f]);{}
    dom;
    SetAllPalette(Palette);

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