2013-06-21 232 views
0

大家好! 昨天,我開始爲我想製作的網站製作一個tic-tac-toe遊戲。經過大約10個小時的工作後,我想出了大約150行代碼,僅用於簡單的遊戲。像往常一樣,當我編寫大量的代碼時,我無法識別的東西出錯了。我的整個代碼都不起作用。由於大量的代碼,我複製粘貼我的代碼到一個jsFiddle項目,URL如下所示。我的問題是:我可以使用數組或某種類型的數據來減少if語句和冗餘的數量嗎?如果任何人也可以幫助我創建更快,更高效的代碼,我會非常感激。提前致謝!Javascript井字棋遊戲

jsfiddle.net/justinpchang/3L6tp/

+2

如果你正在尋找提高代碼質量的一般,你可以去這裏:http://codereview.stackexchange.com/ – Ian

+0

我建議你不要***寫你的id標籤,你的方式做('id =「something」')。正確的方法:'id =「something」'。 –

回答

2

爲什麼不能有這樣的事情:

/* This represents the current game, declare it upon starting a new game*/ 
var board = [['-','-','-'],['-','-','-'],['-','-','-']]; 

function notTaken(board,row,col) { 
    return (board[row][col] == '-'); 
} 

function hasX(board,row,col) { 
    return (board[row][col] == 'x'); 
} // have a similar function for O 

這消除了大量冗餘的代碼。另外,使用HTML5,您可以將自定義屬性添加到您的div元素中,該元素將指定單元格的行和列。因此,例如top-mid div將具有屬性「data-row」和「data-col」,值分別爲0和1。我認爲屬性名稱必須以「data-」開頭,但我不確定。

哦,還有一件事:永遠不要把布爾變成真或假,這是多餘的。而不是做:(!some_bool = FALSE) 只要做到: (some_bool)

由於布爾值只能是真或假的反正。同樣的: (some_bool == false) 可以寫成: !(some_bool)

希望這有助於。

+0

OMG謝謝@ Dan445 – justinpchang

3

您是否嘗試過通過JSLint運行呢?它驗證你的代碼並尋找潛在的錯誤。它也會傷害你的感受。

+2

爲您的幽默和真實的答案而投票。 –

+0

jslint的一半問題是編譯器不喜歡的空間。 – justinpchang

+0

@justinpchang你可以選擇你想要的規則,禁用空白檢查,如果你喜歡凌亂的空白。 – Halcyon

0

通過複製/粘貼遍佈整個地方的代碼,您可以擊敗編程的目的......嘗試在代碼中查找模式,並使函數對不同的變量執行相同的操作。那麼它會更具可讀性和可擴展性。