其实这问题不知道和计算机有没有关系现在用vb写了个简单的拼图游戏,3*3那种网上搜索的到的那种,每次打乱顺序都随机,但似乎如果打乱顺序是仅仅2张图片交换了位置就很难玩出会不会这种情况没有解的。。比如正确顺序是:1 2 3
4 5 6
7 8 现在打乱的顺序是1 2 3
4 5 8
7 69号位置是空白位,用来移动图片的这种情况怎么玩出。。
4 5 6
7 8 现在打乱的顺序是1 2 3
4 5 8
7 69号位置是空白位,用来移动图片的这种情况怎么玩出。。
Image1(i).Enabled = True '使Image1响应鼠标事件 Image1(x(i)).Picture = PictureClip1.GraphicCell(i) '让图片的8个单元分别赋予 8个Image控件
Next这个是目前随机实现的方法。
1 图块。编号 A-H。
2 图的位置,或者更形象,叫作棋盘,它有 9 个可以放图块的格子,编号 1-9。
┌─┬─┬─┐
│1│2│3│
├─┼─┼─┤
│4│5│6│
├─┼─┼─┤
│7│8│9│
└─┴─┴─┘
每个格子由于其位置的关系,相邻格子(可移入图块的格子)的数目不一样。
1、3、7、9 有 2 个;
2、4、6、8 有 3 个;
5 有 4 个。你可以用一张数据库表或数组变量来记住每个格子的相邻格子的状态。
1 2400
2 1350
3 2600
4 1570
5 2468
6 3590
7 4800
8 5790
9 6800初始状态,图块放在格子 1-8 中,A-1,B-2,...H-8。这也是最终玩家要还原的状态。
你可以用一个数组变量来记住各个格子中的图块编号,用一个变量记住当前空格的编号(当然也可以不要这个变量,用上一个数组同时担任这个任务,但另开一个变量可以省去查找空格时的循环搜索)。还要一个变量记录上一步的空格编号(后面你可以看到它的用处)。你现在的任务就是移动 n 步,打乱初始状态。这个 n 你可以通过取随机数得到。但 n 必须足够大,以使局面足够复杂。现在,你的空格是 9,它只有两个相邻格,也就是说,只有 6、8 中的图块 F、H 有可能移进来。你取一个随机数,使其结果是 0 或 1。这样就可以选出这两个格子中的 1 个,完成一步移动。记录新的状态。然后再像上面那样随机选取一个格子来移动。假如你上一步是 6->9,6 有 3 个相邻格子。你取随机数 0-2,选出一个格子。不过,这一次你要检查一下选出的是否上一步的空格 9,以免往复移动。如果是,重新选一次。就是这样,一直移动 n 步,就是你要提供给玩家的局面。按你记录的状态显示局面。由于你的局面是通过移动得到的,它至少有一个解,就是你移动的逆过程。