color[] tiles; int tileSize = 32; int tileCount = 256 / tileSize; int selectedTile = -1; void setup() { size(260, 260); tiles = new color[tileCount * tileCount]; for (int i = 0; i < tileCount * tileCount; i++) { tiles[i] = color(random(255), random(255), random(255)); } framerate(30); } void draw() { if (selectedTile != -1) { color selectedColor = tiles[selectedTile]; ArrayList neighbors = neighborsOf(selectedTile); for (int i = 0; i < neighbors.size(); i++) { int each = ((Integer)neighbors.get(i)).intValue(); color eachColor = tiles[each]; int mixRed = (int)min(255, red(selectedColor) * 0.1 + red(eachColor) * 0.9); int mixGreen = (int)min(255, green(selectedColor) * 0.1 + green(eachColor) * 0.9); int mixBlue = (int)min(255, blue(selectedColor) * 0.1 + blue(eachColor) * 0.9); tiles[each] = color(mixRed, mixGreen, mixBlue); } } background(255); for (int y = 0; y < tileCount; y++) { for (int x = 0; x < tileCount; x++) { noStroke(); fill(tiles[y * tileCount + x]); rect(x * 32 + 4, y * tileSize + 4, 28, 28); } } } void mousePressed() { int mouseXWithoutBorder = mouseX - 2; int mouseYWithoutBorder = mouseY - 2; int tileX = mouseXWithoutBorder / tileSize; int tileY = mouseYWithoutBorder / tileSize; tileX = (int)constrain(tileX, 0, tileCount - 1); tileY = (int)constrain(tileY, 0, tileCount - 1); selectedTile = tileY * tileCount + tileX; } ArrayList neighborsOf(int tile) { ArrayList neighbors = new ArrayList(); int tileX = tile % tileCount; int tileY = tile / tileCount; if (tileY > 0) { if (tileX > 0) neighbors.add(new Integer(tile - tileCount - 1)); neighbors.add(new Integer(tile - tileCount)); if (tileX < (tileCount - 1)) neighbors.add(new Integer(tile - tileCount + 1)); } if (tileX > 0) neighbors.add(new Integer(tile - 1)); if (tileX < (tileCount - 1)) neighbors.add(new Integer(tile + 1)); if (tileY < (tileCount - 1)) { if (tileX > 0) neighbors.add(new Integer(tile + tileCount - 1)); neighbors.add(new Integer(tile + tileCount)); if (tileX < (tileCount - 1)) neighbors.add(new Integer(tile + tileCount + 1)); } return neighbors; }