尝试创建随机(0/1)boolean
操作。我有一个多维数组设置。到目前为止,一切正常。我在正确的道路上吗?我目前使用递归;有没有更有效的方法来做到这一点?
function randomMove(){
var cs=b.length,
cr=Math.floor((Math.random()*cs)+1)-1,
cc=Math.floor((Math.random()*cs)+1)-1;
if(b[cr][cc]===""){ // THIS IS DEPENDENT ON EXISTING CODE. VIEW FIDDLE. //
// DO STUFF //
} else { randomMove(); }
}
这被认为是为2名球员创造随机动作的好方法吗?或者递归是错误的过程吗?
答案 0 :(得分:3)
选择可能被选中的单元格,然后按索引选择一个随机单元格。
$.fn.random = function(){
return this.eq(Math.floor(Math.random()*this.length));
};
function randomMove(){
$("#board td").not(".o,.comp").random().addClass('comp');
testWin();
}
它选择电路板中的所有单元,从选择中删除具有o
或comp
类的单元,生成0和剩余单元数之间的随机数,然后选择在该索引处添加一个类的单元格。
但是,请注意,由于在第一步中每次移动都是有效的,因此在第一次移动时,您的方法将比上述方法“更快”,因此它将永远不会超过第一次。通过删除.not()
,我可以稍微优化一下以提高效率,但是你的仍然应该“更快”,因为它不必转到DOM。
“更快”是相对的,我的方法将随着表的增长而变得不那么有效,而不是你的第一步。随着越来越多的移动发生,您的方法将变得越来越低效,因为越来越多的可能移动无效。