var activeMC:MovieClip;//3*3 MC
//空缺位,可移动位,矩阵数组,正确数量
var move:int,moveArr:Array=[],matrix:Array=[],rightNum:int=8;
//点击交互
function onDown(e:*=null){
var target
if(e){
target=e.target;
}else{
var num=matrix[moveArr[randRange(0,moveArr.length-1)]]
target=activeMC.getChildAt(num) as MovieClip;
}
if(moveArr.indexOf(target.posi) != -1){
//记录操作
var nowmove=move;
//更新
move=target.posi;
listMove();
target.posi=nowmove;
target.x=target.posi%3*135;
target.y=int(target.posi/3)*145;
matrix[move]="kong";//腾出的位置
matrix[nowmove]=target.num;//旧空位的Num
//之前与之后位置值比对
if(move==target.num && target.posi != target.num){
rightNum-=1;
}
if(move!=target.num && target.posi == target.num){
rightNum+=1;
}
gameEnd()
}
}
this.addEventListener(TouchEvent.TOUCH_TAP, onDown)
//判断通关
function gameEnd() {trace(rightNum)
//使用rightNum判断正确性,免去For遍历全部的方式
if(rightNum!=8){
return;
}
if(notEnd){//初始化的过关情况重新来
gameInit();
return;
}
trace('过关')
}
//初始化
var notEnd=true;
function gameInit() {
notEnd=true;
move=rightNum=8;
listMove();
matrix=[];
//activeMC.numChildren
for(var i:int=0;i<8;i++){
var btn=activeMC.getChildAt(i) as MovieClip;
btn.num=i;
btn.posi=i;
btn.x=btn.posi%3*135;
btn.y=int(btn.posi/3)*145;
matrix.push(i)
}
matrix.push("kong");
//随机阵列,初始化可移动块随机点50次
for(var j=0;j<50;j++){
onDown();
}
notEnd=false;
}
// 可移动块计算
function listMove(){
moveArr=[];
move-3>=0?moveArr.push(move-3):"";
(move+1)%3!=0?moveArr.push(move+1):"";
move+3<9?moveArr.push(move+3):"";
(move+1)%3!=1?moveArr.push(move-1):"";
}
function randRange(minNum: Number, maxNum: Number): Number {
return (Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum);
}
gameInit();
逆序数计算
如果纯随机会有一半的概率无法复原拼图,上面的代码初始随机排列模拟的真实点击50次,又发现逆序数的奇偶结果可以判断初始随机是否可以玩。
如2431中,21,43,41,31是逆序,逆序数是4个
付逆序数算法(JavaScript),这里就不整合到代码里了:
function reverseNumber(arr3) {
let a = 0;
console.log(arr3);
for (let i = 0; i < arr3.length; i++) {
let b = arr3[i];
for (let j = i; j < arr3.length; j++) {
let c = arr3[j];
if (b > c) {
a += 1;
}
}
}
if (a % 2 == 0) {//偶数
return "加油~";
} else {
return "你不会成功的!";
}
}
// 获取随机排序数的数组
function randomNum(num) {
var ary = [];
for (var i = 0; i < num; i++) {
ary[i] = i;
}
ary.sort(function () {
return 0.5 - Math.random();//返回随机正负值
});
return ary;//返回数组
}
console.log(reverseNumber(randomNum(9)));
Comments | NOTHING