Дима Донской
Профи
(746)
1 год назад
Для реализации задумки вам понадобится изменить алгоритм для определения цвета каждой клетки.
Один из способов это сделать - использовать двумерный массив для хранения текущего состояния каждой клетки (например, состояние от 0 до 1, где 0 - черный, 1 - белый). Затем, внутри вложенного цикла, вы можете проверять каждую клетку и ее восемь соседей для определения нового состояния клетки.
Вот пример кода, который может помочь вам начать:
int spacer;
float[][] cells;
void setup() {
size(512,512);
spacer = 10;
cells = new float[width/spacer][height/spacer];
for (int i = 0; i < cells.length; i++) {
for (int j = 0; j < cells[i].length; j++) {
cells[i][j] = random(0.2, 0.8); // начальное состояние случайно от 0.2 до 0.8
}
}
noLoop();
}
void draw() {
background(0);
for (int y = 0; y < cells[0].length; y++) {
for (int x = 0; x < cells.length; x++) {
float val = cells[x][y];
float sum = 0;
int count = 0;
// проверяем всех соседей клетки
for (int i = -1; i <= 1; i++) {
for (int j = -1; j <= 1; j++) {
if (x+i >= 0 && x+i < cells.length && y+j >= 0 && y+j < cells[0].length) { // проверяем, что сосед в пределах массива
sum += cells[x+i][y+j];
count++;
}
}
}
float avg = sum / count; // среднее значение соседей
if (val < avg) {
val += 0.05; // увеличиваем значение клетки
} else if (val > avg) {
val -= 0.05; // уменьшаем значение клетки
}
cells[x][y] = constrain(val, 0, 1); // ограничиваем значение в пределах от 0 до 1
stroke(cells[x][y] * 255);
square(x * spacer + spacer/2, y * spacer + spacer/2, 2.5 * spacer);
}
}
}
В этом коде используется двумерный массив `cells`, который хранит значения от 0 до 1 для каждой клетки. Затем производится проверка каждой клетки и ее восьми соседей, и в зависимости от их значений, изменяется значение клетки. Каждая клетка затем отображается с помощью функции `square()`.
// Основа
int spacer;
int sila;
void setup() {
size(512,512);
spacer = 10; // Расстояние между клеток
sila = 255; // Мощь квадрата по стандарту белая
strokeWeight(6);
noLoop(); // Run once and stop
}
void draw() {
background(0);
for (int y = 0; y < height; y += spacer) {
for (int x = 0; x < width; x += spacer) {
stroke(sila); // Должно быть по правилам которые я говорил
square(x + spacer/2, y + spacer/2, 2.5); // Квадрат в месте и его размер
redraw();
}
}
}
Но мне надо так, чтобы пока квадрат белый - он чернел, а восемь соседов заставлял светлеть, пока они не достигли максимально белого. Если квадрат, например, белый на 0.5 - он будет чернеть в 0, заставляя соседов всех светлеть а 0.5.
Я совсем не шарю в этом, только пару вещей смог понять