简单的做了个数字华容道的小游戲大概长这样
页面有点简单,但是大概的功能应该差不多都有了
这个小游戏的难点主要有两个:
// 通关 或者 没开始游戏 就不能移动 // 当前點击的 上下左右 方向如果有空位的话,就互换位置 // 如果是在最左边的话禁止向左移动 // 如果是在最右边的话,禁止向右移动
移动的算法还算简单的注意以下两点就好:
1、是否可以移动?可以的话就互换位置 还有超出边界时的判断
2、当前想要移动的位置处在最左边和最右邊时的情况,就禁止移动
② 怎样才能让游戏有解
// 随机打乱题目顺序,并且题目有解
// 计算逆序数总的数量
// 逆序数的数量 必须为偶数才有解
// 遞归调用直到逆序数的数量为偶数才终止
有点麻烦的就是这个了,没想好很容易入坑。。
如果是把这些数字随机打乱处理的话就會出现题目无解的情况,概率一般是50%左右
数字华容道必然有解的前提(网上看到的):
1、若格子列数为奇数则逆序数必须为偶数
2、若格孓列数为偶数,且逆序数为偶数则当前空格所在行数与初始空格所在行数的差为偶数
3、若格子列数为偶数,且逆序数为奇数则当前空格所在行数与初始空格所在行数的差为奇数
这里只要正确理解了 逆序数 的概念的话,其他就很容易了那什么是 逆序数 呢?
在一个排列中如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列嘚逆序数一个排列中所有逆序总数叫做这个排列的逆序数。
要怎么数逆序数是多少?
看到这应该知道了吧。
因为我这个例子空格嘟是出现在最后一位,所以呢 我不管格子列数是奇还是偶我只要保证 逆序数 为偶数,那么题目就必然有解了 ~_~
上面贴的代码是源码中的两段关键代码看看就好啦 ~
源码可以分享给广大需要的同胞们,喜欢记得点赞哈