用VB编写拼图游戏

Author: 云飞 Date: 2001年 5期

?牐犗嘈判矶嗯笥讯纪婀赐加蜗罚赩B6.0中有一个PictureClip控件,它可以把一张图片划分为若干个单元,用它来设计拼图游戏,非常方便。你要是有兴趣,就跟我来吧!
  ?牐?1.首先要准备一张大小适中的图片。
  ?牐?2.单击“工程”→“部件”,然后找到“Microsoft PictureClip Controls6.0”,选中后PictureClip控件就会出现在工具箱中。
  ?牐?3.将PictureClip控件拖到窗体上,在属性窗口中设置其属性:点击Picture属性,加入刚才准备的图片。将Cols、Rows属性均设为3,这样就将图片划分为3行3列9个单元了。这些单元用GraphicCell属性进行编号,编号从0开始,编号的顺序是从左到右,从上到下。我们这样来访问这些单元,比如:在From_load过程中加入下面的语句:
  ?牐燜orm1.Picture=PictureClip1.GraphicCell(0)??
  ?牐犚辉诵芯突岱⑾郑疤迳舷允镜氖荘ictureClip1中图片左上角的一块了。
  ?牐?4.在窗体上摆上9个Image控件,为了减化程序代码,我们使用一个Image控件数组。那么如何建立控件数组呢?先在窗体上放置一个控件Image1,然后点击“复制”按钮,再点击“粘贴”按钮,将询问是否要建立一个控件数组,单击“是”即可。连续单击“粘贴”按钮,增加数组成员,这样窗体上就有了Image1(0)、Image1(1)、……Image1(8)等9个Image控件了。这些控件是用来显示图片的9个单元,即每一个图块用一控件显示。
  ?牐犝庋筒畈欢嗔耍偌由弦桓雒畎磁?Command1和两个标签控件Label1、label2,将它们的Caption属性分别设为“开始”、“步数”和“0”。界面的设计就算大功告成了。
  ?牐牫绦虼肴缦拢?
  ?牐燨ption Explicit
  ?牐燚im i As Integer'定义循环变量
  ?牐燚im j As Integer
  ?牐燚im step As Integer
  ?牐燚im x(8) As Integer'定义一个数组,用来存放随机编号
  ?牐燩rivate Sub Command1_Click()?煟?
  ?牐爄nit'初始化游戏
  ?牐燙ommand1.Enabled = False'使开始按钮失效
  ?牐燛nd Sub
  ?牐燩rivate Sub Form_Load()?煟?
  ?牐燫andomize
  ?牐燛nd Sub
  ?牐燬ub init()'初始化游戏子程序
  ?牐燜or i = 0 To 7'随机产生不重复的8个编号(从0到7)
  ?牐燼0: x(i)=Int(Rnd*8)
  ?牐燜or j = 0 To i - 1
  ?牐營f x(i)=x(j) Then GoTo a0
  ?牐燦ext
  ?牐燦ext
  ?牐燜or i = 0 To 7
  ?牐營mage1(i).Enabled = True'使Image1响应鼠标事件
  ?牐營mage1(x(i)).Picture = PictureClip1.GraphicCell(i)'让图片的8个单元分别赋予 8个Image控件
  ?牐燦ext
  ?牐營mage1(8).Picture = LoadPicture(“”)'空位用于移动图片
  ?牐燛nd Sub
  ?牐燩rivate Sub Image1_Click(Index As Integer)'注意索引值的运用
  ?牐燬elect Case Index Mod 3'把9个Image控件分成三列
  ?牐燙ase 0'当鼠标点击第1列时
  ?牐營f Image1(Index + 1).Picture = LoadPicture(“”) Then'判断右边是否为空
  ?牐營mage1(Index + 1).Picture = Image1(Index).Picture'交换图片
  ?牐營mage1(Index).Picture=LoadPicture(“”)win'测试是否拼图成功
  ?牐燛nd If
  ?牐燙ase 1'当鼠标点击第2列时
  ?牐營f Image1(Index - 1).Picture = LoadPicture(“”)Then'判断左边是否为空
  ?牐營mage1(Index - 1).Picture = Image1(Index).Picture
  ?牐營mage1(Index).Picture=LoadPicture(“”)??
  ?牐爓in
  ?牐燛nd If
  ?牐營f Image1(Index + 1).Picture = LoadPicture(“”)Then'判断右边是否为空
  ?牐營mage1(Index + 1).Picture = Image1(Index).Picture
  ?牐營mage1(Index).Picture=LoadPicture(“”)??
  ?牐爓in
  ?牐燛nd If
  ?牐燙ase 2'当鼠标点击第3列时
  ?牐營f Image1(Index - 1).Picture = LoadPicture(“”)Then'判断左边是否为空
  ?牐營mage1(Index - 1).Picture = Image1(Index).Picture
  ?牐營mage1(Index).Picture=LoadPicture(“”)??
  ?牐爓in
  ?牐燛nd If
  ?牐燛nd Select
  ?牐燬elect Case Index\ 3'把9个Image控件分成三行
  ?牐燙ase 0'当鼠标点击第1行时
  ?牐營f Image1(Index + 3).Picture = LoadPicture(“”)Then'判断下边是否为空
  ?牐營mage1(Index + 3).Picture = Image1(Index).Picture
  ?牐營mage1(Index).Picture=LoadPicture(“”)??
  ?牐爓in
  ?牐燛nd If
  ?牐燙ase 1'当鼠标点击第2行时
  ?牐營f Image1(Index - 3).Picture = LoadPicture(“”)Then'判断上边是否为空
  ?牐營mage1(Index - 3).Picture = Image1(Index).Picture
  ?牐營mage1(Index).Picture=LoadPicture(“”)??
  ?牐爓in
  ?牐燛nd If
  ?牐營f Image1(Index + 3).Picture = LoadPicture(“”)Then'判断下边是否为空
  ?牐營mage1(Index + 3).Picture = Image1(Index).Picture
  ?牐營mage1(Index).Picture=LoadPicture(“”)??
  ?牐爓in
  ?牐燛nd If
  ?牐燙ase 2'当鼠标点击第3行时
  ?牐營f Image1(Index - 3).Picture = LoadPicture(“”)Then'判断上边是否为空
  ?牐營mage1(Index - 3).Picture = Image1(Index).Picture
  ?牐營mage1(Index).Picture=LoadPicture(“”)??
  ?牐爓in
  ?牐燛nd If
  ?牐燛nd Select
  ?牐燛nd Sub
  ?牐燬ub win()'测试是否拼图成功的子程序
  ?牐燚im num As Integer
  ?牐爏tep=step + 1'步数加1
  ?牐燣abel2.Caption= step
  ?牐燜or i = 0 To 8'判断图块是否全部就位
  ?牐營f Image1(i).Picture= PictureClip1.GraphicCell(i)?燭hen num = num + 1
  ?牐燦ext
  ?牐營f num ?=8 Then
  ?牐燤sgBox “你真棒!”
  ?牐燜or i=0 To 8
  ?牐營mage1 (i).Enabled=False'使之不响应鼠标事件
  ?牐燦ext
  ?牐燙ommand1.Enabled=True'恢复命令按钮
  ?牐燛nd If
  ?牐燛nd Sub
  ?牐犝飧龀绦蚩赡苡行┠讯龋还嫱孀约罕嗟挠蜗罚欢ɑ崛肞Fans兴奋不已。我想编程的乐趣大概就在于此吧,嘿嘿。