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

  1. PROCEDURE ShowLines;
  2.  
  3. VAR S,S2 : String;
  4.  
  5. BEGIN
  6.   SetFillStyle(SolidFill,0);
  7.   Bar(300,460,550,478);
  8.   Str(Lines:4,S2);
  9.   S:='Lines : ';
  10.   S:=S+S2+'   Level: ';
  11.   Str(Level:4,S2);
  12.   S:=S+S2;
  13.   OutTextXY(300,460,S);
  14. END;
  15.  
  16. PROCEDURE ShowGameMode;
  17.  
  18. BEGIN
  19.    SetFillStyle(SolidFill,0);
  20.    Bar(20,440,154,458);
  21.    IF NrFigures<>7 THEN
  22.     OutTextXY(20,440,'GameMode: Extended')
  23.    ELSE
  24.     OutTextXY(20,440,'GameMode: Standard')
  25. END;
  26.  
  27. PROCEDURE CreateFrame;
  28. {Used once to print the "background" of the screen (not the background grid,
  29. but the text, and the cadre around the playfield)}
  30.  
  31. BEGIN
  32.  setbkcolor(black);
  33.  setviewport(0,0,getmaxx,getmaxy,clipoff);
  34.  clearviewport;
  35.  SetTextStyle(0,Horizdir,2);
  36.  OuttextXY(30,50,'FPCTris v0.08, (C) by Marco v/d Voort.');
  37.  SetTextStyle(0,Horizdir,1);
  38.  OutTextXY(300,HelpY-30,'A demo of the FPC Graph unit');
  39.  
  40.  VLine(DisplGrX-1,DisplGrY,DisplGrY+DisplGrScale*TheHeight);
  41.  VLine(DisplGrX+TheWidth*DisplGrScale,DisplGrY,DisplGrY+DisplGrScale*TheHeight);
  42.  HLine(DisplGrX-1,DisplGrX+TheWidth*DisplGrScale,DisplGrY+DisplGrScale*TheHeight);
  43.  
  44.  {Clean below area}
  45.  ShowGameMode;
  46.  OutTextXY(300,HelpY,'Arrow left/right to move, down to drop');
  47.  OutTextXY(300,HelpY+LineDistY,'arrow-up to rotate the piece');
  48.  OutTextXY(300,HelpY+2*LineDistY,'"P" to pause');
  49.  OutTextXY(300,HelpY+3*LineDistY,'"E" Mode (standard or extended)');
  50.  OutTextXY(300,HelpY+5*LineDistY,'Escape to quit');
  51.  OutTextXY(300,HelpY+20+6*LineDistY,'The Highscores');
  52.  ShowHighScore;
  53. END;
  54.  
  55. PROCEDURE DisplMainField;
  56. {Graph mode version. Always caches.}
  57.  
  58.  
  59. VAR Row,Column,Difference,StartRow,EndRow,
  60.     L : LONGINT;
  61. {    LastCol : LONGINT; }
  62.  
  63. BEGIN
  64.  FOR Row:=0 TO TheHeight-1 DO
  65.   BEGIN
  66.    IF BackField[Row]<>MainField[Row] THEN
  67.     BEGIN
  68.      StartRow:=0;
  69.      EndRow:=TheWidth-1;
  70.      Difference:=MainField[Row] XOR BackField[Row];     {Calc differences in line}
  71.      WHILE ((Difference AND AndTable[StartRow])=0) AND
  72.         (StartRow<(TheWidth-1)) DO
  73.       INC(StartRow);
  74.      WHILE ((Difference AND AndTable[EndRow])=0) AND (EndRow>0) DO
  75.       DEC(EndRow);
  76.      FOR Column:=StartRow To EndRow DO
  77.       BEGIN
  78.        IF (MainField[Row] AND AndTable[Column])<>0 THEN
  79.        BEGIN
  80.          L:=ColorField[Row,Column];
  81.          IF L=0 THEN
  82.           L:=CurrentCol;
  83.          IF L<>255 THEN
  84.           BEGIN
  85.            L:=L AND 15;
  86.            SetFillStyle(SolidFill,L);
  87.            Bar((Column)*DisplGrScale+DisplGrX,DisplGrY+DisplGrScale*Row,(Column+1)*DisplGrScale-1+DisplGrX,DisplGrY+DisplGrScale*(Row)+DisplGrScale-1);
  88.           END;
  89.         END
  90.        ELSE
  91.         BEGIN
  92.            SetFillStyle(SolidFill,0);
  93.            Bar((Column)*DisplGrScale+DisplGrX,DisplGrY+DisplGrScale*Row,(Column+1)*DisplGrScale-1+DisplGrX,DisplGrY+DisplGrScale*(Row)+DisplGrScale-1);
  94.         END
  95.       END;
  96.    END;
  97.   END;
  98.   BackField:=MainField;     {Keep a copy of the screen for faster updates
  99.                               of terminals, for next DisplMainField.}
  100. END;
  101.  
  102. PROCEDURE ShowNextFigure(ThisFig:LONGINT);
  103.  
  104. CONST NextFigX=10;
  105.       NextFigY=120;
  106.       NextFigDim=16;
  107.  
  108. VAR I,J,K  : LONGINT;
  109.  
  110. BEGIN
  111.  IF NOT nonupdatemode THEN
  112.   BEGIN
  113.    FOR I:=0 TO 4 DO
  114.     BEGIN
  115.      K:=Figures[ThisFig][FigureNr] AND MagicMasks[I];
  116.      IF K=0 THEN
  117.       BEGIN
  118.        SetFillStyle(SolidFill,0);
  119.        Bar(NextFigX,NextFigY+I*NextFigDim,NextFigX+5*NextFigDim-1,NextFigY+(I+1)*NextFigDim);
  120.       END
  121.      ELSE
  122.       BEGIN
  123.        FOR J:=0 TO 5 DO
  124.          IF (K And AndTable[J+5*I])=0 THEN
  125.           BEGIN
  126.            SetFillStyle(SolidFill,0);
  127.            Bar(NextFigX+J*NextFigDim,NextFigY+I*NextFigDim,NextFigX++(J+1)*NextFigDim,NextFigY+(I+1)*NextFigDim);
  128.           END
  129.          ELSE
  130.           BEGIN
  131.            SetFillStyle(SolidFill,1);
  132.            Bar(NextFigX+J*NextFigDim,NextFigY+I*NextFigDim,NextFigX++(J+1)*NextFigDim,NextFigY+(I+1)*NextFigDim);
  133.           END;
  134.        END;
  135.     END;
  136.   END;
  137. END;
  138.  
  139. PROCEDURE FixScores;
  140.  
  141. VAR S : String;
  142.  
  143. BEGIN
  144.    Str(Score:5,S);
  145.    SetFillStyle(SolidFill,0);
  146.    Bar(300,440,450,458);
  147.    OutTextXY(300,440,'Score :'+S);
  148. END;
  149.