Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Matrix 1.0 - MATRIX.PAS

MATRIX.PAS

Caricato da: Piero Tofy
Scarica il programma completo

  1. {Matrix 1.0 (C) by Piero Tofy 2004
  2.  http://www.pierotofy.it
  3.  
  4.  Questo software Š stato sviluppato (di nascosto) nelle ore di
  5.  "trattamento testi" nella scuola in cui vado. ;) }
  6.  
  7. program MATRIX;
  8. uses crt;
  9.  
  10. const
  11.      I_COLOR:integer = 2; { 2 = verde }
  12.      LINES:integer=15;
  13.      SCREENX:integer=80;
  14.      SCREENY:integer=25; { Potrebbe essere necessario modificare questo valore... }
  15.      MSG:String = 'Matrix 1.0 by Piero Tofy (C) 2004';
  16.  
  17. var
  18.    font,x,y:integer;
  19.    randomposition : array [0 .. 15] of integer; { Se modifichi LINES modifica questo... }
  20.    uniqueposition : array [0 .. 80] of integer;
  21.    linescount:integer;
  22.  
  23. function isunique(number : integer): boolean;
  24.      var count:integer;
  25.          value:boolean;
  26. begin
  27.      value:=true;
  28.      for count := 0 to SCREENX do if (uniqueposition[count]=number) then value:=false;
  29.      isunique:=value;
  30. end;
  31.  
  32. function getuniqueposition : integer;
  33. var
  34.    number,c:integer;
  35. begin
  36.      c:=0;
  37.      number:=random(SCREENX);
  38.      while(not isunique(number)) do
  39.      begin
  40.           inc(c);
  41.           number:=random(SCREENX);
  42.           if (c>SCREENX) then
  43.           begin
  44.              number:=0;
  45.              inc(linescount);
  46.              break;
  47.           end;
  48.      end;
  49.      uniqueposition[linescount]:=number;
  50.      inc(linescount);
  51.      getuniqueposition:=number;
  52. end;
  53.  
  54. procedure view_centered_text;
  55. var x,y,c:integer;
  56.  
  57. begin
  58.     x:=(SCREENX div 2)-(Length(MSG) div 2);
  59.     y:=SCREENY div 2;
  60.     GotoXY(x,y); { Esattamente al centro }
  61.     TextColor(I_COLOR);
  62.     write(' ' + MSG + ' ');
  63.     { Inserisce un rettangolo vuoto... }
  64.     for c:=0 to (Length(MSG)+2) do
  65.     begin
  66.          GotoXY(x+c,y-1); { Una linea sopra... }
  67.          write(' ');
  68.     end;
  69.     for c:=0 to (Length(MSG)+2) do
  70.     begin
  71.          GotoXY(x+c,y+1); { Una linea sotto... }
  72.          write(' ');
  73.     end;
  74. end;
  75. procedure init_random_positions;
  76. begin
  77.      { Memorizza N posizioni casuali... }
  78.      for x:=0 to LINES do randomposition[x]:= getuniqueposition;{random(SCREENX);}
  79. end;
  80. procedure write_random_char(x,y,color:integer);
  81. begin
  82.      TextColor(color);
  83.      GotoXY(x,y);
  84.      write(chr(random(128)+127));
  85. end;
  86.  
  87.  
  88. begin
  89.  
  90. ClrScr;
  91.  
  92. { Stampa la scritta al centro... }
  93. view_centered_text;
  94.  
  95. { Inizializza le posizioni casuali... }
  96. init_random_positions;
  97.  
  98. { Ciclo iterativo per stampare i caratteri a "cascata" }
  99. repeat
  100.       for y:=1 to SCREENY-1 do
  101.       begin
  102.            for x:=0 to LINES do
  103.            begin
  104.                 write_random_char(randomposition[x],y,I_COLOR);
  105.                 write_random_char(randomposition[x],y+1,7); { 7 = bianco }
  106.            end;
  107.            if (y in [(SCREENY div 2)-1 .. (SCREENY div 2)+1]) then view_centered_text;
  108.            Delay(50);
  109.       end;
  110.  
  111.       { Scrive l'ultimo carattere in verde... }
  112.       for x:=0 to LINES do write_random_char(randomposition[x],SCREENY,I_COLOR);
  113.  
  114.       { Controlla se Š tempo di ripulire lo schermo... }
  115.       if linescount>=SCREENX then
  116.       begin
  117.          { Pulisci e azzera alcune variabili... }
  118.          ClrScr;
  119.          linescount:=0;
  120.          for x:=0 to SCREENX do uniqueposition[x]:=0;
  121.       end;
  122.  
  123.       view_centered_text;
  124.       init_random_positions;
  125.  
  126. until keypressed;
  127.  
  128. end.