Advertisement
Guest User

Untitled

a guest
Dec 21st, 2018
2,025
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 5.27 KB | None | 0 0
  1. program EVIL_Tetris_fast;
  2. uses crt;
  3. const
  4. tetra:array[0..6,0..3] of array[0..3,0..3] of byte =
  5. (
  6.  
  7. (
  8. ((0,1,0,0),
  9.  (0,1,0,0),
  10.  (0,1,0,0),
  11.  (0,1,0,0)),
  12. ((0,0,0,0),
  13.  (1,1,1,1),
  14.  (0,0,0,0),
  15.  (0,0,0,0)),
  16. ((0,1,0,0),
  17.  (0,1,0,0),
  18.  (0,1,0,0),
  19.  (0,1,0,0)),
  20. ((0,0,0,0),
  21.  (1,1,1,1),
  22.  (0,0,0,0),
  23.  (0,0,0,0))
  24. ),
  25.  
  26. (
  27. ((1,1,0,0),
  28.  (1,1,0,0),
  29.  (0,0,0,0),
  30.  (0,0,0,0)),
  31. ((1,1,0,0),
  32.  (1,1,0,0),
  33.  (0,0,0,0),
  34.  (0,0,0,0)),
  35. ((1,1,0,0),
  36.  (1,1,0,0),
  37.  (0,0,0,0),
  38.  (0,0,0,0)),
  39. ((1,1,0,0),
  40.  (1,1,0,0),
  41.  (0,0,0,0),
  42.  (0,0,0,0))
  43. ),
  44.  
  45. (
  46. ((0,1,1,0),
  47.  (0,1,0,0),
  48.  (0,1,0,0),
  49.  (0,0,0,0)),
  50. ((1,0,0,0),
  51.  (1,1,1,0),
  52.  (0,0,0,0),
  53.  (0,0,0,0)),
  54. ((0,1,0,0),
  55.  (0,1,0,0),
  56.  (1,1,0,0),
  57.  (0,0,0,0)),
  58. ((0,0,0,0),
  59.  (1,1,1,0),
  60.  (0,0,1,0),
  61.  (0,0,0,0))
  62. ),
  63.  
  64. (
  65. ((1,1,0,0),
  66.  (0,1,0,0),
  67.  (0,1,0,0),
  68.  (0,0,0,0)),
  69. ((0,0,0,0),
  70.  (1,1,1,0),
  71.  (1,0,0,0),
  72.  (0,0,0,0)),
  73. ((0,1,0,0),
  74.  (0,1,0,0),
  75.  (0,1,1,0),
  76.  (0,0,0,0)),
  77. ((0,0,1,0),
  78.  (1,1,1,0),
  79.  (0,0,0,0),
  80.  (0,0,0,0))
  81. ),
  82.  
  83. (
  84. ((1,0,0,0),
  85.  (1,1,0,0),
  86.  (0,1,0,0),
  87.  (0,0,0,0)),
  88. ((0,1,1,0),
  89.  (1,1,0,0),
  90.  (0,0,0,0),
  91.  (0,0,0,0)),
  92. ((1,0,0,0),
  93.  (1,1,0,0),
  94.  (0,1,0,0),
  95.  (0,0,0,0)),
  96. ((0,1,1,0),
  97.  (1,1,0,0),
  98.  (0,0,0,0),
  99.  (0,0,0,0))
  100. ),
  101.  
  102. (
  103. ((0,1,0,0),
  104.  (1,1,0,0),
  105.  (1,0,0,0),
  106.  (0,0,0,0)),
  107. ((1,1,0,0),
  108.  (0,1,1,0),
  109.  (0,0,0,0),
  110.  (0,0,0,0)),
  111. ((0,1,0,0),
  112.  (1,1,0,0),
  113.  (1,0,0,0),
  114.  (0,0,0,0)),
  115. ((1,1,0,0),
  116.  (0,1,1,0),
  117.  (0,0,0,0),
  118.  (0,0,0,0))
  119. ),
  120.  
  121. (
  122. ((0,1,0,0),
  123.  (1,1,1,0),
  124.  (0,0,0,0),
  125.  (0,0,0,0)),
  126. ((0,1,0,0),
  127.  (1,1,0,0),
  128.  (0,1,0,0),
  129.  (0,0,0,0)),
  130. ((1,1,1,0),
  131.  (0,1,0,0),
  132.  (0,0,0,0),
  133.  (0,0,0,0)),
  134. ((0,1,0,0),
  135.  (0,1,1,0),
  136.  (0,1,0,0),
  137.  (0,0,0,0))
  138. )
  139.  
  140. );
  141. var
  142.   tet:array[0..9, 0..19] of byte;
  143.   key:char;
  144.   fig,col,rot:byte;
  145.   score:longint;
  146.   x,y:integer;
  147. function intToStr(n:longint):string;
  148. var
  149.   s:string;
  150. begin
  151.   str(n,s);
  152.   intToStr:=s;
  153. end;
  154. procedure strOut(x,y,bg,fg:byte;s:String);
  155. var
  156.   i,cc:byte;
  157. begin
  158. for i:=1 to length(s) do
  159.   begin
  160.     cc:=ord(s[i]);
  161.     asm
  162.       mov ah, 02h
  163.       mov bh, 00h
  164.       mov dh, y
  165.       mov dl, x
  166.       add dl, i
  167.       sub dl, 1
  168.       int 10h
  169.       mov ah, 09h
  170.       mov al, cc
  171.       mov bh, bg
  172.       mov bl, fg
  173.       mov cx, 01h
  174.       int 10h
  175.     end;
  176.   end;
  177. end;
  178. procedure initProgramm;
  179. var
  180.   i,j:byte;
  181. begin
  182.   asm
  183.     mov ax, 13h
  184.     int 10h
  185.   end;
  186. end;
  187. procedure terminateProgramm;
  188. begin
  189.   asm
  190.     mov ax, 03h
  191.     int 10h
  192.   end;
  193. end;
  194. procedure putPixel(x,y:integer;c:byte);assembler;
  195. asm
  196.   xor ax, ax
  197.   xor si, si
  198.   mov ax, 0A000h
  199.   mov es, ax
  200.   mov ax, y
  201.   shl ax, 8
  202.   mov bx, y
  203.   shl bx, 6
  204.   add ax, bx
  205.   add ax, x
  206.   mov di, ax
  207.   xor ax, ax
  208.   mov ah, c
  209.   mov es:[di], ah
  210. end;
  211. procedure nextFig;
  212. begin
  213.   x := 5;
  214.   y := 1;
  215.   fig := Random(7);
  216.   rot := 0;
  217.   col := Random(15)+1;
  218. end;
  219. procedure initGame;
  220. var
  221.   i,j:byte;
  222. begin
  223.   key := #$FF;
  224.   nextFig;
  225.   for i:=0 to 9 do
  226.     for j:=0 to 19 do
  227.       tet[i,j] := 0;
  228. end;
  229.  
  230. procedure visTets;
  231. var
  232.   i,j,k,l:byte;
  233. begin
  234.   for i:=0 to 9 do
  235.      for j:=0 to 199 do
  236.      begin
  237.        if ((i - j+294) div 5 mod 2 = 0) then putPixel(i+99,j,15)
  238.                                         else putPixel(i+99,j,12);
  239.        if ((i + j + 1) div 5 mod 2 = 0) then putPixel(i+210,j,15)
  240.                                         else putPixel(i+210,j,12);
  241.      end;
  242.   for i:=0 to 9 do
  243.     for j:=0 to 19 do
  244.       for k:=0 to 8 do
  245.         for l:=0 to 8 do
  246.           putPixel(i*10+110+k,j*10+l,tet[i,j]);
  247.  
  248.   for i:=0 to 3 do
  249.     for j:=0 to 3 do
  250.     if (tetra[fig,rot][j,i]=1) then
  251.       for k:=0 to 8 do
  252.         for l:=0 to 8 do
  253.           putPixel((x-1+i)*10+110+k,(y-1+j)*10+l,col);
  254. end;
  255. procedure placeFig;
  256. var
  257.   i,j,k,l,c:byte;
  258. begin
  259.   for i:=0 to 3 do
  260.     for j:=0 to 3 do
  261.     if (tetra[fig,rot][j,i]=1) then
  262.       tet[x-1+i,y-1+j] := col;
  263.   for j := 0 to 19 do
  264.   begin
  265.     c:=0;
  266.     for i := 0 to 9 do
  267.       if tet[i,j] <>0 then c:=c+1;
  268.     if c = 10 then
  269.     begin
  270.       for k:=j downto 1 do
  271.         for l:=0 to 9 do
  272.           tet[l,k] := tet[l,k-1];
  273.        score:=score+1;
  274.     end;
  275.   end;
  276.  
  277. end;
  278. procedure movSideFig(d:integer);
  279. var
  280.   i,j,k,l:byte;
  281. begin
  282.   for i:=0 to 3 do
  283.     for j:=0 to 3 do
  284.       if (tetra[fig,rot][j,i]=1) then
  285.       if ((x-1+i+d<0) or (x-1+i+d>9) or (tet[x-1+i+d,y-1+j]<>0)) then d:=0;
  286.   x:=x+d;
  287. end;
  288. procedure movDownFig;
  289. var
  290.   i,j,k,l:byte;
  291. begin
  292.   for i:=0 to 3 do
  293.     for j:=0 to 3 do
  294.       if (tetra[fig,rot][j,i]=1) then
  295.       if ((y+j>19) or (tet[x-1+i,y+j]<>0)) then
  296.       begin
  297.         placeFig;
  298.         nextFig;
  299.         exit;
  300.       end;
  301.   y:=y+1;
  302. end;
  303. procedure rotFig;
  304. var
  305.   i,j,n:integer;
  306. begin
  307.   if (rot<3) then n:=rot+1 else n:=0;
  308.   for i:=0 to 3 do
  309.     for j:=0 to 3 do
  310.       if (tetra[fig,n][j,i]=1) then
  311.       if (tet[x-1+i,y-1+j]<>0)or
  312.       (x-1+i>9)or
  313.       (x-1+i<0)or
  314.       (y-1+j>19)
  315.        then exit;
  316.    rot:=n;
  317. end;
  318. begin
  319.   initProgramm;
  320.   initGame;
  321.   repeat
  322.     key := readKey;
  323.     if key = #0 then
  324.     key := readKey;
  325. {    key := readKey;}
  326. {    putPixel(10,10,15);}
  327.     if (key = #72) then rotFig;
  328.     if (key = #75) then movSideFig(-1);
  329.     if (key = #77) then movSideFig(+1);
  330.     movDownFig;
  331.     visTets;
  332.     strOut(0,0,0,10, 'Your Score: '+intToStr(score))
  333. {    if keyPressed then key := readKey
  334.                   else key := #$FF;}
  335.   until key=#27;
  336.   terminateProgramm;
  337. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement