自编扫雷程序详解(Delphi版)
2008-04-09 04:18:30来源:互联网 阅读 ()
我所推崇的是作者能够写出它编程过程中的思路,其实按照这样的思路我们完全可以编写出自己的代码(只要不是完全不懂得编程的朋友),从而能按照自己所理解的思路加以修改和补充。写了这么多,应该到了写程序思路的时候了。
有很多文章介绍过怎样写一个扫雷程序,但好像都用Button数组来做雷区的方格的,其实笔者经过实践,无论是VB还是Delphi都很难用Button数组来实现和Windows中的扫雷一样的界面和功能(除非自己再写一个能实现差不多功能的控件)。我的方法是直接在窗体上绘出Windows 扫雷程序中的Bmp。具体如下:
1、 利用ExeScope 工具(华军软件园可以下载)打开Windows中的扫雷程序,导出其中资源文件中的位图,另存到硬盘上,以备程序使用;
如图: 256 * 16 = 16 * (16 * 16 )
图 1
156* 23 = 12 * (13 * 23)
图 2
120 * 24 = 5 * (24 * 24)
图 3
2、 建一个Delphi工程,添加三个ImageList控件,按照上面的各个小图像的长和宽设好ImageList的Height 和Width,即:
ImageList1.Height = 16 ImageList1.Width=16
ImageList2.Height = 23 ImageList2.Width=13
ImageList3.Height = 24 ImageList3.Width=24
然后双击ImageList1 ,点Add… 按钮找到图1 ,打开后出现提示选择Yes,然后选择Transparent Color 为cl3DLight,点OK完成;图2 与图3一样的步骤完成,我们所需的图像已准备完毕。
3、 绘图程序中主要用到的是ImageList的Draw方法:
Imagelist1.Draw( Canvas:Tcanvas,X:Integer,Y:Integer,
Index:Integer,[Enabled:Boolean=true] );
Canvas所要绘的图的载体;X,Y为图在载体中左顶点的位置;Index为图在ImageList中的索引值,如要在窗体上画出下图
在窗体的OnPaint事件写入以下代码:
procedure TForm1.FormPaint(Sender: TObject);
var i,j:integer;
begin
for i:=0 to 9 do
begin
for j:=0 to 9 do
imagelist1.draw(form1.canvas, i*16, j*16,0);
end;
end;
知道了这一点,这个程序的思路就比较清晰了,扫雷的时候只要重新绘图就行了,看下面的具体实现:
定义全局的二维动态数组和整型变量M、N,(允许用户自定义雷区大小M * N),CurrentI、CurrentJ(用户鼠标点击返回的当前位置):
BombFlag : Array of Array of Integer ; //雷的标志数组,
//-1表示雷
//0 – 8 表示该位置周围的雷数
CurrentFlag : Array of Array of Integer ; //当前位置的状态
//0表示原状,即初始化时的状态
//1表示该位置被标志为雷
//2表示该位置被标志为问号
//3表示该位置已被点开
//利用SetLength()函数来定义两个数组的大小
M: Integer = 9; //初始化默认雷区大小为9 * 9
N: Integer = 9;
CurrentI , CurrentJ : Integer;
窗体的创建和初始化过程
① FormCreate
初始化两个动态数组,其值均设为0
procedure TForm1.FormCreate(Sender: TObject);
var i,j:integer;
Begin
SetLength(BombFlag,M,N);
SetLength(CurrentFlag,M,N);
For i:=0 to M-1 do
Begin
For j:=0 to N-1 do
Begin
BombFlag[I][j]:=0;
CurrentFlag[I][j]:=0;
End;
End;
End;
② Procedure Ini();
初始化过程的代码就是上面介绍的在FormOnPaint事件里的代码,当然要用M,N来代替里面的两个数字9,而且也可定义两个常量来控制雷区位置,如下:
imagelist1.draw(form1.canvas, Left i*16,Right j*16, 0);
Ini() 过程在FormOnPaint事件里执行。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:让pc speaker美妙动听