Hello all,
I just wrote a simple chess board and make a mcve to demonstrate my problem.
It’s that when you have a 2d array that stores the x,y position for each of the 64 cells, you need in setup() to make the for-loop for Y BEFORE the for-loop for x. I find this a bit confusing.
(which is not stated here: Two-Dimensional Arrays / Processing.org)
Also, since the y-value 8 in chess is BELOW and 1 is on the top (of the board) that is also inverted in comparison to processing where 0 is on the top and height (max) at the bottom. I tackle this in setup() as well.
Maybe someone can check if my reproach (in setup()
and in also in drawChessBoard()
) is correct and shed some light on this.
Order of indices
For example, PVector [][] feldPos = new PVector [9] [9];
:
- can I say
feldPos [x][y]
or is
feldPos [y][x]
(with swapped x and y) better / correct?
Thanks to you all!
Warm regards,
Chrisir
// mcve for Chess board
final int groesseZelle = 40; // Feldgröße (Kantenlänge einer Zelle)
// Hier werden die zwei Feldfarben benannt, also jeweils in einer Variable gespeichert:
final color weiss = color (255.0, 206.0, 158.0); // Weiss
final color schwarz = color (209.0, 139.0, 71.0); // schwarz
final color YELLOW = color(255, 255, 44);
final color GREEN = color(0, 255, 0);
final color RED = color(255, 0, 0);
float sx = 216.0, //
sy = 120;
float xadd = 3.4; //
float g = 10.0; //
// wir speichern die Position aller Felder des Schabretts
PVector [][] feldPos = new PVector [9] [9];
// ======================================================================================
void setup() { // läuft nur einmal
size (600, 700); // X / Y
int posx = 120;
int posy = 180+7*groesseZelle;
// define BOARD Schachbrett /// first y THEN x for-loop!!!!
for (int y=1; y<9; y= y+1) { // for int y rows
for (int x=1; x<9; x = x+1) { // for int x columns
feldPos[x][y] = new PVector(posx, posy);
// COLUMN x increase
posx=posx+groesseZelle;
} // for x
// New Row
posy = posy-groesseZelle; // nächste Zeile y
posx=120; // Grundstellung posx
} // for y
background(200);
} // Ende sub-routine
void draw() { // läuft 60 mal pro Sekunde
background(200); // löschen
Ueberschrift(); // Schach
drawChessBoard(); // 64 Felder
BuchstabenWaagerecht(); // a..h
ZahlenSenkrecht(); // 1..8
} // Ende sub-routine draw()
// ======================================================================================
void Ueberschrift() { // Schach <--- / -->
fill(255.0, 10.0, 0.0);
// sx = sx + xadd;
if (sx >=390) // nach rechts
xadd = xadd * -1;
g = g + 0.50;
if (sx <= 0) // nach links
xadd = xadd * -1;
textSize(32); // " SCHACH " - grösse
text(" Schach ", sx, sy);
} // Ende Übersschrift
// ======================================================================================
void drawChessBoard () {
for (int x=1; x<9; x = x+1) { // for int x columns
for (int y=1; y<9; y= y+1) { // for int y rows
setzeDieFillFeldFarbe(x, y);
noStroke(); // no frame
rect (feldPos[x][y].x, feldPos[x][y].y, groesseZelle, groesseZelle); //
textSize(12);
fill(0);
text ( str(x)+","+str(y),
feldPos[x][y].x+12, feldPos[x][y].y+12);
} // end for int y
} // End for X
} // End func
// ======================================================================================
void setzeDieFillFeldFarbe(int xLokal, int yLokal) {
// setzt die fill Farbe für das nächste Feld des Schachbretts
if (xLokal % 2 == 0) { // if x GERADE
// Anfang x GERADE
if (yLokal % 2 == 0) // if y
fill(weiss);
else
fill(schwarz);
//
} // ende if x
else { // Anfang x UNGERADE
// Anfang x UNGERADE
if (yLokal % 2 == 0) {
fill(schwarz); // hell
} else {
fill(weiss);
} // ende else y
//
} // ende else x
} // Ende sub-routine
// ======================================================================================
void BuchstabenWaagerecht() { // Buchstaben a bis h waagerecht
char buchstabe = 'a';
int posz = 80;
for ( int z = 1; z < 9; z = z + 1 ) {
posz = posz + 40;
fill(255);
textSize(30);
text(buchstabe++, posz, 530);
} // ende for Buchstaben
} // Ende sub-routine
// ======================================================================================
void ZahlenSenkrecht() {
// Zahlen 1 bis 8 senkrecht
textSize(30);
for (int b=1; b < 9; b = b+1) {
int yposs=160 + (9-b) * 40;
text( b, 80, yposs);
} // Ende for
} // Ende sub-routine