Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.09.27;
Скачать: [xml.tar.bz2];

Вниз

Эффект падающих цифр   Найти похожие ветки 

 
datorn ©   (2009-07-17 19:57) [0]

Добрового времени суток, мастера! Подскажите, пожалуйста, как реализовать эффект падающих цифр ("дождь из цифр")? Этот эффект реализован в фильме "Матрица".
Вот реализовал один столбик "дождя", но как их сделать много и независимыми?

var
y_old:integer;
s:string;
c1,c2:TColor;
begin
c1:=$002FFF6D;
c2:=$00008800;
canvas.Font.Color:=c1;
//setbkmode(form1.canvas.Handle,Transparent);

s:=inttostr(random(2))+inttostr(random(2));

 y_old := y-canvas.TextHeight(s);
 canvas.TextOut(x,y,s);
 canvas.Font.Color:=c2;
 canvas.TextOut(x,y_old,s1);
 s1:=s;
end;


 
@!!ex ©   (2009-07-17 19:58) [1]

ви цикле.


 
Сергей М. ©   (2009-07-17 20:06) [2]

На лабу, вроде, не похоже ..


 
datorn ©   (2009-07-17 20:09) [3]

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


 
datorn ©   (2009-07-17 20:16) [4]

Вот здесь есть похожий эффект -
http://softsearch.ru/programs/179-568-dos-matrix-2003-download.shtml


 
datorn ©   (2009-07-17 20:16) [5]

Вот здесь есть похожий эффект -
http://softsearch.ru/programs/179-568-dos-matrix-2003-download.shtml


 
Сергей М. ©   (2009-07-17 20:21) [6]

Ну точно не лаба)..


 
datorn ©   (2009-07-17 20:22) [7]

Та не лаба)) Просто захотелось сделать такой эффект, а мозгов, по ходу, не хватает:"(


 
@!!ex ©   (2009-07-17 20:24) [8]

> [3] datorn ©   (17.07.09 20:09)

Не нужно 50 таймеров.


> [7] datorn ©   (17.07.09 20:22)

Не мозгов, а базовых знаний.


 
datorn ©   (2009-07-17 20:26) [9]

Ну а как??? Я пытался через цикл, использовал sleep, изменял икс и игрек, а всё равно не тот эффект!


 
Anatoly Podgoretsky ©   (2009-07-17 20:28) [10]

> Сергей М.  (17.07.2009 20:21:06)  [6]

Не лаба, но лучше делом заняться.


 
Сергей М. ©   (2009-07-17 20:29) [11]


> не лаба. Просто захотелось


Мож лучше "сникерснуть" ?


 
datorn ©   (2009-07-17 20:31) [12]

))) Та уже три батончика съел))


 
Сергей М. ©   (2009-07-17 20:32) [13]


> пытался через цикл, использовал sleep, изменял икс и игрек,
>  а всё равно


Мдя ..
Не видать тебе, Данила-мастер, цветка каменного как своих ушей ..


 
@!!ex ©   (2009-07-17 20:35) [14]

> [9] datorn ©   (17.07.09 20:26)

Простой совет. Обычно он тем кому я преподаю помогает:
попробуй расписать задачу на человеческом языке. В виде алгоритма.


 
sniknik ©   (2009-07-17 20:36) [15]

> В цикле - всё будет одновременно происходить. Идеально было бы для каждой процедуры организовать свой таймер со случайным х,
> но не размещу же я 50 таймеров на форме!
таймер должен быть только один! © Дункан Маклауд
с минимальным интервалом, и массив из 50ти х выраженных в этих интервалах, полученных естественно рандомно. кончились интервалы - сработало, получай новый, не кончились - пропускай. все.

> Ну а как??? Я пытался через цикл, использовал sleep, изменял икс и игрек, а всё равно не тот эффект!
а по колесу пинать пробовал?


 
datorn ©   (2009-07-17 20:37) [16]

Пробовал пинать, не катится.


 
Сергей М. ©   (2009-07-17 20:39) [17]


> Пробовал пинать, не катится.


Карбюратор, наверно, не сосает..


 
datorn ©   (2009-07-17 20:41) [18]

Сергей М, очень важные советы, демонстрирующие ваше мастерство в кодинге! Спасибо.


 
Сергей М. ©   (2009-07-17 20:42) [19]

На здоровье.
Носи не стаптывай.


 
Сергей М. ©   (2009-07-17 20:53) [20]


> Обычно он ...помогает:.. попробуй


Лучше уж "джага-джага"


 
datorn ©   (2009-07-17 22:49) [21]

sniknik ©   (17.07.09 20:36) [15]
По описанному алгоритму каждая из колонок цифр опускается синхронно с другой (потому что скорость определяется интервалом таймера), а надо, чтоб каждая из "струек" цифр падала отдельно.


 
sniknik ©   (2009-07-17 23:18) [22]

datorn ©   (17.07.09 22:49) [21]
читай "алгоритм" еще, ты не "врубился".

> потому что скорость определяется интервалом таймера
скорость там определяется интервалом таймера * на рандомное значение из массива x для каждой строчки.


 
Германн ©   (2009-07-18 00:56) [23]


> datorn ©   (17.07.09 20:26) [9]
>
> Ну а как??? Я пытался через цикл, использовал sleep, изменял
> икс и игрек, а всё равно не тот эффект!

Интересно как ты "пытался через цикл, использовал sleep, изменял
икс и игрек"?


> Сергей М. ©   (17.07.09 20:21) [6]
>
> Ну точно не лаба)..
>

Но всё лучше, чем "падающие шары". :)


 
Художник   (2009-07-18 06:43) [24]

Мх а если ченить типа

type
TSuperPuperTipoZapis= packed record
 x,y,speed:integer;
end;

...
ar:array [0..49] of TSuperPuperTipoZapis;

...

inc(ar[x].y,ar[x].speed)


 
datorn ©   (2009-07-18 08:58) [25]

Германн ©   (18.07.09 00:56) [23]


procedure TForm1.m(var x,y:integer);
var
y_old:integer;
s:string;
c1,c2:TColor;
begin
c1:=$002FFF6D;
c2:=$00008800;
canvas.Font.Color:=c1;
//setbkmode(form1.canvas.Handle,Transparent);

s:=inttostr(random(2))+inttostr(random(2));

y_old := y-canvas.TextHeight(s);
canvas.TextOut(x,y,s);
canvas.Font.Color:=c2;
canvas.TextOut(x,y_old,s1);
s1:=s;
end;

...

for y:=1 t0 10 do
begin
for x:=1 to 10 do
 m(x,y);
 sleep(500);
end;


 
Германн ©   (2009-07-19 01:57) [26]


> datorn ©   (18.07.09 08:58) [25]
>
> Германн ©   (18.07.09 00:56) [23]
>

Арифметика меня не интересует (пока).
Где в программе ты использовал циклы с процедурой m?


 
KilkennyCat ©   (2009-07-19 02:14) [27]

А я бы создал битмап на всю необходимую экрану, смещал бы в нем стоблцы букв, дорисовывая в верх новую и регулируя яркость необходимых участков, после чего делал бы флип на экран.


 
KilkennyCat ©   (2009-07-19 02:16) [28]


> Где в программе ты использовал циклы с процедурой m?


> for y:=1 t0 10 do
> begin
> for x:=1 to 10 do
>  m(x,y);
>  sleep(500);
> end;


 
Германн ©   (2009-07-19 02:23) [29]


> KilkennyCat ©   (19.07.09 02:16) [28]
>
>
> > Где в программе ты использовал циклы с процедурой m?
>

Не смеши. Лучше иди спать. :)


 
turbouser ©   (2009-07-19 14:11) [30]

а цифры все падали и падали...


 
AlexDan ©   (2009-07-19 23:59) [31]

если есть один дождь, то какая проблемма сделать много..? один цикл в другом или что-то вроде)..


 
Dennis I. Komarov ©   (2009-07-20 11:59) [32]


> а цифры все падали и падали...

Не, ну я могу понять девушку, у которой падали, но тут (судя по анкете) - уже все совсем запущено. Да, она со статическими массивами то сделала :) надо у нее уточнить как...
;)


 
KilkennyCat ©   (2009-07-20 13:45) [33]


> надо у нее уточнить как...

можешь у меня уточнить ;) хотя, для этого придется старую почту поднимать...


 
Dennis I. Komarov ©   (2009-07-20 13:52) [34]


> можешь у меня уточнить ;)

не, не интересно будет... ;)


 
datorn ©   (2009-07-20 18:54) [35]

Dennis I. Komarov, до сих пор веришь анкетам? Наивный...


 
V   (2009-07-20 21:34) [36]

Я скорее всего неправильно понял смысл эффекта матрицы, а посему вопрос: по какому принципу подсвечиваются светлозеленым циферки, и должны ли падающие цифры меняться?
Ну вот у меня получилось вот это http://www.filehoster.ru/files/dd5920


 
datorn ©   (2009-07-20 21:44) [37]

to V   (20.07.09 21:34) [36]
О, огромное спасибо! Хоть один хороший человек предложил готовый код. Почти желаемый эффект. Тока еслиб цифры ещё как бы спускались сверху вниз как вот здесь -
http://softsearch.ru/programs/179-568-dos-matrix-2003-download.shtml ваще было бы именно то!


 
KilkennyCat ©   (2009-07-20 22:48) [38]


> Хоть один хороший человек предложил готовый код

А остальные все плохие. Потому что хотели, чтоб ты сам научился.
Ну, это нормально...


 
datorn ©   (2009-07-20 23:00) [39]

to KilkennyCat ©   (20.07.09 22:48) [38]
Да нет, не значит, что все остальные плохие. Просто из всех хороших только один предложил код)
Уже мозги себе все проимел с этой матрицей, а конечный результат не достигнут, даже несмотря на советы мастеров(. А тут готовый код, ещё раз спасибо. Почитал, разобрался, допетрил, как надо. Сам бы ещё неделю "учился".


 
turbouser ©   (2009-07-20 23:51) [40]


> datorn ©   (20.07.09 23:00) [39]

Опыт-сын ошибок трудных


 
Германн ©   (2009-07-21 01:28) [41]


> Уже мозги себе все проимел с этой матрицей, а конечный результат
> не достигнут, даже несмотря на советы мастеров(. А тут готовый
> код, ещё раз спасибо. Почитал, разобрался, допетрил, как
> надо.

Если тебе это помогло, - "В добрый путь".


 
V   (2009-07-21 06:37) [42]

datorn, этот код вообще бредовый, за основу его брать не надо, наоборот, так делать НЕ нужно :)
как я понял, надо чтобы расстояние по вертикали между цифрами постоянное было, только столбцы ползли по-разному, а еще желательно чтобы это все плавно происходило..


 
brother ©   (2009-07-21 09:10) [43]

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls;

const
 UnVisibleSymbol="!";

type
 TFlySym = record
   X, Y: Integer;
   Symb: string[1];
   IncSize: integer;
 end;

 TForm1 = class(TForm)
   Timer1: TTimer;
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
 private
   { Private declarations }
   FlySym: array of TFlySym;
 public
   { Public declarations }
   ActiveColor,
   PassiveColor: TColor;
   Image: TBitmap;
   procedure Draw;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function GetRMDSymb:string;
begin
//  33-126
// 65-90
 result:= chr(random(25)+65);
end;

procedure TForm1.FormCreate(Sender: TObject);
var x,y, n: integer;
begin
 Randomize;
 ActiveColor:=$002FFF6D;
 PassiveColor:=$00008800;

 Image:= TBitmap.Create;
 Image.Width:= ClientWidth;
 Image.Height:= ClientHeight;
 Image.PixelFormat:= pf32bit;

 SetLength(FlySym, Image.Width div 13);

 for n:= 0 to length(FlySym)-1 do
 begin
   FlySym[n].X:= random( Image.Width div 13) * 13 ;
   FlySym[n].Y:= random( Image.Height div 13) * 13;
   FlySym[n].Symb:= GetRMDSymb;
   FlySym[n].IncSize:= random(13-8)+8;
 end;

 Image.Canvas.Brush.Color:= clBlack;
 PatBlt(Image.Canvas.Handle, 0, 0, Image.Width, Image.Height,  BLACKNESS);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 Image.Free;
end;

procedure TForm1.Draw;
var n: integer;
begin
 for n:= 0 to length(FlySym)-1 do
 begin
   Inc(FlySym[n].Y, FlySym[n].IncSize);
   if FlySym[n].Y >= Image.Height then
   begin
     FlySym[n].IncSize:= random(13-8) + 8;
     FlySym[n].X:= random(Image.Width div 13) * 13 ;
     FlySym[n].Y:= 0;
     if random(3)<> 0 then
       FlySym[n].Symb:= GetRMDSymb
     else
       FlySym[n].Symb:= UnvisibleSymbol;
   end;

   if FlySym[n].Symb<>UnVisibleSymbol then
     FlySym[n].Symb:= GetRMDSymb;

   if FlySym[n].Symb<>UnVisibleSymbol then
   begin
     PatBlt(Image.Canvas.Handle, FlySym[n].X, FlySym[n].Y - FlySym[n].IncSize,
       13, 13,  BLACKNESS);
     Image.Canvas.Font.Color:= PassiveColor;
     Image.Canvas.TextOut(FlySym[n].X , FlySym[n].Y - 13, FlySym[n].Symb);
     Image.Canvas.Font.Color:= ActiveColor;
     Image.Canvas.TextOut(FlySym[n].X , FlySym[n].Y, FlySym[n].Symb);
   end
   else
     PatBlt(Image.Canvas.Handle, FlySym[n].X, FlySym[n].Y - FlySym[n].IncSize,
       13, 13*2,  BLACKNESS);
 end;

 Form1.Canvas.Draw(0,0, Image);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Draw;
end;

end.
как то так... там идей реализации до дури...)


 
brother ©   (2009-07-21 09:21) [44]

WMZ жду на кошелек)


 
Dennis I. Komarov ©   (2009-07-21 14:08) [45]


> datorn ©   (20.07.09 18:54) [35]

Ну допустим и что с того? Мне от этого ни горячо ни холодно, а вот по какой причине решили обманывать людей, от которых просите помощь - не понятно. Наверное есть что скрывать или чего стесняться :-Р


 
Andy BitOff ©   (2009-07-21 15:51) [46]

а цифры все падали и падали...


 
MacroDenS ©   (2009-07-22 10:23) [47]

<<<OFFTOP>>>>
судя по всему следующим вопросом будет "как заставить цифери вращаться".

так со временем дойдем до темы: как написать свою собственную матрицу и найти в ней Нео (или Морфеуса)
:-)


 
Andy BitOff ©   (2009-07-22 10:54) [48]


> MacroDenS ©   (22.07.09 10:23) [47]

Как узнать коды доступа к компьютеру Зеона


 
brother ©   (2009-07-22 10:58) [49]

> Как узнать коды доступа к компьютеру Зеона

как всегда - перебором)


 
Anatoly Podgoretsky ©   (2009-07-22 11:57) [50]

> Andy BitOff  (22.07.2009 10:54:48)  [48]

Когда цифры прекратят падать.


 
macrodens ©   (2009-07-22 14:13) [51]

to Andy BitOff ©
А не агент ли ты?


 
brother ©   (2009-07-22 15:11) [52]

Matrix have as)


 
turbouser___   (2009-07-22 15:28) [53]


> brother ©   (22.07.09 15:11) [52]

Одной буквы не хватает :)


 
brother ©   (2009-07-23 04:15) [54]

> Одной буквы не хватает :)

кому - что, видится)


 
Художник   (2009-07-23 06:49) [55]


> brother ©   (21.07.09 09:10) [43]


нее нада весь ряд 0..255 ;)


 
brother ©   (2009-07-23 08:16) [56]

затейник однако )



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.09.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.008 c
1-1216545812
big_yaric
2008-07-20 13:23
2009.09.27
Получение координат символа в TRichEdit


2-1248274425
dmitry_12_08_73
2009-07-22 18:53
2009.09.27
Загрузка клиентской области окна в TImage


15-1248807077
FF_FF
2009-07-28 22:51
2009.09.27
Парсер


15-1248515578
Palladin
2009-07-25 13:52
2009.09.27
Права группы на директорию, FreeBSD 7


4-1217571568
mistic
2008-08-01 10:19
2009.09.27
непростое контекстное меню





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский