2016-10-28 148 views
-1

我想爲類似於tic tac toe的遊戲創建一個網格,除非您希望獲得連續5個而不是3個,這意味着我需要9個以上的單元格爲電網。我需要一個類似紙張的網格,網格中的每個單元格都是可點擊的,並在點擊時變爲某種顏色。每個單元需要有一個單獨的標籤,因爲稍後當程序需要確定玩家是否連續獲得五個時,我將需要它。例如,第一行的第二個單元格是單元格[2] [1]。在js/html/css中製作單元格的可點擊網格

我有什麼至今:

for (var x=0;x <gridWidth; x=x+10){ //each cell is 10px by 10px 
    for (var y=0; y<gridHeight; y=y+10){ 
     return Cell[x][y]; //I am not sure how to print out a cell at each of these 'coordinates'. 
    }; 
}; 
+2

我們將需要比這多得多代碼,以幫助。你所有的東西都是循環遍歷每個單元格並返回一些東西,但是因爲它返回,它實際上只是第一個單元格。如果您可以設置一個適用於JSFiddle或Codepen中的內容的演示程序,這將會很有幫助。 – samanime

回答

1

編輯:我已經修改了代碼婁dinamically產生的網格。


注意:請注意,這個答案用了jQuery。


首先,您可以創建一個函數來生成網格。它會循環行和列,正如你試圖做的那樣,但它會返回一個正確的HTML代碼的字符串。您將使用jQuery將該HTML字符串作爲HTML元素追加到文檔中。

順便說一句,你不應該嘗試設置JavaScript的單元格的大小,因爲你有CSS。

當用戶點擊單元格時,可以使用jQuery .index()來檢索單元格的索引,並從中檢索它所屬的行和列。

最後,要更改單元格的顏色,您只需編輯它的background-color屬性。

像這樣的東西可以幫助你開始:

function generateGrid(rows, cols) { 
 
    var grid = "<table>"; 
 
    for (row = 1; row <= rows; row++) { 
 
     grid += "<tr>"; 
 
     for (col = 1; col <= cols; col++) {  
 
      grid += "<td></td>"; 
 
     } 
 
     grid += "</tr>"; 
 
    } 
 
    return grid; 
 
} 
 

 
$("#tableContainer").append(generateGrid(5, 5)); 
 

 
$("td").click(function() { 
 
    var index = $("td").index(this); 
 
    var row = Math.floor((index)/5) + 1; 
 
    var col = (index % 5) + 1; 
 
    $("span").text("That was row " + row + " and col " + col); 
 
    $(this).css('background-color', 'red'); 
 
});
td { 
 
    border: 1px solid; 
 
    width: 50px; 
 
    height: 50px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<span>Select a cell!</span> 
 
<div id="tableContainer"></div>

+0

我總是很好,但我想知道原因以防我可以改善我的答案。到目前爲止,我看到,它正在做OP所要求的。 – David

+2

(注意:我沒有downvote。)**個人觀點:** OP的努力水平似乎不是最低限度,我們應該幫助他們解決他們的代碼問題,而不是寫給他們。 **並提出一些改進迴應的建議:**對於這樣一項簡單的任務,jQuery不是必需的,OP沒有提及它。我並不是說這不是一種有效的方法,作爲一種替代方法是很好的,但它應該像這樣呈現。另外,爲HTML構建字符串也很麻煩。我建議使用document.createElement和element.appendChild在運行時構造真正的DOM元素和結構。 – TheJim01

+0

@ TheJim01:感謝您的評論。我需要說的是,實際上,你是對的。在開始爲他編碼之前,我應該(作爲samanime的)推薦進一步的研究/工作。關於jQuery,你也是對的,我甚至沒有注意到OP沒有標記它。現在,說實話,我懶得重寫它在香草js,所以我只是添加了一個警告。但關於構建HTML,我不認爲有明確的贏家。效率很大程度上取決於情況和瀏覽器,以及維護和可讀性......我想說的是一個品味問題。也許DOM方法更清晰,但也更詳細。 – David