Я пытаюсь создать сетку из квадратов, которые «включаются» при вводе правильной клавиши, а затем «выключаются» при щелчке мышью. В моей программе генерируется случайный номер индекса, который соответствует значению Unicode для конкретной клавиши, и случайный квадрат на сетке окрашивается в зеленый цвет при нажатии этой клавиши. После перекрашивания создается новый индекс для другого ключа и т. Д. Щелчок мышью по последнему цветному квадрату может «снять цвет» (изменить цвет на черный), но не к другим ранее окрашенным квадратам.
Проблема, похоже, заключается в том, что код mousePressed привязан к тому элементу в массиве, который был в последний раз окрашен, но я не могу понять, как заставить его взаимодействовать с любым элементами в массиве которые были окрашены. Это вообще возможно? Я подумал об изменении массива так, чтобы положение каждого элемента в самом массиве было перетасовано, но формы, которые он создает, все еще располагаются в сетке, а затем повторяются в обратном направлении при каждом щелчке мыши. Но я не могу понять, как перетасовать массив, не входя в Java, с которым я не знаком. Это решаемая проблема или я должен как-то настроить свой код? Вот что у меня есть:
Основной скрипт:
int cols = 16;
int rows = 10;
boolean light = false;
Box[][] boxes = new Box[cols][rows];
int keyIndex = int(random(97, 122));
int randI = (int)random(0, cols);
int randJ = (int)random(0, rows);
void setup() {
size (800, 600);
background (0);
for (int i = 0; i < cols; i++) {
for (int j = 0; j < rows; j++) {
boxes[i][j] = new Box(i, j);
}
}
println(keyIndex);
}
void draw() {
if (light == true) {
boxes[randI][randJ].rollover(mouseX, mouseY);
boxes[randI][randJ].displayOn();
} else {
boxes[randI][randJ].displayOff();
}
}
void mousePressed() {
if (boxes[randI][randJ].onPress(mouseX, mouseY)) {
println("yes");
light = false;
} else {
println("no");
}
}
void keyPressed() {
if (boxes[randI][randJ].keyRight()) {
light = true;
randI = (int)random(0, cols);
randJ = (int)random(0, rows);
keyIndex = int(random(97, 120));
println(keyIndex);
}
}
Класс "Ящик":
class Box {
float x, y;
color c;
int size = 50;
Box (int valX, int valY) {
x = valX * size;
y = (int) random(0, valY) * size;
}
void displayOn() {
fill(c);
rect(x, y, size, size);
c = #b1f64d;
}
void displayOff() {
fill(c);
rect(x, y, size, size);
c = #000000;
}
void rollover(float mx, float my) {
if (mx > x && mx < x + size && my > y && my < y + size) {
c = 126;
}
}
boolean onPress(float mx, float my) {
if (mx > x && mx < x + size && my > y && my < y + size) {
return true;
} else {
return false;
}
}
boolean keyRight() {
if (key == keyIndex) {
return true;
} else {
return false;
}
}
}