Schachbrett zeichnen

  • Themenstarter Themenstarter JPainter
  • Beginndatum Beginndatum
J

JPainter

Gast
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:

Java:
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!
 
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.
 
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
 
Ok ich hab nun eine Lösung, aber ich verstehe selber nicht wie die klappen kann 😉
Java:
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
 
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
Code:
Color.BLACK
 
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
 
Zuletzt bearbeitet von einem Moderator:
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
 
Java:
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);
	}
}
 

Neue Themen


Zurück
Oben