Created
May 12, 2013 18:20
-
-
Save jeffThompson/5564439 to your computer and use it in GitHub Desktop.
Simple Processing sketch to generate algorithmic islands
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
SMELL GAME LEVEL TESTS | |
Jeff Thompson | 2013 | www.jeffreythompson.org | |
Ideas: | |
+ Run forest fire simulation to set terrain | |
*/ | |
int w = 200; | |
int h = 200; | |
int maxInsetMove = 1; // amount the land can move inward per step (up to edgeThresh) | |
int edgeThresh = 200; | |
int[][] level = new int[h][w]; | |
void setup() { | |
size(w, h); | |
for (int i=0; i<120; i++) { | |
if (i%20 == 0) { | |
maxInsetMove += 1; | |
} | |
createLevel(w, h, maxInsetMove, edgeThresh); | |
displayLevel(color(70, 150, 220), color(75, 95, 40), true, i); | |
} | |
} | |
void createLevel(int w, int h, int maxInsetMove, int edgeThresh) { | |
// clear level | |
for (int y=0; y<h; y++) { | |
for (int x=0; x<w; x++) { | |
level[y][x] = -1; | |
} | |
} | |
// top | |
int rx = 0; | |
int ry = 0; | |
while (rx < w) { | |
for (int y=ry; y>=0; y--) { | |
level[y][rx] = 1; | |
} | |
rx += int(random(0, 2)); | |
rx = constrain(rx, 0, w); | |
ry += int(random(-maxInsetMove, maxInsetMove)); | |
ry = constrain(ry, 0, edgeThresh); | |
} | |
// bottom | |
rx = 0; | |
ry = height-1; | |
while (rx < w) { | |
for (int y=ry; y<h; y++) { | |
level[y][rx] = 1; | |
} | |
rx += int(random(0, 2)); | |
rx = constrain(rx, 0, w); | |
ry += int(random(-maxInsetMove, maxInsetMove)); | |
ry = constrain(ry, height-edgeThresh, height-1); | |
} | |
// left | |
rx = 0; | |
ry = 0; | |
while (ry < h) { | |
for (int x=rx; x>=0; x--) { | |
level[ry][x] = 1; | |
} | |
ry += int(random(0, 2)); | |
ry = constrain(ry, 0, h); | |
rx += int(random(-maxInsetMove, maxInsetMove)); | |
rx = constrain(rx, 0, edgeThresh); | |
} | |
// right | |
rx = w-1; | |
ry = 0; | |
while (ry < h) { | |
for (int x=rx; x<w; x++) { | |
level[ry][x] = 1; | |
} | |
ry += int(random(0, 2)); | |
ry = constrain(ry, 0, h); | |
rx += int(random(-maxInsetMove, maxInsetMove)); | |
rx = constrain(rx, w-edgeThresh, w-1); | |
} | |
} | |
void displayLevel(color sea, color land, boolean saveIt, int iteration) { | |
loadPixels(); | |
for (int i=0; i<pixels.length; i++) { | |
if (level[i/width][i%width] == 1) { | |
pixels[i] = sea; | |
} | |
else { | |
pixels[i] = land; | |
} | |
} | |
updatePixels(); | |
if (saveIt) { | |
save("output/island_" + iteration + ".png"); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment