智能拼图
前几天用win32api写了个拼图游戏,现在写完了,想与大家分享一下。这个拼图游戏,我一共写了两个版本。
一、第一个版本
这是比较原始的版本,包含了拼图游戏所需的基本功能,通过用鼠标点击图片,实现图片的移动,并且,加入了计时和记录步数的功能。
1.效果图:
2.设计思路:
大致的思路是这样的,先加载一张位图,将位图分割成9个小的图片,开一个3*3的POINT数组,用来存储这9张图片的左上角顶点的坐标。程序中我用了两个POINT数组,一个数组p用来记录着终止状态时这九张图片的坐标,数组point用来记录当前时刻9张图片的坐标。这样的话,把对应的point[i]位置的图片加载到p[i]位置,就可以实现将图片分割的效果。
3.注意点;
对于随机打乱图片的位置生成的拼图,有50%的几率是不可解的。我这里生成的拼图是保证可解的。这里有一个知识点,在这种情况下,生成拼图序列的逆序数是偶数就可解;
关键代码:
voidGenerate_Puzzles(){srand((unsigned)time(NULL));intb[NUM*NUM];while(true){memset(vis,false,sizeof(vis));for(inti=0;i