home *** CD-ROM | disk | FTP | other *** search
- PROCEDURE ShowLines;
-
- BEGIN
- IF NOT nonupdatemode THEN
- BEGIN
- IF UseColor THEN
- TextColor(Yellow);
- GotoXY(40,16); Write('Lines: ',Lines:4,' Level: ',Level);
- END;
- END;
-
- PROCEDURE ShowGameMode;
-
- BEGIN
- IF NOT nonupdatemode THEN
- BEGIN
- GotoXY(61,13);
- IF NrFigures<>7 THEN
- write('Extended')
- ELSE
- write('Standard');
- END;
- END;
-
-
- PROCEDURE CreateFrame;
- {Used once to print the "background" of the screen (not the background grid,
- but the text, and the cadre around the playfield}
-
- VAR I : LONGINT;
-
- BEGIN
- SetDefaultColor;
- GotoXY(40,4);
- Write('FPCTris v0.08, (C) by Marco van de Voort');
- GotoXY(40,6);
- Write('A demo of the FPC Crt unit, and');
- GotoXY(40,7);
- Write(' its portability');
- FOR I:=9 TO 24 DO
- BEGIN
- GotoXY(40,I);
- Write(' ':38);
- END;
- ShowGameMode;
- IF nonupdatemode THEN
- BEGIN
- IF HelpMode THEN
- BEGIN
- GotoXY(40,9);
- Write('Arrow left/right to move, down to drop');
- GotoXY(40,10);
- Write('arrow-up to rotate the piece');
- GotoXY(40,11);
- Write('"P" to pause');
- GotoXY(40,12);
- Write('"E" Mode (standard or extended)');
- GotoXY(40,13);
- Write('"C" switches between color/mono mode');
- GotoXY(40,14);
- Write('Escape to quit');
- GotoXY(40,15);
- Write('"S" to show the highscores');
- {$IFDEF Linux}
- GotoXY(40,16);
- Write('"i" try to switch to IBM character set');
- {$ENDIF}
- END
- ELSE
- ShowHighScore;
- END
- ELSE
- BEGIN
- GotoXY(40,9);
- Write('"h" to display the helpscreen');
- END;
-
- FOR I :=0 TO TheHeight-1 DO
- BEGIN
- GotoXY(PosXField-1 ,PosYField+I); Write(Style[2]);
- GotoXY(PosXField+2*TheWidth ,PosYField+I); Write(Style[2]);
- END;
- GotoXY(PosXField-1,PosYField+TheHeight);
- Write(Style[3]);
- FOR I:=0 TO (2*TheWidth)-1 DO
- Write(Style[1]);
- Write(Style[4]);
- END;
- PROCEDURE DisplMainFieldMono;
- {Displays the grid with a simple buffering algoritm, depending on
- conditional DoubleBuffer}
-
- VAR Row,Column,Difference,StartRow,EndRow : LONGINT;
- S : String;
-
- BEGIN
- FOR Row:=0 TO TheHeight-1 DO
- BEGIN
- {$IFDEF DoubleCache}
- IF BackField[Row]<>MainField[Row] THEN
- BEGIN
- {$ENDIF}
- FillChar(S[1],2*TheWidth,#32);
- StartRow:=0;
- EndRow:=TheWidth-1;
- {$IFDEF DoubleCache}
- Difference:=MainField[Row] XOR BackField[Row]; {Calc differences in line}
- {Search for first and last bit changed}
- WHILE ((Difference AND AndTable[StartRow])=0) AND (StartRow<(TheWidth-1)) DO
- INC(StartRow);
- WHILE ((Difference AND AndTable[EndRow])=0) AND (EndRow>0) DO
- DEC(EndRow);
- {$ENDIF}
- {Prepare a string}
- GotoXY(PosXField+2*StartRow,PosYField+Row);
- S[0]:=CHR(2*(EndRow-StartRow+1));
- FOR Column:=0 TO EndRow-StartRow DO
- BEGIN
- IF (MainField[Row] AND AndTable[StartRow+Column])<>0 THEN
- BEGIN
- S[Column*2+1]:=Style[5];
- S[Column*2+2]:=Style[5];
- END;
- END;
- {Write the string}
- Write(S);
- {$IFDEF DoubleCache}
- END;
- {$ENDIF}
- END;
- {$IFDEF DoubleCache}
- BackField:=MainField; {Keep a copy of the screen for faster updates
- of terminals, for next DisplMainField.}
- {$ENDIF}
- END;
-
- PROCEDURE DisplMainFieldColor;
- {Same as above, but also use ColorField to output colors,
- the buffering is the same, but the colors make it less efficient.}
-
- VAR Row,Column,Difference,StartRow,EndRow,
- L : LONGINT;
- S : String;
- LastCol : LONGINT;
-
- BEGIN
- LastCol:=255;
- FOR Row:=0 TO TheHeight-1 DO
- BEGIN
- {$IFDEF DoubleCache}
- IF BackField[Row]<>MainField[Row] THEN
- BEGIN
- {$ENDIF}
- FillChar(S[1],2*TheWidth,#32);
- StartRow:=0;
- EndRow:=TheWidth-1;
- {$IFDEF DoubleCache}
- Difference:=MainField[Row] XOR BackField[Row]; {Calc differences in line}
- WHILE ((Difference AND AndTable[StartRow])=0) AND (StartRow<(TheWidth-1)) DO
- INC(StartRow);
- WHILE ((Difference AND AndTable[EndRow])=0) AND (EndRow>0) DO
- DEC(EndRow);
- {$ENDIF}
- GotoXY(PosXField+2*StartRow,PosYField+Row);
- FOR Column:=0 TO EndRow-StartRow DO
- BEGIN
- IF (MainField[Row] AND AndTable[StartRow+Column])<>0 THEN
- BEGIN
- L:=ColorField[Row,StartRow+Column];
- IF L=0 THEN
- L:=CurrentCol;
- IF L<>LastCol THEN
- BEGIN
- TextColor(L);
- Write(Style[5],Style[5]);
- END;
- END
- ELSE
- Write(' ');
- END;
- {$IFDEF DoubleCache}
- END;
- {$ENDIF}
- END;
- {$IFDEF DoubleCache}
- BackField:=MainField; {Keep a copy of the screen for faster updates
- of terminals, for next DisplMainField.}
- {$ENDIF}
- END;
-
- PROCEDURE DisplMainField;
- {Main redraw routine; Check in what mode we are and call appropriate routine}
-
- BEGIN
- IF UseColor THEN
- DisplMainFieldColor
- ELSE
- DisplMainFieldMono;
- END;
-
-
- PROCEDURE ShowNextFigure(ThisFig:LONGINT);
-
- VAR I,J,K : LONGINT;
- S : String[8];
-
- BEGIN
- IF UseColor THEN
- TextColor(White);
- IF NOT nonupdatemode THEN
- BEGIN
- FOR I:=0 TO 4 DO
- BEGIN
- FillChar(S,9,' ');
- S[0]:=#8;
- K:=Figures[ThisFig][FigureNr];
- IF (I+TopY)<=TheHeight THEN
- FOR J:=0 TO 4 DO
- BEGIN
- IF (K AND AndTable[J+5*I])<>0 THEN
- BEGIN
- S[J*2+1]:=Style[5];
- S[J*2+2]:=Style[5];
- END
- END;
- GotoXY(50,11+I); Write(S);
- END;
- END;
- END;
-
- PROCEDURE FixScores;
-
- BEGIN
- IF UseColor THEN
- SetDefaultColor;
- GotoXY(40,18);
- Write('Score :',Score);
- END;
-