0

2D配列を作成し、4つの「X」を対角線上に配置してXの数を検出およびカウントするための二重ループを作成しようとしましたが、正常に機能しません。実際には、Xの数をカウントします。すべての行で、私の質問では、対角線上のXだけをカウントさせるにはどうすればよいですか?

    var creatematrix = function (nbRang, nbColumn) {
        var result = Array(nbRang);
        for (var i=0; i<nbRang; i++) {
            result[i] = Array(nbColumn);
        }
        return result;
    };

    var m = creatematrix(6, 7);

たとえば、私がこれをした場合

      m[4][1] = "X";
      m[3][2] = "X";
      m[2][3] = "X";
      m[1][4] = "X";

      m[5][3] = "O";
      m[3][3] = "O";
      m[4][3] = "O";
      m[2][4] = "O";

またはこれは結果は同じです

    m[1][1] = "X";
    m[2][1] = "X";
    m[3][1] = "X";
    m[4][1] = "X";



    m[5][3] = "O";
    m[3][3] = "O";
    m[4][3] = "O";
    m[2][4] = "O";

これが私が持っているものです:

   var sumX = 0;
   for(var k = 5; k >= 0  ; k--){
       if(sumX == 4){
           alert("player 1 won");
       }
       for(var i = 0 ; i<= 6; i++){
           if(m[k][i]== "X" ){
               sumX += 1;
               break;
           }
           if(m[k][i]== "O" ){
              sumX = 0;         
           }
       }
   }    
4

1 に答える 1

1
function getCount(m){
    var count =0;
    for(var i=0; i<m.length; i++)
    {
      if(m[i][m.length-i-1] === "X")
      {
         count++;
      }
    }

    return count;
}

対角線を下って、各値を確認します。

短い(しかし読みにくい)バージョンを使用することもできます

function getCount(m){
    return m.reduce(function(prev,current,index,arr){ 
      return prev + current[arr.length-index-1];},0);
}

JSFiddle

于 2013-03-24T17:44:44.677 に答える