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