Итак, у меня есть итерационный вопрос для моей версии Conway's Game of Life (Это не мой код, просто пример логики игры). Таким образом, в основном есть несколько размеров игрового поля, идущих от 32 (W) X16 (H) и возрастающих от 2 до 1024 (W) X512 (H). Я создаю аудио-версию, так что всякий раз, когда ячейка становится живой, веб-аудио воспроизводит заметку осциллятора на короткое время. Частота и усиление этой ноты зависят от того, где на доске находится аудио. У меня есть 32 частотных узла и 16 узлов усиления, поэтому ячейка в верхней правой части платы будет воспроизводить ноту на самой высокой частоте и наибольшее усиление (.8). Моя проблема возникает, когда размеры платы увеличиваются, например, 64X32. У меня возникли проблемы с выяснением логики того, как определить, какую ноту и выгоду использовать, поскольку ячейки в позиции 0 и 1 (слева направо снизу) будут иметь одинаковую частоту, равно как и ячейки в позиции 0 и 1 (вверху слева от левого угла) имеют одинаковый коэффициент усиления. Вот код для моей части, где у меня возникли проблемы:Итерация через сетки различного размера для воспроизведения звука для игры жизни Конвея
function updateGame()
{
// GO THROUGH THE UPDATE GRID AND USE IT TO CHANGE THE RENDER GRID
for (var i = 0; i < gridHeight; i++)
{
for (var j = 0; j < gridWidth; j++)
{
// HOW MANY NEIGHBORS DOES THIS CELL HAVE?
var numLivingNeighbors = calcLivingNeighbors(i, j);
// CALCULATE THE ARRAY INDEX OF THIS CELL
// AND GET ITS CURRENT STATE
var index = (i * gridWidth) + j;
var testCell = updateGrid[index];
// CASES
// 1) IT'S ALIVE
if (testCell === LIVE_CELL)
{
if (gridWidth == 32)
{
if (gainHeight == 0)
{
gainNode[0].gain.value = .05;
osc[i].connect(gainNode[0]);
gainNode[0].connect(context.destination);
}
else {
gainNode[j].gain.value = .05 * j;
osc[i].connect(gainNode[j]);
gainNode[j].connect(context.destination);
}
osc[i].start(context.currrentTime);
if (context.currentTime == .5)
{
gainNode[0].gain.value = 0;
osc[i].connect(gainNode[0]);
gainNode[0].connect(context.destination);
}
}
else if (gridWidth == 64) //issues begin here
{
if (gainHeight == 0 && (j == 0 || j == 1))
{
}
else
{
}
}
else if (gridWidth == 128)
{
}
else if (gridWidth == 256)
{
}
else if (gridWidth == 512)
{
}
else {
}
// 1a FEWER THAN 2 LIVING NEIGHBORS
if (numLivingNeighbors < 2)
{
// IT DIES FROM UNDER-POPULATION
renderGrid[index] = DEAD_CELL;
}
// 1b MORE THAN 3 LIVING NEIGHBORS
else if (numLivingNeighbors > 3)
{
// IT DIES FROM OVERCROWDING
renderGrid[index] = DEAD_CELL;
}
// 1c 2 OR 3 LIVING NEIGHBORS, WE DO NOTHING
else
{
renderGrid[index] = LIVE_CELL;
}
}
// 2) IT'S DEAD
else if (numLivingNeighbors === 3)
{
renderGrid[index] = LIVE_CELL;
}
else
{
renderGrid[index] = DEAD_CELL;
}
}
}
}
Я на самом деле не реализовал звуковую часть кода все же, как я хотел, чтобы убедиться, что я имел правильную логику идти вперед, прежде чем я начал возиться с веб-аудио. У меня есть массив, заполненный 32 узлами осциллятора, и массив, заполненный 16 узлами усиления, оцененными от .05 до .8. Спасибо за помощь, и, надеюсь, это имело смысл!
Нет, это был ответ, на который я надеялся. Просто не был уверен, как это выполнить синтаксически. Спасибо за быстрый ответ! – TeamRival