2013-06-21 181 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

通过复制/粘贴遍布整个地方的代码,您可以击败编程的目的......尝试在代码中查找模式,并使函数对不同的变量执行相同的操作。那么它会更具可读性和可扩展性。