# Zeichnen eines Schachbretts im Graphikfenster



## necyi (21. Nov 2021)

Hallo an alle!

Erstmal zur Aufgabenstellung (zum Verstehen meines Codes):

Zeichnen Sie mit Hilfe der jsTools (jsTools.Graph.*) ein quadratisches ”Schachbrett” (weiße und schwarze Felder wechseln sich ab), das eine beliebige Anzahl von Spalten (bzw. Zeilen) aufweist. Lösen Sie folgende Teilaufgaben:

1. Erstellen Sie eine Methode *static void paintSchach(int n, int m)*, die ein nxm - Schachbrett erzeugt , bei der jedes Einzelfeld die Dimension 40x40 Pixel aufweist. 
2. Im nächsten Schritt lesen Sie die Anzahl der Zeilen und der Spalten der Felder ein und erzeugen ein Schachfeld unter Nutzung der o.g. Methode.  
3. Erstellen Sie nun eine Methode *static void paintSchach800(int n, int m)*, die ein nxm - Schachbrett erzeugt, bei der das gesamte Schachfeld 800x800 Pixel groß ist, D.h. jedes einzelne Schachfeld muss die passende Gr¨oße aufweisen. Wenn n ! = m ist, sind die Einzelfelder nicht mehr quadratisch.

_Hinweis zum Einsatz der Methoden zum Zeichnen des Graphikfensters:  
Mit dem Befehl: ”addRect(< x >, < y >, < breite >, < hoehe >, < farbe >);” wird ein Rechteck an die Position (x,y) mit der Breite < breite > und der H¨ohe < hoehe > gezeichnet, z.B. addRect(40,20,20,30,”black”); zeichnet ein schwarzes Rechteck der Gr¨oße 20x30 an die Positon 40,20 (die linke obere Ecke bestimmt die Position)._

Nun, ich hab den Code hier: 

```
package Blatt6;

import static jsTools.Graph.*;


public class Aufgabe30 {
    static void paintSchach(int n, int m) {
        int countX = 0;
        int countY = 0;
        boolean color = true;
        for (int i = 0; i < n; i++) {
            countY = 0;
            for (int j = 0; j < m; j++) {
                String fieldColor = color ? "white" : "black";
                addRect(countX, countY, 40, 40, fieldColor);
                color = !color;
                countY += 40;
            }
            countX += 40;
        }
    }

    static void paintSchach800 (int n, int m) {
        int countX = 0;
        int countY = 0;
        boolean color = true;
        int fieldSize = 800;
        int l = fieldSize / n;
        int b = fieldSize / m;
        for (int i = 0; i < n; i++) {
            countY = 0;
            for (int j = 0; j < m; j++) {
                String fieldColor = color ? "white" : "black";
                addRect(countX, countY, l, b, fieldColor);
                color = !color;
                countY += b;
            }
            countX += l;
        }
    }


    public static void main(String args[]) {
        initWindow();
        paintSchach(7, 5);
        //paintSchach800(5,7);


    }
}
```

Der Code funktioniert auch, s. hier: 



Wenn ich dennoch gerade Zahlen verwende (sowohl wenn ich nur eine gerade Zahl eingebe, als auch wenn ich für beide Parameter gerade Zahlen verwende) , bekomme ich kein Schachbrett mehr heraus, z.B. bei


```
paintSchach(7,2);
```

s. hier:



Kann da jemand in meinen Code hineinschauen und mir evtl. sagen, was da falsch wäre? 
Vielen Dank im Voraus!


----------



## mihe7 (21. Nov 2021)

Naja, Du zeichnest spaltenweise und wechselst nach jedem Feld die Farbe. Wenn die Zahl Deiner Zeilen also gerade ist, fängst Du in jeder Spalte logischerweise wieder mit der gleichen Farbe an. Du bräuchtest in dem Fall also einen zusätzlichen Farbwechsel.


----------

