📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, ExtCtrls,mmsystem, Buttons,inifiles, shellapi,
ComCtrls, Registry;
type
TForm1 = class(TForm)
Panel1: TPanel;
imgfield: TImage;
Panel2: TPanel;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
MenNewGm: TMenuItem;
Menchuji: TMenuItem;
Menzhongji: TMenuItem;
Mengaoji: TMenuItem;
Menyxb: TMenuItem;
Menexit: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
N14: TMenuItem;
N15: TMenuItem;
Menbj: TMenuItem;
N17: TMenuItem;
N18: TMenuItem;
Menzdy: TMenuItem;
N19: TMenuItem;
imgrefield: TImage;
imgquest: TImage;
imgNewGm: TImage;
imgNewGmPressed: TImage;
imgNewGmY: TImage;
imgfieldpress: TImage;
imgCry: TImage;
imgWin: TImage;
Timer1: TTimer;
imgpressed: TImage;
imgquestdown: TImage;
imgNum: TImage;
imgmineleft: TImage;
imgtimeused: TImage;
imgNums: TImage;
procedure OnCreat(Sender: TObject);
procedure initminefield;
procedure formsize;
procedure NewGmOnMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure NewGmOnMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure NewGmOnClick(Sender: TObject);
procedure imgfieldOnMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure imgfieldOnMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Timer1Timer(Sender: TObject);
procedure MenchujiClick(Sender: TObject);
procedure MenzhongjiClick(Sender: TObject);
procedure MenNewGmClick(Sender: TObject);
procedure MengaojiClick(Sender: TObject);
procedure Mencheck(A:integer);
procedure MenzdyClick(Sender: TObject);
procedure MenexitClick(Sender: TObject);
procedure imgfieldOnMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure openblank(intY,intX:integer);
procedure die(intY,intX:integer);
procedure led(Num:integer;imgdisplay:Timage);
procedure MenyxbClick(Sender: TObject);
procedure Win();
procedure Writetoreg(Name:string;usetime:integer;level:TMenuItem);
procedure Readfromreg();
procedure N13Click(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N12Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Mine: array of array of integer; //雷区的雷坐标
Minelocation:array of array of integer; //每个雷的坐标
Mark:array of array of integer; //鼠标右键所做的标记
Wronglocation:array of array of integer; //错误标记的坐标
cols,rows:integer; //帖图的坐标点
Nummines:integer; //雷的总数
Ncols,Nrows:integer; //游戏中的最大宽度和高度
hitbegin:boolean;
Leftbutton:boolean;
Hits:integer; //雷的正确标记的数量
wrHits:integer; //雷的错误标记数量
leftandrightdown:boolean; //判断双键是否按下
timeused:integer; //游戏所用时间
mineleft:integer; //游戏中的剩余雷数
MineOpened:array of array of integer; //双键里用的暂存数组
psed:integer; //双键里用的计数器
comdir:string;
const
buttonwidth=16;
g_ChmFileName='mine.chm';
g_HelpFileName='mine.hlp';
g_ResourceName='resource\';
g_SysHelpFileName='Syshelp.chm';
implementation
uses Unit2, Unit3,Unit_About;
{$R *.dfm}
procedure Tform1.Readfromreg();
var
Reg: TRegistry;
begin
Reg:= TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey('\MinMine\MinMine Hero',true);
form3.chutime.Caption:=inttostr(Reg.ReadInteger(Menchuji.Caption+'time'));
form3.chuName.Caption:=Reg.Readstring(Menchuji.Caption+'name');
form3.zhongtime.Caption:=inttostr(Reg.ReadInteger(Menzhongji.Caption+'time'));
form3.zhongName.Caption:=Reg.Readstring(Menzhongji.Caption+'name');
form3.gaotime.Caption:=inttostr(Reg.ReadInteger(Mengaoji.Caption+'time'));
form3.gaoName.Caption:=Reg.Readstring(Mengaoji.Caption+'name');
Reg.CloseKey;
finally
Reg.Free;
end;
end;
procedure Tform1.Writetoreg(Name:string;usetime:integer;level:TMenuItem);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('\MinMine\MinMine Hero', True) then
begin
Reg.WriteString(level.Caption+'name' ,Name);
Reg.Writeinteger(level.Caption+'time' ,usetime);
Reg.CloseKey;
end;
finally
Reg.Free;
end;
end;
procedure Tform1.Win();
var
Name:string;
begin
imgfield.Enabled:=false;
imgNewGm.Canvas.Draw(0,0,imgWin.Picture.Graphic);
timer1.Enabled:=false;
if Menchuji.Checked and (timeused<strtoint(form3.chutime.Caption)) then
begin
Name:= InputBox('恭喜恭喜', '尊姓大名', '匿名');
writetoreg(Name,timeused,Menchuji);
form3.chutime.Caption:=inttostr(timeused);
form3.chuname.Caption:=Name;
end;
if Menzhongji.Checked and (timeused<strtoint(form3.zhongtime.Caption)) then
begin
Name:= InputBox('恭喜恭喜', '尊姓大名', '匿名');
writetoreg(Name,timeused,Menzhongji);
form3.zhongtime.Caption:=inttostr(timeused);
form3.zhongname.Caption:=Name;
end;
if Mengaoji.Checked and (timeused<strtoint(form3.gaotime.Caption)) then
begin
Name:= InputBox('恭喜恭喜', '尊姓大名', '匿名');
writetoreg(Name,timeused,Mengaoji);
form3.gaotime.Caption:=inttostr(timeused);
form3.gaoname.Caption:=Name;
end;
end;
procedure Tform1.led(Num:integer;imgdisplay:Timage);
begin
if Num>=0 then
begin
case Num of
0..9:
begin
imgdisplay.Canvas.CopyRect(rect(0,0,13,23),imgNum.Canvas,rect(0,253,13,276));
imgdisplay.Canvas.CopyRect(rect(13,0,26,23),imgNum.Canvas,rect(0,253,13,276));
imgdisplay.Canvas.CopyRect(rect(26,0,39,23),imgNum.Canvas,rect(0,253-Num*23,13,253-(Num-1)*23));
end;
10..99:
begin
imgdisplay.Canvas.CopyRect(rect(0,0,13,23),imgNum.Canvas,rect(0,253,13,276));
imgdisplay.Canvas.CopyRect(rect(13,0,26,23),imgNum.Canvas,rect(0,253-(Num div 10)*23,13,253-(Num div 10-1)*23));
imgdisplay.Canvas.CopyRect(rect(26,0,39,23),imgNum.Canvas,rect(0,253-(Num mod 10)*23,13,253-(Num mod 10-1)*23));
end;
100..999:
begin
imgdisplay.Canvas.CopyRect(rect(0,0,13,23),imgNum.Canvas,rect(0,253-(Num div 100)*23,13,253-(Num div 100-1)*23));
imgdisplay.Canvas.CopyRect(rect(13,0,26,23),imgNum.Canvas,rect(0,253-((Num mod 100) div 10)*23,13,253-((Num mod 100) div 10-1)*23));
imgdisplay.Canvas.CopyRect(rect(26,0,39,23),imgNum.Canvas,rect(0,253-(Num mod 10)*23,13,253-(Num mod 10-1)*23));
end;
end;
end;
if Num<0 then
begin
case Num of
-9..-1:
begin
imgdisplay.Canvas.CopyRect(rect(0,0,13,23),imgNum.Canvas,rect(0,23,13,46));
imgdisplay.Canvas.CopyRect(rect(13,0,26,23),imgNum.Canvas,rect(0,0,13,23));
imgdisplay.Canvas.CopyRect(rect(26,0,39,23),imgNum.Canvas,rect(0,253+Num*23,13,253+(Num+1)*23));
end;
-99..-10:
begin
imgdisplay.Canvas.CopyRect(rect(0,0,13,23),imgNum.Canvas,rect(0,0,13,23));
imgdisplay.Canvas.CopyRect(rect(13,0,26,23),imgNum.Canvas,rect(0,253+(Num div 10)*23,13,253+(Num div 10+1)*23));
imgdisplay.Canvas.CopyRect(rect(26,0,39,23),imgNum.Canvas,rect(0,253+(Num mod 10)*23,13,253+(Num mod 10+1)*23));
end;
end;
end;
end;
procedure Tform1.die(intY,intX:integer);
var
i:integer;
wrongintX,wrongintY:integer;
begin
imgpressed.Left:=5000;
imgquestdown.Left:=5000;
wrongintX:=intX;
wrongintY:=intY;
imgNewGm.Canvas.Draw(0,0,imgCry.Picture.Graphic);
timer1.Enabled:=false;
for i:=0 to Nummines-1 do
begin
intY:=minelocation[i,0];
intX:=minelocation[i,1];
cols:=intX*buttonwidth;
rows:=intY*buttonwidth;
imgfield.Canvas.CopyRect(rect(cols,rows,cols+16,rows+16),imgNums.Canvas,rect(0,80,16,96));
end;
imgfield.Canvas.CopyRect(rect(wrongintX*16,wrongintY*16,(wrongintX+1)*16,(wrongintY+1)*16),imgNums.Canvas,rect(0,48,16,64));
for i:=1 to wrHits do
begin
intY:=wronglocation[i,1];
intX:=wronglocation[i,2];
if mark[intY,intX]=2 then
begin
cols:=intX*buttonwidth;
rows:=intY*buttonwidth;
imgfield.Canvas.CopyRect(rect(cols,rows,cols+16,rows+16),imgNUms.Canvas,rect(0,64,16,80));
end;
end;
imgfield.Enabled:=false;
end;
procedure Tform1.openblank(intY,intX:integer);
var
ndx,ndy:boolean;
h,i,j,k:integer;
opened:boolean;
begin
repeat
begin
opened:=false;
for h:=0 to Nrows-1 do
for i:=0 to Ncols-1 do
begin
if mine[h,i]=10 then
begin
for j:=-1 to 1 do
for k:=-1 to 1 do
begin
ndx:=(i+k>=0) and (i+k<Ncols);
ndy:=(h+j>=0) and (h+j<Nrows);
if ndx and ndy and (mine[h+j,i+k]<9) and (mark[h+j,i+k]=0) then
begin
imgfield.Canvas.CopyRect(rect((i+k)*16,(h+j)*16,(i+k+1)*16,(h+j+1)*16),imgNums.Canvas,rect(0,240-mine[h+j,i+k]*16,16,240-(mine[h+j,i+k]-1)*16));
mine[h+j,i+k]:=10+mine[h+j,i+k];
opened:=true;
end;
end;
end;
end;
imgfield.Canvas.CopyRect(rect(intX*16,intY*16,(intX+1)*16,(intY+1)*16),imgNUms.Canvas,rect(0,240,16,256));
end;
until opened=false;
end;
procedure Tform1.Mencheck(A:integer);
var
i:integer;
begin
for i:=0 to 5 do
N1.Items[i].Checked:=false;
end;
procedure Tform1.formsize;
var
NL:variant;
begin
//窗体大小及其他控件位置
imgfield.Width :=buttonwidth*Ncols;
imgfield.Height :=buttonwidth*Nrows;
NL:=(imgfield.width-imgNewGm.width)/2+imgfield.Left;
imgNewGm.Left:=NL;
imgtimeused.Left:=imgNewGm.Left+imgNewGm.Width+imgNewGm.Left-(imgmineleft.Left+imgmineleft.Width);
panel1.Width :=imgfield.Width +14;
panel1.Height :=imgfield.Height +14;
form1.Width :=panel1.Width+13;
form1.Height :=panel1.Height+panel2.Height +50;
panel2.Width :=panel1.Width ;
//窗体大小及其他控件位置
end;
procedure Tform1.initminefield;
var
i,j,k:integer;
ndx,ndy:boolean;
intX,intY:integer;
//初始化雷区
begin
psed:=0;
leftandrightdown:=false;
Leftbutton:=false;
timer1.Enabled:=false;
imgfield.Canvas.Draw(0,0,imgrefield.Picture.Graphic );
imgNewGm.Canvas.Draw(0,0,imgNewGmY.Picture.Graphic);
imgpressed.Left:=5000;
timeused:=0;
wrHits:=0;
Hits:=Nummines;
mineleft:=Nummines;
led(mineleft,imgmineleft);
led(timeused,imgtimeused);
setlength(Mark,0,0);
setlength(Mark,Nrows,Ncols);
setlength(mine,0,0);
setlength(mine,Nrows,Ncols);
setlength(minelocation,0,0);
setlength(minelocation,Nummines,Nummines);
setlength(wronglocation,0,0);
setlength(wronglocation,Nrows*Ncols,3);
randomize;
for i:=0 to Nummines-1 do
begin
intY:=random(Nrows);
intX:=random(Ncols);
randomize;
while mine[intY,intX]=9 do
begin
intY:=random(Nrows);
intX:=random(Ncols);
end;
mine[intY,intX]:=9;
minelocation[i,0]:=intY;
minelocation[i,1]:=intX;
for j:=-1 to 1 do
begin
for k:=-1 to 1 do
begin
ndx:=(intX+k>=0) and (intX+k<Ncols);
ndy:=(intY+j>=0) and (intY+j<Nrows);
if ndx and ndy then
begin
if mine[intY+j,intX+k]<>9 then mine[intY+j,intX+k]:=mine[intY+j,intX+k]+1;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -