codmatric.PAS

{* Матрица *}

Unit CODMATRIC;
Interface
Implementation
Begin
 writeln('Экран, по которому бегут сверху вниз зелёные символы');
End.

Program codmatric;

Uses codmatric.pas; {* Эту строку можно удалить *}
Uses crt; {* Вызов внешних функций *}
Procedure matrix;
Const {* Предопределенные *}
  ESC = #27;
  UP = #72;
  DOWN = #80;
Var {* Необходимые переменные *}
  i     : integer;
  j     : integer;
  c     : integer;
  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 {* Увеличиваем i от 1 до 25 с шагом 1 *}
    For j := 1 To 80 Do {* Цикл для j => [1 .. 80] *}
      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 pause100 Then
        Dec (pause, 100); {* 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.....