home *** CD-ROM | disk | FTP | other *** search
/ PC World 2003 February / PCWorld_2003-02_cd.bin / Software / Topware / devpascal / examples / Tetris / ftristxt.inc < prev    next >
Text File  |  2000-09-11  |  5KB  |  239 lines

  1. PROCEDURE ShowLines;
  2.  
  3. BEGIN
  4.  IF NOT nonupdatemode THEN
  5.   BEGIN
  6.    IF UseColor THEN
  7.     TextColor(Yellow);
  8.    GotoXY(40,16); Write('Lines: ',Lines:4,'    Level: ',Level);
  9.   END;
  10. END;
  11.  
  12. PROCEDURE ShowGameMode;
  13.  
  14. BEGIN
  15.  IF NOT nonupdatemode THEN
  16.   BEGIN
  17.    GotoXY(61,13);
  18.    IF NrFigures<>7 THEN
  19.     write('Extended')
  20.    ELSE
  21.     write('Standard');
  22.   END;
  23. END;
  24.  
  25.  
  26. PROCEDURE CreateFrame;
  27. {Used once to print the "background" of the screen (not the background grid,
  28. but the text, and the cadre around the playfield}
  29.  
  30. VAR I : LONGINT;
  31.  
  32. BEGIN
  33.  SetDefaultColor;
  34.  GotoXY(40,4);
  35.  Write('FPCTris v0.08, (C) by Marco van de Voort');
  36.  GotoXY(40,6);
  37.  Write('A demo of the FPC Crt unit, and');
  38.  GotoXY(40,7);
  39.  Write(' its portability');
  40.  FOR I:=9 TO 24 DO
  41.   BEGIN
  42.    GotoXY(40,I);
  43.    Write(' ':38);
  44.   END;
  45.  ShowGameMode;
  46.  IF nonupdatemode THEN
  47.   BEGIN
  48.    IF HelpMode THEN
  49.     BEGIN
  50.    GotoXY(40,9);
  51.    Write('Arrow left/right to move, down to drop');
  52.    GotoXY(40,10);
  53.    Write('arrow-up to rotate the piece');
  54.    GotoXY(40,11);
  55.    Write('"P" to pause');
  56.    GotoXY(40,12);
  57.    Write('"E" Mode (standard or extended)');
  58.    GotoXY(40,13);
  59.    Write('"C" switches between color/mono mode');
  60.    GotoXY(40,14);
  61.    Write('Escape to quit');
  62.    GotoXY(40,15);
  63.    Write('"S" to show the highscores');
  64.    {$IFDEF Linux}
  65.    GotoXY(40,16);
  66.    Write('"i" try to switch to IBM character set');
  67.    {$ENDIF}
  68.    END
  69.    ELSE
  70.     ShowHighScore;
  71.   END
  72.  ELSE
  73.   BEGIN
  74.    GotoXY(40,9);
  75.    Write('"h" to display the helpscreen');
  76.   END;
  77.  
  78.  FOR I :=0 TO TheHeight-1 DO
  79.   BEGIN
  80.    GotoXY(PosXField-1 ,PosYField+I); Write(Style[2]);
  81.    GotoXY(PosXField+2*TheWidth ,PosYField+I); Write(Style[2]);
  82.   END;
  83.  GotoXY(PosXField-1,PosYField+TheHeight);
  84.  Write(Style[3]);
  85.  FOR I:=0 TO (2*TheWidth)-1 DO
  86.   Write(Style[1]);
  87.  Write(Style[4]);
  88. END;
  89. PROCEDURE DisplMainFieldMono;
  90. {Displays the grid with a simple buffering algoritm, depending on
  91. conditional DoubleBuffer}
  92.  
  93. VAR Row,Column,Difference,StartRow,EndRow : LONGINT;
  94.     S : String;
  95.  
  96. BEGIN
  97.  FOR Row:=0 TO TheHeight-1 DO
  98.   BEGIN
  99.    {$IFDEF DoubleCache}
  100.     IF BackField[Row]<>MainField[Row] THEN
  101.      BEGIN
  102.     {$ENDIF}
  103.    FillChar(S[1],2*TheWidth,#32);
  104.    StartRow:=0;
  105.    EndRow:=TheWidth-1;
  106.    {$IFDEF DoubleCache}
  107.     Difference:=MainField[Row] XOR BackField[Row];     {Calc differences in line}
  108.     {Search for first and last bit changed}
  109.     WHILE ((Difference AND AndTable[StartRow])=0) AND (StartRow<(TheWidth-1)) DO
  110.      INC(StartRow);
  111.     WHILE ((Difference AND AndTable[EndRow])=0) AND (EndRow>0) DO
  112.      DEC(EndRow);
  113.    {$ENDIF}
  114.    {Prepare a string}
  115.    GotoXY(PosXField+2*StartRow,PosYField+Row);
  116.    S[0]:=CHR(2*(EndRow-StartRow+1));
  117.    FOR Column:=0 TO EndRow-StartRow DO
  118.     BEGIN
  119.      IF (MainField[Row] AND AndTable[StartRow+Column])<>0 THEN
  120.       BEGIN
  121.        S[Column*2+1]:=Style[5];
  122.        S[Column*2+2]:=Style[5];
  123.       END;
  124.     END;
  125.    {Write the string}
  126.    Write(S);
  127.    {$IFDEF DoubleCache}
  128.     END;
  129.    {$ENDIF}
  130.   END;
  131.  {$IFDEF DoubleCache}
  132.   BackField:=MainField;     {Keep a copy of the screen for faster updates
  133.                               of terminals, for next DisplMainField.}
  134.  {$ENDIF}
  135. END;
  136.  
  137. PROCEDURE DisplMainFieldColor;
  138. {Same as above, but also use ColorField to output colors,
  139.  the buffering is the same, but the colors make it less efficient.}
  140.  
  141. VAR Row,Column,Difference,StartRow,EndRow,
  142.     L : LONGINT;
  143.     S   : String;
  144.     LastCol : LONGINT;
  145.  
  146. BEGIN
  147.  LastCol:=255;
  148.  FOR Row:=0 TO TheHeight-1 DO
  149.   BEGIN
  150.    {$IFDEF DoubleCache}
  151.     IF BackField[Row]<>MainField[Row] THEN
  152.      BEGIN
  153.     {$ENDIF}
  154.    FillChar(S[1],2*TheWidth,#32);
  155.    StartRow:=0;
  156.    EndRow:=TheWidth-1;
  157.    {$IFDEF DoubleCache}
  158.     Difference:=MainField[Row] XOR BackField[Row];     {Calc differences in line}
  159.     WHILE ((Difference AND AndTable[StartRow])=0) AND (StartRow<(TheWidth-1)) DO
  160.      INC(StartRow);
  161.     WHILE ((Difference AND AndTable[EndRow])=0) AND (EndRow>0) DO
  162.      DEC(EndRow);
  163.    {$ENDIF}
  164.    GotoXY(PosXField+2*StartRow,PosYField+Row);
  165.    FOR Column:=0 TO EndRow-StartRow DO
  166.     BEGIN
  167.      IF (MainField[Row] AND AndTable[StartRow+Column])<>0 THEN
  168.       BEGIN
  169.        L:=ColorField[Row,StartRow+Column];
  170.        IF L=0 THEN
  171.         L:=CurrentCol;
  172.        IF L<>LastCol THEN
  173.         BEGIN
  174.          TextColor(L);
  175.          Write(Style[5],Style[5]);
  176.         END;
  177.       END
  178.      ELSE
  179.       Write('  ');
  180.     END;
  181.    {$IFDEF DoubleCache}
  182.     END;
  183.    {$ENDIF}
  184.   END;
  185.  {$IFDEF DoubleCache}
  186.   BackField:=MainField;     {Keep a copy of the screen for faster updates
  187.                               of terminals, for next DisplMainField.}
  188.  {$ENDIF}
  189. END;
  190.  
  191. PROCEDURE DisplMainField;
  192. {Main redraw routine; Check in what mode we are and call appropriate routine}
  193.  
  194. BEGIN
  195.    IF UseColor THEN
  196.     DisplMainFieldColor
  197.    ELSE
  198.     DisplMainFieldMono;
  199. END;
  200.  
  201.  
  202. PROCEDURE ShowNextFigure(ThisFig:LONGINT);
  203.  
  204. VAR I,J,K  : LONGINT;
  205.     S      : String[8];
  206.  
  207. BEGIN
  208.  IF UseColor THEN
  209.   TextColor(White);
  210.  IF NOT nonupdatemode THEN
  211.   BEGIN
  212.    FOR I:=0 TO 4 DO
  213.     BEGIN
  214.      FillChar(S,9,' ');
  215.      S[0]:=#8;
  216.      K:=Figures[ThisFig][FigureNr];
  217.      IF (I+TopY)<=TheHeight THEN
  218.       FOR J:=0 TO 4 DO
  219.        BEGIN
  220.         IF (K AND AndTable[J+5*I])<>0 THEN
  221.          BEGIN
  222.           S[J*2+1]:=Style[5];
  223.           S[J*2+2]:=Style[5];
  224.          END
  225.        END;
  226.      GotoXY(50,11+I); Write(S);
  227.     END;
  228.   END;
  229. END;
  230.  
  231. PROCEDURE FixScores;
  232.  
  233. BEGIN
  234.    IF UseColor THEN
  235.     SetDefaultColor;
  236.    GotoXY(40,18);
  237.    Write('Score :',Score);
  238. END;
  239.