?? unit1.pas
字號(hào):
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ImgList, Menus, StdCtrls, ComCtrls;
type
TSaoLei = class(TForm)
Panel1: TPanel;
ImageList1: TImageList;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N14: TMenuItem;
N15: TMenuItem;
N16: TMenuItem;
N17: TMenuItem;
ImageList2: TImageList;
Label1: TLabel;
Timer1: TTimer;
Label2: TLabel;
StatusBar1: TStatusBar;
N18: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
N5: TMenuItem;
procedure ChuShiHua;
procedure N3Click(Sender: TObject);
function juadge(LeiYesNo:integer):integer;
procedure ClickDraw(i,j:integer);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Timer1Timer(Sender: TObject);
Procedure GameEnd(FalseI,FalseJ:integer);
procedure N6Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure N14Click(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure N15Click(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure HuiHua;
procedure N17Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
SaoLei: TSaoLei;
M:integer=9;
N:integer=9;//默認(rèn)游戲網(wǎng)格數(shù)
L:integer=10;//默認(rèn)雷數(shù)
leftI:integer=2;
topI:integer=32;
implementation
uses
unit2;
var
BombFlag:array of array of integer;//雷標(biāo),-1雷,0-8周圍雷數(shù)
CurrentFlag:array of array of integer;//狀態(tài),0初始,1雷2問3點(diǎn)開
CurrentI,CurrentJ:integer;//當(dāng)前鼠標(biāo)位置
MyTime:integer; //記時(shí)
CurrentL:integer; //和當(dāng)前雷數(shù)
GameOver:integer=0;
{$R *.dfm}
procedure TSaoLei.ChuShiHua;
var
i,j,b:integer;
begin
Timer1.Enabled:=true;
GameOver:=0;
SaoLei.Width :=M*30+leftI+9;
SaoLei.Height :=N*30 +Panel1.Height +Statusbar1.Height+topI+25 ;
SaoLei.Left :=(Screen.Width -SaoLei.Width)div 2;
SaoLei.Top :=(Screen.Height -SaoLei.Height)div 2;
CurrentL:=L;
label1.Caption :='還有'+inttostr(CurrentL)+'個(gè)雷';
MyTime:=0;
huihua;
//**********下面隨機(jī)布雷***************************
b:=0;
Randomize;
While b<>L do
Begin
i:=random(M); //產(chǎn)生兩個(gè)隨機(jī)數(shù)
j:=random(N);
If BombFlag[i][j]<>-1 then //如果該位置不是雷,則定為雷
Begin
BombFlag[i][j]:=-1;
b:=b+1;
End;
End;
//**********下面計(jì)算雷周圍雷數(shù)***************************
for i:=0 to M-1 do
for j:=0 to N-1 do
if BombFlag[i][j]<>-1 then
begin
if (i=0) and (j=0) then
BombFlag[i][j]:=juadge(BombFlag[i+1][j])+ juadge(BombFlag[i][j+1])+juadge(BombFlag[i+1][j+1]);
if (i=0) and (j=N-1) then
BombFlag[i][j]:=juadge(BombFlag[i][j-1])+ juadge(BombFlag[i+1][j-1])+juadge(BombFlag[i+1][j]);
if (i=M-1) and (j=0) then
BombFlag[i][j]:=juadge(BombFlag[i-1][j])+ juadge(BombFlag[i-1][j+1])+juadge(BombFlag[i][j+1]);
if (i=M-1) and (j=N-1) then
BombFlag[i][j]:=juadge(BombFlag[i-1][j-1])+ juadge(BombFlag[i-1][j])+juadge(BombFlag[i][j-1]);
if (i=0) and (j<>0)and (j<>N-1) then
BombFlag[i][j]:=juadge(BombFlag[i][j-1])+ juadge(BombFlag[i+1][j-1])+juadge(BombFlag[i+1][j])+ juadge(BombFlag[i+1][j+1])+juadge(BombFlag[i][j+1]);
if (j=0) and (i<>0)and (i<>M-1) then
BombFlag[i][j]:=juadge(BombFlag[i-1][j])+ juadge(BombFlag[i-1][j+1])+juadge(BombFlag[i][j+1])+ juadge(BombFlag[i+1][j+1])+juadge(BombFlag[i+1][j]);
if (j=N-1) and (i<>0)and (i<>M-1) then
BombFlag[i][j]:=juadge(BombFlag[i-1][j])+ juadge(BombFlag[i-1][j-1])+juadge(BombFlag[i][j-1])+ juadge(BombFlag[i+1][j-1])+juadge(BombFlag[i+1][j]);
if (i=M-1) and (j<>0)and (j<>N-1) then
BombFlag[i][j]:=juadge(BombFlag[i][j-1])+ juadge(BombFlag[i-1][j-1])+juadge(BombFlag[i-1][j])+ juadge(BombFlag[i-1][j+1])+juadge(BombFlag[i][j+1]);
if (i<>0)and (i<>M-1) and (j<>0) and (j<>N-1)then
begin
BombFlag[i][j]:=juadge(BombFlag[i-1][j-1])+ juadge(BombFlag[i-1][j])+juadge(BombFlag[i-1][j+1])+ juadge(BombFlag[i][j-1])+juadge(BombFlag[i][j+1]);
BombFlag[i][j]:=BombFlag[i][j]+juadge(BombFlag[i+1][j-1])+ juadge(BombFlag[i+1][j])+juadge(BombFlag[i+1][j+1]);
end;
end;
end;
procedure TSaoLei.ClickDraw(i,j:integer);
begin
If CurrentFlag[i][j]=0 then //當(dāng)前標(biāo)志為原狀
begin
if BombFlag[i][j]<>0 then // 雷數(shù)不為零
begin
CurrentFlag[i][j]:=3; //標(biāo)志當(dāng)前位置已被點(diǎn)開
inc(GameOver);
imagelist1.Draw(SaoLei.Canvas,I*30+leftI,j*30+topI,BombFlag[i][j],true);
end
else //雷數(shù)為零
begin
imagelist1.Draw(SaoLei.Canvas,I*30+leftI,j*30+topI,0,true);
CurrentFlag[i][j]:=3;
inc(GameOver);
if (i=0) and (j=0) then
begin
ClickDraw(i+1,j);
ClickDraw(i,j+1);
ClickDraw(i+1,j+1);
end;
if (i=0) and (j=N-1) then
begin
ClickDraw(i+1,j-1);
ClickDraw(i,j-1);
ClickDraw(i+1,j);
end;
if (i=M-1) and (j=0) then
begin
ClickDraw(i-1,j);
ClickDraw(i-1,j+1);
ClickDraw(i,j+1);
end;
if (i=M-1) and (j=N-1) then
begin
ClickDraw(i-1,j-1);
ClickDraw(i-1,j);
ClickDraw(i,j-1);
end;
if (i=0) and (j<>0)and (j<>N-1) then
begin
ClickDraw(i,j-1);
ClickDraw(i+1,j-1);
ClickDraw(i+1,j);
ClickDraw(i+1,j+1);
ClickDraw(i,j+1);
end;
if (j=0) and (i<>0)and (i<>M-1) then
begin
ClickDraw(i-1,j);
ClickDraw(i-1,j+1);
ClickDraw(i,j+1);
ClickDraw(i+1,j+1);
ClickDraw(i+1,j);
end;
if (j=N-1) and (i<>0)and (i<>M-1) then
begin
ClickDraw(i-1,j);
ClickDraw(i-1,j-1);
ClickDraw(i,j-1);
ClickDraw(i+1,j-1);
ClickDraw(i+1,j);
end;
if (i=M-1) and (j<>0)and (j<>N-1) then
begin
ClickDraw(i,j-1);
ClickDraw(i-1,j-1);
ClickDraw(i-1,j);
ClickDraw(i-1,j+1);
ClickDraw(i,j+1);
end;
if (i<>0)and (i<>M-1) and (j<>0) and (j<>N-1)then
begin
ClickDraw(i-1,j-1);
ClickDraw(i-1,j);
ClickDraw(i-1,j+1);
ClickDraw(i,j-1);
ClickDraw(i,j+1);
ClickDraw(i+1,j-1);
ClickDraw(i+1,j);
ClickDraw(i+1,j+1);
end;
end;
end;//if
end;
procedure TSaoLei.GameEnd(FalseI,FalseJ:integer);
var i,j:integer;
begin
for i:=0 to M-1 do
for j:=0 to N-1 do
begin
if BombFlag[i][j]=-1 then //YesBomb
imagelist1.Draw(SaoLei.Canvas,i*30+leftI,j*30+topI,9)
else //NoBobm
begin
if CurrentFlag[i][j]=1 then
imagelist1.Draw(SaoLei.Canvas,i*30+leftI,j*30+topI,12);
end;
imagelist1.Draw(SaoLei.Canvas,FalseI*30+leftI,FalseJ*30+topI,13);
CurrentFlag[i][j]:=3;
end;
end;
procedure TSaoLei.N3Click(Sender: TObject);
begin
ChuShiHua;
Saolei.Repaint;
N3.Enabled :=false;
N5.Enabled :=true;
N6.Enabled :=false;
N7.Enabled :=false;
N8.Enabled :=false;
N9.Enabled :=false;
end;
function TSaoLei.juadge(LeiYesNo:integer):integer;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -