小六教你用ReactNative做一个拼图游戏(四) 优化和细节处理
之前我们已经完成了一些基本的内容
打乱算法
之前的打乱算法其实是有些问题的~ 所以我们需要重写这部分
只有图片交换的次数为偶数次时,才是可以还原的拼图。
我们进行打乱算法的重写
_upset(arr) {
let result = arr;
let indexList = [];
for (let i = 0; i < arr.length; i++) {
indexList.push(i);
}
//打乱顺序
//这样打乱的方式不对 详情见https://baike.baidu.com/item/%E4%B8%8D%E5%8F%AF%E8%BF%98%E5%8E%9F%E7%9A%84%E6%8B%BC%E5%9B%BE
// indexList = indexList.sort(function () {
// return (0.5 - Math.random());
// });
let shuffle = () => {
//数字我们只能交换偶数次
let count = parseInt(10 + Math.random() * 10) * 2;//20+40次交换
for (let i = 0; i < 2; i++) {
let hold = null;
var change1 = parseInt(Math.random() * (arr.length - 1));
var change2 = parseInt(Math.random() * (arr.length - 1));
hold = indexList[change1];
indexList[change1] = indexList[change2];
indexList[change2] = hold;
}
};
shuffle();
for (let i = 0; i < arr.length; i++) {
result[i].currentIndex = indexList[i];
if (i == arr.length - 1) {
result[i].isNull = true;
}
}
return result;
}
动画
因为我们是使用State保存样式,所以我们可以使用非常简单的方式去完成我们的动画
一行代码搞定
LayoutAnimation.easeInEaseOut();
至此我们拼图游戏也就快完成了~
出口
最后我们给游戏加上一个出口
_check() {
let result = !this.state.imgList.some((item) => {
return item.index !== item.currentIndex
});
console.log(this.state.imgList);
console.log("check_" + result);
if (result) {
Alert.alert(
'恭喜您',
'完成了一个拼图!',
[
{text: '重新来一局', onPress: () => this._start()},
{text: '取消', onPress: () => console.log('Cancel Pressed'), style: 'cancel'}
],
{cancelable: false}
)
}
}

浙公网安备 33010602011771号