Матрица
От: Ozone Россия  
Дата: 25.03.03 02:20
Оценка:
Все наверно видели фильм "Матрица" и там была заставочка — что-то типа падающих цыфр.
Может кто-нить подскажет алгоритм такой заставки на Delphi'ях

28.03.03 20:30: Перенесено модератором из 'Алгоритмы' в Прочее. Вроде и Алгоритмы не те имеются в виду, но и в "Коллеги, улыбнитесь!" не стоит отправлять тему. А вдруг пригодится кому? В Прочее! — ХД
Re: Матрица
От: Andy77 Ниоткуда  
Дата: 25.03.03 14:35
Оценка: 23 (2)
Здравствуйте, Ozone, Вы писали:

O>Все наверно видели фильм "Матрица" и там была заставочка — что-то типа падающих цыфр.

O>Может кто-нить подскажет алгоритм такой заставки на Delphi'ях

Меня сейчас запинают ногами и, наверное, будут правы, но не могу удержаться
"алгоритм такой заставки на Delphi'ях" — задать в конференции вопрос "Ни у кого случайно не завалялся компонент-скринсейвер из Матрицы?"

P.S. Написал постинг и вспомнил, что я таки-видел такой скринсейвер http://www.steveharding.com/page68.html
Re[2]: Матрица
От: MikaRSDN Soukhov Stock#
Дата: 25.03.03 15:08
Оценка:
Здравствуйте, Andy77, Вы писали:

До юмора конечно не дотягивает... Хотя кто знает
Re: Матрица
От: VertexDev Россия  
Дата: 25.03.03 15:24
Оценка:
Здравствуйте, Ozone, Вы писали:

O>Все наверно видели фильм "Матрица" и там была заставочка — что-то типа падающих цыфр.

O>Может кто-нить подскажет алгоритм такой заставки на Delphi'ях

Если хочешь это сделать красиво, то без OpenGL/DirectX не обойтись.
Алгоритм очень прост: генеришь разные там символы, рисуешь их, и постепенно поворачиваешь и опускаешь вниз, как только символы достигают конца они перестают рисоваться и рисуются новые сверху и так далее...
... << RSDN@Home 1.0 beta 6a >>
Re: Матрица
От: Rakoth Россия  
Дата: 25.03.03 15:32
Оценка:
Здравствуйте, Ozone, Вы писали:

O>Все наверно видели фильм "Матрица" и там была заставочка — что-то типа падающих цыфр.

O>Может кто-нить подскажет алгоритм такой заставки на Delphi'ях

Понимаю что не совсем по сути, но у меня есть такой алгоритм на VB
Для настоящего программера нет языковых преград так что я думаю, что основную идею алгоритма можно от туда уловить...
Если нужен то могу прислать.
Re[2]: Матрица
От: MadCoders Россия  
Дата: 25.03.03 15:46
Оценка:
VD>Алгоритм очень прост: генеришь разные там символы, рисуешь их, и постепенно поворачиваешь и опускаешь вниз, как только символы достигают конца они перестают рисоваться и рисуются новые сверху и так далее...

Не совем так, у меня в Линуксе стоит такой скринсейвер там длякрасоты символы валятся из любой позиции, причем они немного светлее чем остальные символы, за счет чего и наблюдается эффект "стекания" Символы лучше брать не из OEM, ANSI русских таблиц а из китайской и пр. (могу скриншот сделать, если надо, мыльни на zerooo@inbox.ru)
...Почему разум становится более ленивым по мере развития технологий? Он привыкает к ним и не заботится о разработке новых...
Re[2]: Матрица
От: Ozone Россия  
Дата: 26.03.03 03:16
Оценка:
Здравствуйте, Rakoth, Вы писали:

R>Здравствуйте, Ozone, Вы писали:


O>>Все наверно видели фильм "Матрица" и там была заставочка — что-то типа падающих цыфр.

O>>Может кто-нить подскажет алгоритм такой заставки на Delphi'ях

R>Понимаю что не совсем по сути, но у меня есть такой алгоритм на VB

R>Для настоящего программера нет языковых преград так что я думаю, что основную идею алгоритма можно от туда уловить...
R>Если нужен то могу прислать.

Ok. Пришли на Ozone_c_raboti@ngs.ru
Re: Матрица
От: Ozone Россия  
Дата: 26.03.03 03:22
Оценка:
Вообще у меня тут кое-что получилось, но я думаю, что здесь это сильно раскритикуют
Однако... попробую....

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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.