Он действительно нарисован под игровым полем.
Проверьте функцию loadCard.Сначала рисуется эллипс / изображение, затем рисуется прямоугольник с тем же значением x / y, поэтому поверх него эргономично.
Немного изменив код, он должен отображать эллипсы / изображение
void loadCard(int cols, int rows, int w, int x,int y,String lines[],PImage flag) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
//draw default so ellipse / img has a background
fill(23, 159, 215);
rect(x, y, w, w);
//draw other cases on top of default
if(lines[i].charAt(j) == '1'){
fill(156, 158, 162);
rect(x, y, w, w);
}
else if(lines[i].charAt(j) == '2'){
fill(225, 169, 26) ;
ellipse(x,y,w/2,w/2);
}
else if(lines[i].charAt(j) == '3'){
image(flag,x,y,w/2,w/2);
}
x = x + w ;
}
y = y + w ;
x = 0 ;
}
}
Поскольку вы учитесь, позвольте мне дать вам 2 совета:
loadStrings () должно происходить только один раз на уровень.Вы не должны помещать это в draw (), потому что draw () вызывается каждый кадр.Он уже вызван в настройке, сейчас это нормально.В конце концов вы можете поместить ее в отдельную функцию и вызывать эту функцию в начале нового уровня.
Если вы используете двойной цикл for для рисования игрового поля, вы можете использовать итераторы (int i иint j) в качестве переменных x / y.Вместо rect(x, y, w, w);
вы можете использовать rect(i*w, j*w, w, w);
.Таким образом, вы будете иметь меньше переменных для управления.