帕斯卡,有游戏吗?很紧急。

程序SameGame

{$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

+删除的日志

}