拼数据游戏

第一件事就是加载一张图片,然后分图,然后把分好的图片随机打乱,然后移动检测,也就是哪个部分可以移动以及如何判断完成,然后整理出来就会是这个样子。

1.加载图片:不需要考虑图片的格式和大小。可用的开源库太多了。如果尺寸较大,会对分割产生一定的影响。你可以制作符合尺寸的图片,或者加载后动态收缩或拉伸,这就叫预期尺寸。

2.图像分割:需要考虑的是分割形式、分割坐标和面积大小。对于分段形式,可以是简单的直线分段,也可以是不规则的曲线分段,因为考虑到用键盘上下左右的操作,而不是鼠标点击拖动的操作,如果用不规则的曲线分段,播放时操作会感觉很不协调。至于分割坐标,还有面积大小。我们暂且把原来的区域分成9等份吧。之后,如果你有心情,让用户慢慢选择难度(难度越高,你划分的区域越多,每个区域的大小越小),或者判断自动改变用户现有状态的难度...嗯,有心情再慢慢加。

3.图片的随机无序,方法太多了...考虑到方便,我就用时间种子和简单交换,大致是这样的。在0~8的9个位置中,先选择8和0~7的一个随机位置进行交换,然后切换到7和0~6的一个随机位置,再切换到6和0~5的一个随机位置,...

4.移动图片,判断是否完成。对于第一招,一开始我花了一些时间陷入一个误区,但是有一个小插曲立刻解决了问题。一开始我在想如何更好的实现画面的移动,判断可以移动到哪里。能搬的时候,费了不少周折,却没有什么好办法。想着想着就睡着了。梦里梦见有个类似交流会的会议,我也在名单里。然后我就提出了这个问题。过了一会儿,一个女声回答我,“你可以用指针记住图片相邻的邻居节点……”演讲还没结束,我就突然醒了...这个问题就这样被完美地解决了...连我都有点不知所措。好像灵感不是只有上厕所的时候才有。事实证明,当你睡觉时,你会...判断是否完成,这就简单多了。你只需要记录下无序前的有序状态,每次移动后将所有图片的当前状态与原始状态进行对比。如果一致,..........将...嗯,很简单。...

接下来,还有一些更细致的设计。对于每一个图片载体,我希望它不能只存储一张图片并显示出来,因为就这样,它无法实现我所需要的功能,它还需要一些其他的数据,比如图片的logo类似于数字或者叫ID的东西,来判断图片放在哪里是正确的。

那么也许我需要一个坐标,嗯...当然,我需要一个可以存储图片的数据类型。当然我以后可能会加更多的东西,但是我现在就可以开始写代码,各种情况无法预料...对于这个类的设计,我当时想到了几种方法。第一种是从加载图片的picture类派生,并向其中添加所需的私有成员。然后为其添加访问方法。第二种是从可以加载和显示图片的控件中派生,把图片类型的成员变量添加到派生类的成员函数中,还有一些其他的东西。第三种是相对独立的类,没有任何基类,看起来就像一个编织袋,把需要的数据都打包了...其实三种都可以实现,但是第二种方法相对更容易实现,所以我采用了这种方法.....