帕斯卡,有游戏吗?很紧急。
{$ifdef UseGraphics}
{$ifdef Win32}
{$define Win32Graph}
{$apptype GUI}
{$endif}
{$endif}
使用
{$ifdef Win32}
Windows,
{$endif}
{$ifdef Win32Graph}
WinCrt,
{$else}
Crt,
{$endif}
Dos,
{$IFDEF UseGraphics}
图表,
{$INFO GRAPH}
{$ENDIF}
游戏单元;
常数
{$IFDEF UseGraphics}
grfield x = 10;{X操场的左上方}
GrFieldY = 70{Y操场的左上方}
ScalerX = 22{ ScalerX x Scaler y点
必须约为正方形}
ScalerY = 20
{$ENDIF}
FieldX = 10;{左上操场
正方形坐标(文本模式)}
FieldY = 3;{左上操场坐标}
PlayFieldXDimension = 20{运动场的尺寸}
playfield dy dimension = 15;
{$IFDEF UseGraphics}
row displ = 15;
MenuX = 480
MenuY = 120;
grNewGameLine = '新游戏';
grHelpLine = ' HELP
grEndGame = '结束游戏';
{$ENDIF}
{用过的颜色。Colors,PlayField,playfieldy dimension *(playfieldx dimension-X-1));
INC(J);
结束;
结束;
如果J & lt& gt那么0
FillChar(PlayField,J * PlayFieldYDimension,# 3);
INC(Score,CubesToScore);
ShowScore
结束;
结束;
过程构建屏幕;
{建立屏幕的一些程序}
var s:字符串;
开始
{$IFDEF UseGraphics}
setbkcolor(黑色);
setviewport(0,0,getmaxx,getmaxy,clip off);
clearviewport
{$ELSE}
ClrScr
{$ENDIF}
得分:= 0;
ShowScore
显示按钮;
ShowHighScore
ShowMouse
{$IFDEF UseGraphics}
SetTextStyle(0,Horizdir,2);
OuttextXY(10,10,'相同游戏v0.03,(C)由Marco v/d Voort编写');
SetTextStyle(0,Horizdir,1);
OuttextXY(50,40,“FPC RTL和API单位Crt的演示,(MS)鼠标和图形”);
{$ELSE}
GotoXY(1,1);
TextColor(黄色);
写(' same game v 0.02 ');
TextColor(白色);
写(“的一个演示”);
TextColor(黄色);写(‘FPC’);
TextColor(白色);Write(' API或MsMouse单位。马尔科·范·德·福特);
SetDefaultColor
{$ENDIF}
如果LastScore & lt& gt那么0
开始
{$Ifdef UseGraphics}
SetTextStyle(0,Horizdir,1);
Str(LastScore,S);
OuttextXY(50,40,'上一局比分是:'+S);
{$else}
GotoXY(10,20);
写('上一局比分是:',last score);
{$endif}
结束;
DisplayPlayField(游戏场);
mark field:= PlayField;
结束;
过程域loop mouse;
{主游戏循环。整个游戏在这个程序中运行,剩下的就是
初始化/完成(如加载和保存高分等)
变量X,Y,
MX,MY,MState,Dummy:LONGINT;
endo fgame:LONGINT;
s:字符串;
开始
随机化;
重复
FillPlayField
构建屏幕;
endo fgame:= 0;
重复
GetMouseState(MX,MY,MState);
{$IFDEF UseGraphics}
x:= 2 *(MX-GrFieldX)DIV scale rx)+FieldX;
y:=((MY-grfield y)DIV ScalerY)+field y-1;
{$ELSE}
x:= MX SHR 3;
y:=我的SHR 3;
{$ENDIF}
如果PlayFieldPiecesLeft=0,则
开始
INC(得分,1000);
endo fgame:= 1;
结束
其他
开始
{$IFDEF UseGraphics}
IF(MX & gt;=MenuX)和(MX & lt(MenuX+16 * Length(GrNewGameLine)))然后
开始{可点击区域中的X }
如果(我的& gt=MenuY)和(MY & lt(MenuY+RowDispl*3+2))然后
开始
x:= 65;{X不重要,只要是60..69}
y:=((MY-MenuY)DIV row displ)+4;
结束;
结束;
{$ENDIF}
IF(X & gt;=60)和(X & lt=69)那么
开始
IF (MState和LButton)& lt;& gt0然后{如果按了左键,}
开始
如果Y=4,那么
endo fgame:= 1;
如果Y=6,那么
endo fgame:= 2;
IF(end fgame & gt;0)和(PlayFieldPiecesLeft=0)然后
INC(得分,1000);
如果Y=5,那么
开始
显示帮助;
构建屏幕;
结束;
{$IFDEF Linux}
如果Y=7,那么
开始
写(# 27+'(K ');
构建屏幕;
结束;
{$ENDIF}
结束;
结束;
IF(X & gt;=(FieldX-2))和(Y & gt=(FieldY-2))那么
开始
DEC(X,FieldX-1);
DEC(Y,field Y-1);
X:= X SHR 1;
IF(X & lt;PlayFieldXDimension)和(Y & ltPlayFieldYDimension)那么
开始
IF MarkField[X,Y]& lt;& gt那么4
开始
mark field:= PlayField;
MarkAfield(X,Y);
display playfield(mark field);
{$ifdef UseGraphics}
SetFillStyle(SolidFill,黑色);
吧(420,440,540,460);
SetTextStyle(0,Horizdir,1);
Str(CubesToScore,S);
OuttextXY(420,440,'标记为:'+S);
{$else}
TextColor(白色);
GotoXY(20,22);
写(':20);
GotoXY(20,22);
Write('Marked:',CubesToScore);
{$endif}
结束;
IF (MarkField[X,Y]=4) AND ((MState和LButton)& lt;& gt0)然后
{如果按了左键,}
开始
重复{等待直到它被释放。
按下的瞬间算数}
GetMouseState(X,Y,Dummy);
直到(Dummy和LButton)= 0;
Colapse
mark field:= PlayField;
display playfield(mark field);
结束
结束
结束;
如果按键,则
开始
x:= GetKey;
IF(CHR(X IN[' X ',' X ',' q'])或(X=27)则
endo fgame:= 2;
结束;
结束;
直到EndOfGame & gt0;
ShowScore
X:=SlipInScore(分数);
如果X & lt& gt那么0
开始
HideMouse
ShowHighScore
{$IFDEF UseGraphics}
Str(评分:5,S);
OutTextXY(HighX+150,HighY+LineDistY*(10-X),S);
GrInputStr(S,HighX,HighY+LineDistY*(10-X),16,12,10,FALSE,alfa beta);
{$ELSE}
InputStr(S,HighX,HighY+12-X,10,FALSE,alfa beta);
{$ENDIF}
高分数[X-1]。名称:= S;
ShowMouse
结束;
last Score:= Score;
直到endo fgame = 2;
结束;
CONST FileName = ' samegame.scr
VAR I:LONGINT;
{$IFDEF UseGraphics}
gd,gm:整数;
pal:PaletteType;
{$ENDIF}
开始
{$IFDEF UseGraphics}
{$ifdef Win32}
ShowWindow(GetActiveWindow,0);
{$endif}
GM:= VGA hi;
GD:= VGA;
InitGraph(gd,gm,' ');
如果GraphResult & lt& gt那就喝吧
开始
Writeln('图形驱动',gd,'图形模式',gm,'不支持');
halt(1);
结束;
SetFillStyle(SolidFill,1);
GetDefaultPalette(Pal);
setall palette(Pal);
{$ENDIF}
如果没有鼠标,则
开始
Writeln('未找到鼠标。“需要一只鼠标!”);
停止;
结束;
FOR I:=0到9 DO
高分[I]。分数:= I * 1500;
LoadHighScore(文件名);
InitMouse
{$ifndef Win32Graph}
CursorOff
{$endif}
{$IFDEF UseGraphics}
HighX:= 450;HighY:= 220;{高分表格的位置}
{$else}
HighX:= 52;HighY:= 10;{高分表格的位置}
{$endif}
DoMainLoopMouse
HideMouse
DoneMouse
{$ifndef Win32Graph}
CursorOn
{$endif}
SaveHighScore
{$IFDEF UseGraphics}
CloseGraph
{$ENDIF}
{$ifndef Win32Graph}
ClrScr
Writeln
Writeln('上一场' #39 '分数为: ',分数);
{$endif}
结束。
{
$Log: samegame.pp,v $。
修订版1.3 2002年2月22日
*范围检查错误修复
修订版1.2 2001/11/11 21:09:50马可
*为win32 GUI修复了Gameunit、Fpctris和samegame
版本1.1
*移动到自己的模块
修订版1.2
+删除的日志
}