Все наверно видели фильм "Матрица" и там была заставочка — что-то типа падающих цыфр.
Может кто-нить подскажет алгоритм такой заставки на Delphi'ях
28.03.03 20:30: Перенесено модератором из 'Алгоритмы' в Прочее. Вроде и Алгоритмы не те имеются в виду, но и в "Коллеги, улыбнитесь!" не стоит отправлять тему. А вдруг пригодится кому? В Прочее! — ХД
Здравствуйте, Ozone, Вы писали:
O>Все наверно видели фильм "Матрица" и там была заставочка — что-то типа падающих цыфр.
O>Может кто-нить подскажет алгоритм такой заставки на Delphi'ях
Меня сейчас запинают ногами и, наверное, будут правы, но не могу удержаться

"алгоритм такой заставки на Delphi'ях" — задать в конференции вопрос "Ни у кого случайно не завалялся компонент-скринсейвер из Матрицы?"
P.S. Написал постинг и вспомнил, что я таки-видел такой скринсейвер
http://www.steveharding.com/page68.html
Здравствуйте, Andy77, Вы писали:
До юмора конечно не дотягивает... Хотя кто знает
Здравствуйте, Ozone, Вы писали:
O>Все наверно видели фильм "Матрица" и там была заставочка — что-то типа падающих цыфр.
O>Может кто-нить подскажет алгоритм такой заставки на Delphi'ях
Если хочешь это сделать красиво, то без OpenGL/DirectX не обойтись.
Алгоритм очень прост: генеришь разные там символы, рисуешь их, и постепенно поворачиваешь и опускаешь вниз, как только символы достигают конца они перестают рисоваться и рисуются новые сверху и так далее...
... << RSDN@Home 1.0 beta 6a >>
Здравствуйте, Ozone, Вы писали:
O>Все наверно видели фильм "Матрица" и там была заставочка — что-то типа падающих цыфр.
O>Может кто-нить подскажет алгоритм такой заставки на Delphi'ях
Понимаю что не совсем по сути, но у меня есть такой алгоритм на VB
Для настоящего программера нет языковых преград

так что я думаю, что основную идею алгоритма можно от туда уловить...
Если нужен то могу прислать.
...Почему разум становится более ленивым по мере развития технологий? Он привыкает к ним и не заботится о разработке новых...
Здравствуйте, Rakoth, Вы писали:
R>Здравствуйте, Ozone, Вы писали:
O>>Все наверно видели фильм "Матрица" и там была заставочка — что-то типа падающих цыфр.
O>>Может кто-нить подскажет алгоритм такой заставки на Delphi'ях
R>Понимаю что не совсем по сути, но у меня есть такой алгоритм на VB
R>Для настоящего программера нет языковых преград
так что я думаю, что основную идею алгоритма можно от туда уловить...
R>Если нужен то могу прислать.
Ok. Пришли на Ozone_c_raboti@ngs.ru
Вообще у меня тут кое-что получилось, но я думаю, что здесь это сильно раскритикуют
Однако... попробую....
unit matrix;
interface
uses
SysUtils, Graphics, Forms, ExtCtrls;
type
TMainForm = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
const
MAX = 220;
MAX_C = 7;
Colors : array [1..MAX_C] of TColor = (clLime,
$0000D500,
$0000AA00,
clGreen,
$00005500,
$00002B00,
clBlack);
type
TPointArray = array [1..2] of array [1..1000] of integer;
TMyTimer = object
Timer : TTimer;
Canvas : TCanvas;
Pointer : TPointArray;
index : integer;
maxY : integer;
x,y : integer;
number : integer;
interval : integer;
constructor Init(_x, _y: integer; _interval: integer; _number: integer; _Canvas: TCanvas; _maxY: integer; _index: integer);
destructor Destroy;
procedure OnMyTimer(Sender: TObject);
end;
var
MainForm: TMainForm;
Index: 1..MAX;
Time : array [1..MAX] of TMyTimer;
implementation
{$R *.DFM}
constructor TMyTimer.Init(_x, _y: integer; _interval: integer; _number: integer; _Canvas: TCanvas; _maxY: integer; _index: integer);
begin
Canvas := _Canvas;
maxY := _maxY;
interval := _interval;
x:=_x; y:=_y;
number:=_number;
index:=_index;
Timer := TTimer.Create(Application);
Timer.Interval := interval;
Timer.OnTimer := OnMyTimer;
end;
destructor TMyTimer.Destroy;
var
i: 1..MAX_C - 1;
j: 1..1000;
begin
Timer.Destroy;
for i:=index-1 downto index - MAX_C do begin
Canvas.Font.Color:=Colors[7];
Canvas.TextOut(x,Pointer[1,i],IntToStr(Pointer[2,i]));
end;
for i:=1 to 2 do
for j:=1 to 1000 do Pointer[i,j]:=0;
Init(random(MainForm.Width),random(MainForm.Height),{random(100)+50}100,random(10), Canvas, maxY,1);
end;
procedure TMyTimer.OnMyTimer(Sender: TObject);
var
w: 1..MAX_C-1;
i: byte;
begin
Pointer[1,index]:=y; Pointer[2,index]:=number;
Canvas.Font.Color:=Colors[1]; Canvas.TextOut(x,y,IntToStr(number));
if index <> 1 then begin
w:=1;
for i:=index-1 downto index - MAX_C do begin
Canvas.Font.Color:=Colors[w];
Canvas.TextOut(x,Pointer[1,i],IntToStr(Pointer[2,i]));
inc(w);
end;
end;
inc(number);
if number>9 then number:=0;
inc(y,18);
inc(index);
if y > maxY then Destroy;
end;
procedure TMainForm.FormCreate(Sender: TObject);
var
i: 1..MAX;
begin
MainForm.Width:=Screen.Width;
MainForm.Height:=Screen.Height;
MainForm.Canvas.Font.Size:=8;
for i:=1 to MAX do
Time[i].Init(random(MainForm.Width),random(MainForm.Height),{random(100)+50}100,random(10),MainForm.Canvas, MainForm.Height,1);
end;
end.