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();
我自己写的扫雷,没写完整,利用创建和数字去代表坐标,然后慢慢递归,递归哪里就看看就好了!思路图如下,可以参考参考
各位看官们,仅供参考哈!