你是想问这段代码为什么要判断同一个格子生成两个数字的情况么?
因为随机数无法做判重处理,所以得通过一步if操作来进行判断;
如果格子有数字,那么这个位置的数组值肯定不为0;如果为0,说明这个格子还没有数字,之后才能往这个位置写入数字
代码无法解析或flash出错,要么就是你电脑破
这句的意思是在一个随机的空位上,生成一个2或4的数字;
三元运算符在各个语言中基本都有,使用格式基本都是:条件表达式?表达式1:表达式2。
这里的条件是 Math.random() < 0.5
如果条件满足返回2,否则返回4
其中Math.random() 是生成 [0,1] 的值,达到各50%的概率
2 没有被标签包裹(也就是标签合璧的时候注意一下)
老师说了 floor获取任然是浮点型 比如5.2 floor后是 5.0 而board数组的下标是整型 所以要强制转换成整型 我个人理解
F12打开开发者工具就是
function onemoreSpace(board){
var spaceCell = new Array();
var k = 0;
for (var i = 0; i < 4; i++) {
for (var j = 0; j <4 ; j++) {
if (0==board[i][j]) {
spaceCell[k++] = i*4+j;
}
}
}
return 0!=spaceCell.length ? spaceCell : false;
}
function randOneNum(){
if( voidCell = onemoreSpace(board))
{
// 在可用空间中随机选一个
var randWhere = Math.floor(Math.random() * voidCell.length);
// 随机生成2或4
var randNum = Math.random() < 0.5? 2 : 4;
var x = parseInt(voidCell[randWhere]/4);
var y = voidCell[randWhere]%4;
board [x][y] = randNum;
}
}
我是这样写的 亲测可用!
biubiu
//判断是否还有空区域 function nospace(board){ for(var i = 0;i<4;i++){ for(var j = 0;j<4;j++){ if(board[i][j]==0){ return false; //当有一个位置数字为0时,即还有空位,返回false } } } return true; //全部遍历后无位置为0,即再空位,返回true }
//在棋盘格上显示一个数字 function generateOneNumber(){ if(nospace(board)){ //没有空位置则无法显示 return false; } else{ //存在空位则可以随机位置生成随机数字 //随机一个位置 var randx = parseInt(Math.floor(Math.random()*4)); var randy = parseInt(Math.floor(Math.random()*4)); while(true){ if(board[randx][randy]==0){ //该位置为0时可以添加数字 break; } else{ //否则重新生成坐标 var randx = parseInt(Math.floor(Math.random()*4)); var randy = parseInt(Math.floor(Math.random()*4)); } } //随机一个数字 var randNumber = Math.random()<0.5?2:4; //在随机位置显示随机数字 board[randx][randy] = randNumber; showNumberWithSnimation(randx,randy,randNumber); return true; } }
方便与位置的二位数组一一对应。i代表位置数组中的行数,j代表列数
判断数组board中的随即位置的数是否为0,前提是你已经将前一个随机数的值放进了board中了没!
首先这句的写法应该是:
$('#grid-container').append('<div class="number-cell" id="number-cell-' + i + '-' + j + '"></div>');
可以看成几个部分:append('<div class="number-cell" id="number-cell-' + i + '-' + j + '"></div>')。每一个加粗是一部分,带引号的表示字符串、不带引号的是变量,字符串我用一对单引号包含(用双引号也是可以的)。至于最后一部分'"></div>'中的双引号,他是id名最后面结束的一半双引号。所以这句话实际上是添加了一个div,这个div如果写在html里就是:<div class="number-cell" id="number-cell-i-j"></div>(其中i、j应为数字)
是的,在这个程序里这个返回值没有使用。但是在设计函数中,由于考虑到有些情况无法生成一个新数字(16个棋盘格没有空位的时候),所以留了一个接口,即如果随机数字生成成功,则返回true,并具体生成数字;否则返回false。