xxxxxxxxxx
/**
* Hexagon Dancers (v1.0.2) [Java/Pjs]
* GoToLoop (2021/Oct/03)
*
* https://Discourse.Processing.org/t/
* pick-random-number-based-on-preceding-number/32558/13
*
* https://OpenProcessing.org/sketch/1292231
*/
static final byte[][] ADJACENTS = {
{ 2, 5, 6 }, // 1
{ 1, 3, 6, 7 }, // 2
{ 2, 4, 7, 8 }, // 3
{ 3, 8, 9 }, // 4
{ 1, 6, 10 }, // 5
{ 1, 2, 5, 7, 10, 11 }, // 6
{ 2, 3, 6, 8, 11, 12 }, // 7
{ 3, 4, 7, 9, 12, 13 }, // 8
{ 4, 8, 13 }, // 9
{ 5, 6, 11 }, // 10
{ 6, 7, 10, 12 }, // 11
{ 7, 8, 11, 13 }, // 12
{ 8, 9, 12 } // 13
};
final Hexagon[] hexagons = new Hexagon[ADJACENTS.length];
static final int DANCERS = 2, TXT_SIZE = 050, FPS = 1;
final Dancer[] dancers = new Dancer[DANCERS];
static final boolean JAVA = 1/2 != 1/2.;
void setup() {
size(400, 300);
frameRate(FPS);
textSize(TXT_SIZE);
textAlign(CENTER, CENTER);
createHexagons();
createDancers();
if (JAVA) {
printArray(hexagons);
println();
printArray(dancers);
println();
}
}
void draw() {
background(0);
for (final Dancer dancer : dancers) dancer.randomMove().display();
print(dancers);
println("\tFrame: " + frameCount);
}
void createHexagons() {
for (int i = 0; i < ADJACENTS.length; ++i)
hexagons[i] = new Hexagon(i + Hexagon.LOWEST, ADJACENTS[i]);
}
void createDancers() {
final int w = width, h = height;
final int dim = h >> 1, cy = h - dim >> 1, off = 30;
final color red = #FF0000, blue = #0000FF, yellow = #FFFF00;
int idx;
idx = (int) random(ADJACENTS.length);
dancers[0] = new Dancer(hexagons[idx], off, cy, dim, red, yellow);
idx = (int) random(ADJACENTS.length);
dancers[1] = new Dancer(hexagons[idx], w - dim - off, cy, dim, blue, yellow);
}
class Hexagon {
static final int LOWEST = 1, HIGHEST = 13;
int value;
byte[] adjacents;
Hexagon(final int val, final byte[] neighbors) {
value = val;
adjacents = neighbors;
}
boolean isNeighborOrSame(final int val) {
return val == value? true : isNeighbor(val);
}
boolean isNeighbor(final int val) {
for (final byte neighbor : adjacents) if (val == neighbor) return true;
return false;
}
String toString() {
return value + ": { " + join(str(adjacents), ", ") + " }";
}
}
class Dancer {
Hexagon floor;
int x, y, dim;
color floorColor, textColor;
Dancer(
final Hexagon tile,
final int px, final int py, final int diam,
final color squareColor, final color txtColor
)
{
floor = tile;
x = px;
y = py;
dim = diam;
floorColor = squareColor;
textColor = txtColor;
}
Dancer randomMove() {
int val;
//do val = (int) random(Hexagon.LOWEST, Hexagon.HIGHEST + 1);
//while (!floor.isNeighborOrSame(val));
while (!floor.isNeighborOrSame(
val = (int) random(Hexagon.LOWEST, Hexagon.HIGHEST + 1)));
floor = hexagons[val - Hexagon.LOWEST];
return this;
}
Dancer display() {
fill(floorColor);
rect(x, y, dim, dim);
fill(textColor);
text(floor.value, x + dim/2, y + dim/2);
return this;
}
String toString() {
return "Floor: " + floor.value;
}
}