вот немного переписал функцию:
function genCubeMap()
{
var reqX, reqY;
var zanyato = false;
for (var i=0; i < fieldSize; i++)
{
do
{
zanyato = false;
reqX = parseInt(Math.random()*4);
if (reqX == 4) reqX = 3;
reqY = parseInt(Math.random()*4);
if (reqY == 4) reqY = 3;
for (var n=0; n < i+1; n++)
{
if (cubeMap[n] && cubeMap[n][1] == reqX && cubeMap[n][2] == reqY)
{
zanyato = true;
break;
}
}
}
while (zanyato);
cubeMap[i] = [i<fieldSize-1 ? i+1 : null, reqX, reqY, '|'];
}
}
я большой противник рекурсий. лучше рекурсию заменить на цикл.
и метод random принимает значения от 0 до 1. т.е. вам нужен диапазон от 0 до 3. если при вашем подходе рандом выдаст 1.. и умножить на 4, то получится 4.. это конечно редко будет по теории вероятности, но будет...