tetris.PAS

{* TETRIS *}

Unit TETRIS;
Interface
Implementation
Begin
 writeln('Игра TETRIS в текстовом режиме ');
End.

Program tetris;

Uses tetris.pas; {* Эту строку можно удалить *}
Uses crt; {* Подключаем внешние файлы *}
Var {* Необходимые переменные *}
  ss                        : integer;
  nn                        : integer;
  x                         : integer;
  y                         : integer;
  pus                       : integer;
  a                         : integer;
  b                         : integer;
  c                         : integer;
  d                         : integer;
  lin                       : integer;
  rlin                      : integer;
  st                        : Array[1..12] Of Array[1..22] Of integer;
Procedure k(x             : integer);
y                         : integer); {Рисуем квардратик}
If (ss = 3) And (st[x := 1;
  y] > 0) Then
pus := 1;
If ss = 4 Then
  st[x := 1;
y] := 1;
Procedure fig(x           : integer);
y                         : integer);
n                         : integer);
s                         : integer); {Рисуем фигуру}
Begin
If s = 3 Then
  pus := 0;
ss := s; {Поворот фигуры}
Begin
nn := nn - 1;
If nn = 15 Then
  nn := 19;
If nn = 13 Then
  nn := 15;
If nn = 11 Then
  nn := 13;
If nn = 7 Then
  nn := 11;
If nn = 3 Then
  nn := 7;
If nn = 1 Then
  nn := 3;
If nn = 0 Then
  nn := 1; {Очистка стакана}
Begin
For x := 1 To 12 Do{* Цикл для x => [1 .. 12] *}
  {Рисовать весь стакан}
Begin
For x := 1 To 12 Do{* Цикл для x => [1 .. 12] *}
  {Движение}
Var {* Объявление переменных *}
  i   : integer;
  key : char;
  Begin
For i := 1 To 10 Do {* Увеличиваем i от 1 до 10 с шагом 1 *}
  Begin
delay(d);
key := ' ';
If keypressed Then
  key := readkey; {* Ждем нажатия пользователя *}
If key = 'i' Then
  Begin
fig(x - 1, y, nn, 3);
If pus = 0 Then
  Begin
fig(x, y, nn, 0);
x := x - 1;
fig(x, y, nn, 1);
End;

End;
If key = 'p' Then
  Begin
fig(x + 1, y, nn, 3);
If pus = 0 Then
  Begin
fig(x, y, nn, 0);
x := x + 1;
fig(x, y, nn, 1);
End;

End;
If key = 'o' Then
  Begin
pov;
fig(x, y, nn, 3);
pov;
pov;
pov;
If pus = 0 Then
  Begin
fig(x, y, nn, 0);
pov;
fig(x, y, nn, 1);
End;

End;
If key = 'z' Then
  d := 5;
End;

End{Главная программа}
Begin
randomize;
clrscr; {* Очистка экрана *}
clrst;
risvesst;
lin := 0;
Repeat    nn := 1 + random(18);
  x := 6;
y := 20;
fig(x, y, nn, 3);
d := 70 - (lin * 5);
If pus = 0 Then
  Begin
Repeat       fig(x, y, nn, 1);
  dvig;
fig(x, y - 1, nn, 3);
If pus = 0 Then
  Begin
fig(x, y, nn, 0);
y := y - 1;
End;
Until pus = 1;
fig(x, y, nn, 4);
For y := 22 Downto 2 Do
  Begin
a := 0;
For x := 2 To 11 Do {* Увеличиваем x от 2 до 11 с шагом 1 *}
  a := a + st[x, y];
If a = 10 Then
  Begin
For b := y To 21 Do {* Увеличиваем b от y до 21 с шагом 1 *}
  For c := 2 To 11 Do {* Увеличиваем c от 2 до 11 с шагом 1 *}
    st[c, b] := st[c, b + 1];
lin := lin + 1;
gotoxy(2, 2);
writeln('Линии: ', lin)
End;

End;
risvesst;
pus := 0;
End;
Until pus = 1;
End....