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 >
Wrap
Text File
|
2000-09-11
|
4KB
|
149 lines
PROCEDURE ShowLines;
VAR S,S2 : String;
BEGIN
SetFillStyle(SolidFill,0);
Bar(300,460,550,478);
Str(Lines:4,S2);
S:='Lines : ';
S:=S+S2+' Level: ';
Str(Level:4,S2);
S:=S+S2;
OutTextXY(300,460,S);
END;
PROCEDURE ShowGameMode;
BEGIN
SetFillStyle(SolidFill,0);
Bar(20,440,154,458);
IF NrFigures<>7 THEN
OutTextXY(20,440,'GameMode: Extended')
ELSE
OutTextXY(20,440,'GameMode: Standard')
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)}
BEGIN
setbkcolor(black);
setviewport(0,0,getmaxx,getmaxy,clipoff);
clearviewport;
SetTextStyle(0,Horizdir,2);
OuttextXY(30,50,'FPCTris v0.08, (C) by Marco v/d Voort.');
SetTextStyle(0,Horizdir,1);
OutTextXY(300,HelpY-30,'A demo of the FPC Graph unit');
VLine(DisplGrX-1,DisplGrY,DisplGrY+DisplGrScale*TheHeight);
VLine(DisplGrX+TheWidth*DisplGrScale,DisplGrY,DisplGrY+DisplGrScale*TheHeight);
HLine(DisplGrX-1,DisplGrX+TheWidth*DisplGrScale,DisplGrY+DisplGrScale*TheHeight);
{Clean below area}
ShowGameMode;
OutTextXY(300,HelpY,'Arrow left/right to move, down to drop');
OutTextXY(300,HelpY+LineDistY,'arrow-up to rotate the piece');
OutTextXY(300,HelpY+2*LineDistY,'"P" to pause');
OutTextXY(300,HelpY+3*LineDistY,'"E" Mode (standard or extended)');
OutTextXY(300,HelpY+5*LineDistY,'Escape to quit');
OutTextXY(300,HelpY+20+6*LineDistY,'The Highscores');
ShowHighScore;
END;
PROCEDURE DisplMainField;
{Graph mode version. Always caches.}
VAR Row,Column,Difference,StartRow,EndRow,
L : LONGINT;
{ LastCol : LONGINT; }
BEGIN
FOR Row:=0 TO TheHeight-1 DO
BEGIN
IF BackField[Row]<>MainField[Row] THEN
BEGIN
StartRow:=0;
EndRow:=TheWidth-1;
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);
FOR Column:=StartRow To EndRow DO
BEGIN
IF (MainField[Row] AND AndTable[Column])<>0 THEN
BEGIN
L:=ColorField[Row,Column];
IF L=0 THEN
L:=CurrentCol;
IF L<>255 THEN
BEGIN
L:=L AND 15;
SetFillStyle(SolidFill,L);
Bar((Column)*DisplGrScale+DisplGrX,DisplGrY+DisplGrScale*Row,(Column+1)*DisplGrScale-1+DisplGrX,DisplGrY+DisplGrScale*(Row)+DisplGrScale-1);
END;
END
ELSE
BEGIN
SetFillStyle(SolidFill,0);
Bar((Column)*DisplGrScale+DisplGrX,DisplGrY+DisplGrScale*Row,(Column+1)*DisplGrScale-1+DisplGrX,DisplGrY+DisplGrScale*(Row)+DisplGrScale-1);
END
END;
END;
END;
BackField:=MainField; {Keep a copy of the screen for faster updates
of terminals, for next DisplMainField.}
END;
PROCEDURE ShowNextFigure(ThisFig:LONGINT);
CONST NextFigX=10;
NextFigY=120;
NextFigDim=16;
VAR I,J,K : LONGINT;
BEGIN
IF NOT nonupdatemode THEN
BEGIN
FOR I:=0 TO 4 DO
BEGIN
K:=Figures[ThisFig][FigureNr] AND MagicMasks[I];
IF K=0 THEN
BEGIN
SetFillStyle(SolidFill,0);
Bar(NextFigX,NextFigY+I*NextFigDim,NextFigX+5*NextFigDim-1,NextFigY+(I+1)*NextFigDim);
END
ELSE
BEGIN
FOR J:=0 TO 5 DO
IF (K And AndTable[J+5*I])=0 THEN
BEGIN
SetFillStyle(SolidFill,0);
Bar(NextFigX+J*NextFigDim,NextFigY+I*NextFigDim,NextFigX++(J+1)*NextFigDim,NextFigY+(I+1)*NextFigDim);
END
ELSE
BEGIN
SetFillStyle(SolidFill,1);
Bar(NextFigX+J*NextFigDim,NextFigY+I*NextFigDim,NextFigX++(J+1)*NextFigDim,NextFigY+(I+1)*NextFigDim);
END;
END;
END;
END;
END;
PROCEDURE FixScores;
VAR S : String;
BEGIN
Str(Score:5,S);
SetFillStyle(SolidFill,0);
Bar(300,440,450,458);
OutTextXY(300,440,'Score :'+S);
END;