利用vb作一个拼图小程序,请问高手
1、图片的切割(语法)
2、图片使用的控件和移动图片的算法
如有例子请给我一个,我这里谢谢了
也可告知算法

解决方案 »

  1.   

    csdn没有高手,我们这样的人哪里称得上高手啊,只有你自己是“高手”,慢慢想去吧。
      

  2.   

    我不是高手,给点提示,
    1。图片的切割我不太清楚,不过API BitBlt应该可以做到
    2. 图片使用的控件和移动图片的算法
    以下面的样式为例:
    在窗体上放17个picture. 每个picture直接留少许空位,为了区分是不同的picture
    如下:
    1  2  3  4 
    5  6  7  8
    9  10 11 12
    13 14 15 16 17
    建立dim pictureInfo(17) as integer 的数组, 下标0不使用, 给予初值
    1-17 分别为 1-17. 保留第n个picture中对应与原图的第N个位置.
    然后将图片4*4分割后,分别bitblt到前16个picture
    然后打乱图片位置. 方法如下
    循环10次
      随机选取 1-17的2个数, 比如5 和 7
      交换5 和 7 的图片控件的图片, 交换pictureInfo(5) 和 pictureInfo(7)的值
    结束循环
    让用户拼图, 17号位置用来做移动缓存的. 必定有一个空位置, 初始化是17,
    这样发现 pictureInfo(x) = 17 则让 picture17.visable=false 移动的时候可以
    让用户点取false的那张图片的邻接图片,然后交换这2个图片(a,b)的内容,交换这个数组
    下标为a,b的内容, 并且这个刚移动的位置(用户点取的图片)已经=17了.应该让他为.visable=false.好象这张
    图片移走了当用户点取的是17号图的时候给予判断,发现
     for i =1 to 16
       if pictureInfo(i)<>i then exit for
     next i
    出来的时候i>16.即数组连续递增和原来初始化数组值一致, 表示拼图成功.
      

  3.   

    补充一点,当点取一张图片看它能否移动, 判断这张图片的隔壁是否有空位置(=17的位置)
    假设点取图片为序号a的图片(picturea):
    if a-1>=1 and a-1 mod 4 <> 0 then '左边有位置
       if pictureInfo(a-1)=17 then found:goto foundlabel
    endif
    if a+1<=16 and a+1 mod 4<>1 then '右边有位置
       if pictureInfo(a+1)=17 then found:goto foundlabel
    endif
    if a-4>=1 then '上面有位置
       if pictureInfo(a-4)=17 then found:goto foundlabel
    endif
    if a+4<=16 then '下面有位置
       if pictureInfo(a+4)=17 then found:goto foundlabel
    endif
       exit sub
    foundlabel:
       '按上述方法处理移动
       if a=17 then 
          if 数组递增 then
              msgbox   "成功, 重新来过吗"
          end if
       end if当然, 你可以用picture(0-17)数组, index=0的让他visable, 
    然后点击事件的时候直接a=index就可以了