Nickolay.info. Алгоритмы. Код матрицы

Помните, в ставшем культовом фильме герои смотрят на экран, по которому бегут сверху вниз зелёные символы? Не думаю, что в будущем будут такие мониторы и такой способ визуализации... если уж говорить абстрактно, для визуализации вообще никаких "мониторов" не нужно, достаточно самого пространства.

Вторая посылка - на классическом Паскале тоже давно никто не пишет, хотя многие учатся. Так что давайте "мёртвым о мёртвом" сделаем небольшой "код матрицы" (было немного времени - третья посылка)...

uses crt;

procedure matrix;
const ESC=#27; UP=#72; DOWN=#80;
var
 i,j,c,sp:integer;
 pause:longint;
 scr:array [1..25,1..80] of char;
 Ch:char;
begin
 window (1,1,80,25);
 clrscr;
 directvideo:=true;
 textcolor (green);
 for i:=1 to 25 do for j:=1 to 80 do scr[i,j]:=#0;
 randomize;
 pause:=1000;
 repeat
  repeat
   c:=242+random(14);
   sp:=random(3);
   if sp=0 then c:=32;
   j:=2+random(79);
   for i:=24 downto 2 do begin
    scr[i,j]:=scr[i-1,j];
    gotoxy(j,i);
    write (scr[i-1,j]);
   end;
   gotoxy (j,1);
   scr[1,j]:=Chr(c);
   write (scr[1,j]);
   delay (pause);
  until keypressed;
  Ch:=ReadKey;
  case Ch of
   #0: begin
    Ch:=ReadKey;
    case Ch of
     UP:    if pause<MaxLongInt-100 then Inc(pause,100);
     DOWN:  if pause>100 then Dec (pause,100);
    end;
   end;
   ESC: Exit;
  end;
 until false;
 clrscr;
 textcolor(LightGray);
end;

begin
 clrscr;
 writeln (
  'MatriX! :-)'+#13+#10+
  #24+'   - slow/медленнее'+#13+#10+
  #25+'   - fast/быстрее'+#13+#10+
  'Esc - exit/выход'+#13+#10+
  'Press a key/Нажмите клавишу');
 reset (input);
 repeat until keypressed;
 matrix;
end.

При переносе этого файла в Турбо Паскаль нужно перекодировать его из Windows в DOS. Если не знаете, как это сделать, достаточно перебить русские символы в последних строках программы.

Очевидные изменения - необязательно использовать только символы с кодами 242 и выше (просто они в наборе ASCII-кодов самые "матричные"), необязательно вызывать криво работающую стандартную процедуру delay (взять код нормальной процедуры можно отсюда), легко найти и код для полного убирания курсора с экрана (я не стал его добавлять, чтоб обойтись только стандартным Паскалем).

Заставку на старте программы тоже можно не показывать. Получится примерно следующее (окно консоли здесь немного сжато по горизонтали, откуда полоса прокрутки).

Матрица

А вот эта старая программка понемногу прокручивает в консоли 80*25 столь же "матричные", но цветные символы, иногда перемежая их ключевыми словами "Паскаля". Использовалась как наглядная иллюстрация к студенческим программам, где лишь изредка в потоке "козябликов" мелькает осмысленный фрагмент :) Вот только фильм тогда ещё не вышел :)

uses crt;
const keys=18;
 key:array [1..keys] of string = (
 'begin', 'end', 'if', 'then', 'else','var','const','for','while','do',
 'repeat','until','real','integer','exp(x*ln(a))','sin(x)/cos(x)','c:=a;a:=b;b:=c;','program'
);
var c,x,y,ch,n,l:integer;
begin
 clrscr;
 randomize;
 repeat
  c:=1+random(15);
  x:=1+random(80);
  y:=1+random(25);
  gotoxy (x,y);
  textcolor (c);
  ch:=242+random(14);
  if random(4)<>0 then ch:=32;
  if random(100)=0 then begin
   n:=1+random(keys);
   l:=length(key[keys]);
   if x+l<80 then write (key[n]);
  end
  else write (chr(ch));
  delay(100);
 until keypressed;
end.

Рейтинг@Mail.ru

вверх гостевая; E-mail