# Schachbrett zeichnen



## JPainter (10. Okt 2011)

Hey, ich wollte ein kleines Programm schreiben indem ich unter anderem mit der paint Methode arbeiten muss. Bevor ich aber mein kleines Projekt in Angriff nehme, dachte ich mir, versuch ich erstmal mit der ein oder anderen Methode aus der Graphics Library umzugehen. Daher wollte ich einfach ein 9x9 oder 10x10 großes Schachbrett zeichnen.

Hier mal mein Versuch:


```
import java.awt.*;
import javax.swing.*;

public class Applet extends JApplet
{

      public void paint(Graphics g)
    {
        g.setColor(Color.BLUE);
        g.fillRect(0,0,500,500);

    for (int k = 0; k < 10 ;k=k+2) {
          for (int i = 1; i < 9; i=i+2)
          { 
      g.setColor(Color.BLACK);
      g.fillRect(i*40,40*k,40,40);
      g.setColor(Color.WHITE);
      g.fillRect(k*40,40*i,40,40);
    }
   
    }
    
}
}
```

Tja wenn ihr es startet könnt ihr sehen, das es nur so halb klappt. Ich hab versucht es mit einem Blatt und einem Stift nachzuvollziehen, aber ich kann mir einfach nicht erklären wieso manche Quadrate nicht gezeichnet werden.
Ihr seit meine Rettung 
Danke!


----------



## Tomate_Salat (10. Okt 2011)

Ohne das jz ausgeführt/getestet zu haben: Versuche es mal mit Überschreiben der paintComponent. Zudem würde ich dafür eher gleich ein eigenes Panel nehmen, dass ich überschreibe und dann auf das Applet hinzufüge.


----------



## SlaterB (10. Okt 2011)

was ist denn grundsätzlich dein Plan?
du malst an Position i,k und k,i gleichzeitig, also ziemlich konfus

setze in Zeile 21 ein break, dann wird vorerst nicht ganz so viel gezeichnet,
siehst du dass du an Posititon 0,1 ein schwarzes und an 1,0 ein weißes Rechteck hast?
das passt nicht zusammen

überlege dir ein Grundkonzept, z.B. immer eine Zeile fertig zu zeichnen, dann zur nächsten,
bemale in einer Zeile alle Felder, nicht unbedingt mit +2 etwas überspringe, wechsle die Farbe


----------



## JPainter (10. Okt 2011)

Ok ich hab nun eine Lösung, aber ich verstehe selber nicht wie die klappen kann 

```
import java.awt.*;
import javax.swing.*;

public class Applet extends JApplet
{

    public void paint(Graphics g)
    {
        g.drawString("Schachfeld", 40, 20);

        for (int i = 1; i <= 9; i++)
        {

            for (int k = 1; k <= 9; k++)

                g.drawRect(40*i,40*k,40,40);
        }

        for (int k = 1; k <= 9 ;k=k+2)
            for (int i = 1; i <= 9; i=i+2)
            { 

                g.setColor(new Color(0,0,0));
                g.fillRect(i*40,40*k,40,40);
        }
        for (int o = 2; o <= 9 ;o=o+2)
            for (int l = 2; l <= 9; l=l+2)
            { 
                if (l%2 == 0)
                {
                    g.setColor(new Color(0,0,0));
                    g.fillRect(l*40,40*o,40,40);
                }

        }

    }
}
```

Ist das sehr umständlich nun ? Ich gehe mal davon aus, weil ich tausend und eine fortschleife verwendete habe


----------



## Michael... (10. Okt 2011)

JPainter hat gesagt.:


> Ist das sehr umständlich nun


Ja zumal du da mehrfach Sachen "überpinselst".
und die funktioniert echt? Da Du ja ausschließlich mit Schwarz zeichnest? Ausserdem ist es Verschwendung x-mal ein Color Objekt der selben Farbe zu erzeugen - zumal die Klasse Color auch für einzelne Farben einen statischen Zugriff bietet 
	
	
	
	





```
Color.BLACK
```


----------



## SlaterB (10. Okt 2011)

da insgesamt nur mit Schwarz gemalt wird, welches am Anfang normalerweise schon gesetzt ist,
braucht man überhaupt nicht die Color zu setzen, oder höchstens 1x am Anfang,

das if [c]if (l%2 == 0)[/c] ist im Moment ohne Wirkung,

ansonsten geht es ja halbwegs, ein Schritt nach dem anderen,

man könnte alles in einer Doppelschleife abarbeiten wenn man eben jeweils prüft, was für das aktuelle Feld zu tun ist,
dann wären Unterscheidungen wie [c]if (l%2 == 0)[/c] wieder interessant


----------



## JPainter (10. Okt 2011)

Ok hast du vielleicht mal eine Lösung wie das mit 2 Doppelschleifen aussieht ? 
Habe das auch schon versucht, doch da kam bei mir dann nur Mist raus


----------



## Michael... (10. Okt 2011)

```
g.setColor(Color.BLACK);
g.fillRect(0, 0, 100, 100);
g.setColor(Color.WHITE);
for (int i=0; i<5; i++) {
	for (int k=0; k<5 ; k++) {
		if (k%2==i%2)
			g.fillRect(i*20, k*20, 20, 20);
	}
}
```


----------



## JPainter (10. Okt 2011)

Vielen Dank, !
Als Gast kann man sich nicht per Danke Button bedanken oder ?


----------



## vanny (10. Okt 2011)

JPainter hat gesagt.:


> Als Gast kann man sich nicht per Danke Button bedanken oder ?



^^ Dann meld dich halt an


----------

