经典扫雷——JS原生代码

JS原生写扫雷,
如何不用xy坐标写出扫雷
附带思路图

function Mine(tr,td,leinum,num){
    this.tr=tr;
    this.td=td;
    this.arrsy=[];
    this.arrss=[];
    this.num=num;
    this.leinum=leinum;
    this.yuleinum=leinum;
    this.dom=document.getElementsByClassName('demo')[0];
    this.yulei=document.getElementsByTagName('span')[0];
}
Mine.prototype.createTable=function(){
    var demoParent=document.createElement('ul');
    demoParent.className=' ';
    for(i=0;i<this.num;i++){
        var demoSon=document.createElement('li');
        this.arrss.push(demoSon);
        this.arrss[i].pos=i;
        this.arrsy.push(demoSon)
        demoParent.appendChild(demoSon);
        // if(this.arrsy[i].type=='lei'){
		// 	demoSon.className='lei'
	    // }
    } 
    this.dom.innerHTML='';
    this.dom.appendChild(demoParent);
    demoParent.style.width=this.tr+'px';
    demoParent.style.height=this.td+'px';
    this.yulei.innerHTML=this.yuleinum;
    this.suoyin();
    this.changenum();
}
Mine.prototype.leirandom=function(){
    var arr=new Array(this.num);
    for(var i=0;i<arr.length;i++){
        arr[i]=this.arrss[i].pos;
    }
    arr.sort(function(){
        return 0.5-Math.random()
    })
    return arr.slice(0,this.leinum);
}
Mine.prototype.suoyin=function(){
    var rn=this.leirandom();
    var n=0;
    for(var i=0;i<this.num;i++){
        if(rn.indexOf(++n)!=-1){
            this.arrss[i]={
                type:'lei'
            }
        }else{
            this.arrss[i]={
                type:'number',
                value:0
            }
        }
    }
}
Mine.prototype.chazhao=function(x){
    var result=[];
    var tdnum=this.td/20;
    for(var i=0;i<this.arrss.length;i++){
            if(i==x+tdnum||(i==x+1&&parseInt(i/tdnum)==parseInt(x/tdnum))||(i==x-1&&parseInt(i/tdnum)==parseInt(x/tdnum))||i==x-tdnum){
                result.push(i);
            }else if((i==x+tdnum+1&&parseInt(x/tdnum+1)==parseInt(i/tdnum))||
                    (i==x+tdnum-1&&parseInt(x/tdnum+1)==parseInt(i/tdnum))||
                    (i==x-tdnum+1&&parseInt(x/tdnum-1)==parseInt(i/tdnum))||
                    (i==x-tdnum-1&&parseInt(x/tdnum-1)==parseInt(i/tdnum))){
                        result.push(i);
            }else{
                continue;
            }
        }
    return result;
}
Mine.prototype.changenum=function(){
    for(var i=0;i<this.arrss.length;i++){
        this.arrss[i].pos=i;
        var nn=this.chazhao(this.arrss[i].pos);
        if(this.arrss[i].type=='number'){
            continue;
        }else{
            for(var k=0;k<nn.length;k++){
                this.arrss[nn[k]].value +=1;
            }
        }
    }
    
}
Mine.prototype.playgame=function(){
    this.createTable();
    var This=this;
    this.dom.oncontextmenu=function(e){
        e.preventDefault();
        e.stopPropagation();
        var event=e.target;
        if(event.className==''){
            event.className='hongqi';
        }else{
            event.className='';
        }
    }
    this.dom.onclick=function(e){
        var event=e.target;
        var cur=This.arrss[event.pos];
        if(cur.type=='lei'){
            event.className='lei';
            alert('游戏结束!');
        }else if(cur.type=='number'&&cur.value!=0){
            event.className='num';
            event.innerHTML=cur.value;
        } 
        
        else{
            event.innerHTML='';
            event.className='num';
            function getAllZero(x){
                var all=This.chazhao(x);
                console.log(all)
                for(var i=0;i<all.length;i++){
                    This.arrsy[all[i]].className='num';
                    if(This.arrss[all[i]].value==0){
                        if(!This.arrss[all[i]].check){
                            This.arrss[all[i]].check=1;
                            This.arrsy[all[i]].innerHTML='';
                            getAllZero(all[i]);
                            }
                        }else{
                            This.arrsy[all[i]].innerHTML=This.arrss[all[i]].value;
                    }
                }
            }
            getAllZero(cur.pos);
        }
    }
}
var mine=new Mine(200,200,10,100);
mine.playgame();


我自己写的扫雷,没写完整,利用创建和数字去代表坐标,然后慢慢递归,递归哪里就看看就好了!思路图如下,可以参考参考
都是思路顺序写的
各位看官们,仅供参考哈!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值