2016-12-01 3 views
0

私はjavascript/jqueryを使用して地雷探知機のゲームをプログラミングしています。私は空のセルを明らかにすることはできません。私のアルゴリズムは、クリックされた空のセルの8つの隣接を明らかにすることでした。私がdivをクリックすると、コンソールで8回クリックされ、adjElementsの値が失われます。どのように動作させるための助け?地雷探偵ゲームで空のセルを明らかにするには?

ここまで私が何をしたのですか?

//my divs are generated with a function from id '#s-1' to '#s-81' 
var adj=[-10,-9,-8,-1,1,8,9,10]; 

$('.grid').find('div').click(function(event) { 

     var div=this.id; 
     var numDiv=div.replace(/[^\d.]/g, ''); 
     revealSquare(numDiv); 
    }); 


var revealSquare=function(square) { 

    if(!($(square).hasClass('isMine'))) { 

      if($(square).find('span').text()=='') { 

       revealEmptyCells(square); 

        } 
      } 


}; 


var revealEmptyCells=function(clickDiv) { 

    $.each(adj, function(index, val) { 

     if(val+clickDiv>0 && val+clickDiv<=81) { 

        var adjElements=val+clickDiv; 
        console.log('adj: '+adjElements); //it reveals odd numbers like for div #s-1 it reveals 19 
        $('#s-'+adjElements).css({ 
          border: '4px solid #d4d4d3', 
         }); 
} 

    }); 
} 

クリックDIVが空であると仮定すると、私はヴァルを除去+ clickDiv> 0とval + clickDiv < = 81。 div s-1をクリックすると、adj要素は-101、-91、-81、-11,11,81,91,101になります。なぜこれらの値を取得するのですか?

答えて

1
あなたが +操作を実行

、およびオペランドの一つが、結果は数学的な合計ではありません、文字列ですが、二つの連結:以下、あなたの場合は

は数値ではありませんしかし、文字列:

div.replace(/[^\d.]/g, '') 

直前にユニタリ+を追加し、この問題を解決するには、次の

+div.replace(/[^\d.]/g, '') 

今すぐnumDivは数字になり、追加で望ましい効果が得られます。

+0

これは機能しました。ありがとうございました!なぜそれが働いたのか説明できますか?何が間違っていたのですか?私はjavascriptで新しいです。 – Ndx

+0

私は私の答えでそれを説明したと思いますか?あなたのコードは1と9を19としてレンダリングしていましたが、10にレンダリングする必要がありました。オペランドは数字でなければ動作しません。 – trincot

+0

はい、ありがとうございます!今分かります。 – Ndx

関連する問題