2015-10-06 35 views
0

(我是JS的全新品牌,所以請耐心等待)我使用桌子來構建滑動拼圖遊戲。我需要一個能夠擾亂值的函數,但我不知道如何讓它在表格單元格中顯示。現在我的代碼只是按順序顯示數字。 我有兩個功能 - 一個建表和其他洗牌值:JavaScript滑塊拼圖 - 加擾值

var _r = 3; 
    var _c = 3; 


//initializes the puzzle 
function newPuzzle(r, c) 
{ 
    var table = document.createElement("table"); 
    table.id = "myTable"; 

    for (var i = 0; i < r; i++) 
    { 
     var row = document.createElement('tr'); 
     for (var j = 0; j < c; j++) 
     { 
     var column = document.createElement('td'); 
     row.appendChild(column);  
     } 
     table.appendChild(row); 
    } 
    document.body.appendChild(table); 


    //end of table creation 
    //populate the table 
    var cell = new Array(r); 
    for (var i = 0; i < r; i++) 
    { 
     cell[i] = new Array(c); 
     for (var j = 0; j < c; j++) 
     { 
     cell[i][j] = i*c + j; 
     } 
    } 
    cell[0][0] = " "; 

    for (var i = 0; i < cell.length; ++i) 
    { 
     var entry = cell[i]; 
     for (var j = 0; j < entry.length; ++j) 
     { 
      var n = 0; 
      var gridTable = document.getElementsByTagName("table"); 
      gridTable[0].rows[i].cells[j].innerHTML = cell[i][j]; 
      document.getElementById("myTable").rows[i].cells[j].id = "even" + (i*c+j); 

     }  
    } 

shuffle(); 
} 


function shuffle() 
{ 

//declare and populate array 
var _array = new Array(); 

for (var i = 0; i <= r*c; i++) 
{ 
    _array[i] = i; 
} 

//shuffle tiles 
for (var i = 0; i <= r*c; i++) 
{ 
    var rand = Math.floor(Math.random() * _array.length) + i; 
    var temp = _array[rand]; 
    _array[rand] = _array[i]; 
    _array[i] = temp; 
} 

//check to see if puzzle is solveable 
var count = 0; 
for (var i = 0; i <= r*c; i++) 
{ 
    for (var j = i; j <= r*c; j++) 
    { 
     if (_array[j] < _array[i]) 
     { 
     count++; 
     } 
    } 
} 

if (Math.floor(count/2) != count/2) 
{ 
    shuffle(); 
} 
else 
{ 
    for (var i = 0; i < r*c; i++) 
    { 

     //This is where I'm not sure what to do 

     document.getElementsByTagName("td")[i].innerHTML = _array[i]+1; 
    } 
} 

} 

回答

0

你需要你的變量rc傳遞到您的shuffle功能:

function newPuzzle(r, c) 
{ 
    ... 
    shuffle(r, c); 
} 


function shuffle(r, c) { 
    ... 
    if (Math.floor(count/2) != count/2) 
    { 
     shuffle(r, c); 
    } 
} 

而且還要求newPuzzle(_r, _c);我假設你是。

只需它的工作原理是改變,唯一的問題是,NaN在這種情況下,你可以很容易地解決這個問題通過檢查值NaN然後替換以空格:

if(isNaN(_array[i])) 
    document.getElementsByTagName("td")[i].innerHTML = " "; 

Fiddle Example

+0

謝謝,這使洗牌功能工作,但不完全 - 當我刷新數字移動,但有多個空白/所有數字都沒有被表示。我的HTML存在一個問題,但我所做的只是在加載頁面時調用newPuzzle函數(body onload =「newPuzzle(_r,_c)」) - 任何想法爲什麼? – user5407906

+0

*「多於一個空格/所有數字都沒有被表示」* - 您能否在示例小提琴中顯示我,特別是許多空格? –

+0

好的,只是在我的代碼中澄清我不在我的.js文件中調用newPuzzle函數,但由於某種原因,如果我不包含它在小提琴中,沒有任何反應。但是,如果你忽視這一點,那麼基本上你的程序就會按照它的方式運行。 https://jsfiddle.net/L8wp4pca/ – user5407906