(注)此文章是2年前写的。我一直贴在别的地方,那个地方文章全部删除后我将其搬到了这儿。
前天一时兴起,习惯的打开VC6.0,写了一个拼图游戏——虽然网上有很多可供下载的,但我还是决定自己写一个——因为从大一就想写了,一直拖到现在。
快要考试了,所以没有充裕的时间,但效果还算理想——有图形化菜单、自主选择图片、有音效、自主调节方块数、可调边框颜色……自我感觉还行。也遇到了一些技术、数学方面的难题,所以提出来,一来是对自己的总结,也希望对你有所裨益!大致界面如下,晒晒先:
下面讨论技术问题。谁都知道,拼图游戏就相当与一个宫格图。为了简便起见,下面我一律用9宫格来说明——即3×3格式的拼图。所有人都知道:拼图最后的空白格永远在右下角。那么就相当于下面一个序列:
1 2 3
4 5 6
7 8 9
9所在的位置就是空白格。将此序列按从左到右、从上到下的顺序排列成一行:1 2 3 4 5 6 7 8 9。这下你大一学到的线性代数可派上用场了!!先祭出几个定理:
No1. 对于一个排列——就像a1,a2,a3…an,如果对于前面的一个数,它大于后面的数,就称为逆序,所有的逆序总数就称为逆序数。
No2. 如果一个排列的逆序数为偶(包括0),则称其为偶排列,否则称之为奇排列。
No3. 将任意两个数交换称之为对换。对换改变排列的奇偶性。
No4. 奇排列变成自然排列(由小到大排列)的对换次数为奇数,偶排