Schachbrett

B

Bata

Gast
Hallo,

habe mit java ein schachfeld implementiert:

Java:
public class Feld extends Applet {

   final int x = 50;
   final int y = 50;


   public void paint (Graphics g) {
      g.setColor(Color.BLACK);
      g.fillRect(x-2,y-2,164,164);
      g.setColor(Color.WHITE);
      for (int i=0; i<4; i++)
         for (int j=0; j<4; j++)
             g.fillRect(x+j*40,y+i*40, 20,20);
      for (int i=0; i<4; i++)
         for (int j=0; j<4; j++)
             g.fillRect(x+20+j*40,y+20+i*40, 20,20);
   }
}

Funktioniert auch alles wunderbar, nur ich soll auch in jedes feld von links oben beginnend nach rechts oben a-h und von links oben nach links unten 8-1 in die Felder abwechselnd weiß schwarz schreiben lassen. Steh im moment irgendwie auf dem Schlauch.
 

faetzminator

Gesperrter Benutzer
ich würde etwa folgendes machen:
Java:
g.fillRect(...); // hintergrundfarbe
for (int x = 0; x < 8; x++) {
    for (int y = 0; y < 8; y++) {
        g.setColor(x % 2 - y % 2 == 0 ? Color.WHITE : Color.BLACK);
        g.fillRect(...); // hier das jeweilige feld zeichnen
    }
}
 
B

Bata

Gast
ich würde etwa folgendes machen:
Java:
g.fillRect(...); // hintergrundfarbe
for (int x = 0; x < 8; x++) {
    for (int y = 0; y < 8; y++) {
        g.setColor(x % 2 - y % 2 == 0 ? Color.WHITE : Color.BLACK);
        g.fillRect(...); // hier das jeweilige feld zeichnen
    }
}

irgendwie krieg ichs net hin. Das Brett wird immer falsch dargestellt :(
 

hans90

Mitglied
ich klink mich hier mal ein

ich hab wie ein anderer user folgendes problem

Hallo alle zusammen:

ich häng hier wiedermal bei der Fehlersuche :rtfm:

Bei den Spalten zählt das Applet nicht, wie geplant, runter.
Wenn jemand Zeit hat hier die Codes:


Java:
import java.awt.*;


public class Feld {
	private String name;
	private Color farbe;


	public Feld (String name, Color farbe){
		this.name=name;
		this.farbe=farbe;
	
	}
	public void zeichne (Graphics g, int x, int y, int gro){
		if (g.getColor() == Color.black){
			g.setColor(Color.black);
			g.fillRect(x, y, gro, gro);
			g.setColor(Color.white);
			g.drawString(name, x, y);
		} else {
			g.setColor(Color.white);
			g.fillRect(x, y, gro, gro);
			g.setColor(Color.black);
			g.drawString(name, x, y);
		}
		
	}

}

Java:
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JApplet;

public class SchachbrettApplet extends JApplet {

	private final int RAND = 20;
	private final int groesse = 50;
	public Feld[][] Referenzen;
	public char[] Buchstaben = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' };

	public void init() {
		Referenzen = new Feld[8][8];
		this.setSize(2 * RAND + 8 * groesse, 2 * RAND + 8 * groesse);

		for (int a = 0; a < 8; a++) {
			for (int b = 7; b >= 0; b--) {
	
				int ascii = Buchstaben[a];
				

				if ((ascii + b) % 2 == 1) {
					Referenzen[a][b] = new Feld("" + Buchstaben[a] + b+1,Color.WHITE);
				} else {
					Referenzen[a][b] = new Feld("" + Buchstaben[a] + b+1,Color.BLACK);
				}
				
			}
		}

	}

	public void paint(Graphics g) {

		for (int i = 0; i < 8; i++) {
			for (int j = 7; j >= 0; j--) {

				int posX = groesse * i;
				int posY = groesse * j+1;

				Referenzen[i][j].zeichne(g, posX+RAND, posY+RAND, groesse);
			}
		}
	}

}

Gruss Vitali

vll kann hier noch jemand weiterhelfen ... geht um die gleiche aufgabenstellung
 

faetzminator

Gesperrter Benutzer
Hab nun den Code im ersten Posting von dir getestet und sehe kein Problem. Was passt dir nicht?
Hier trotzdem noch der komplette Code meines Lösungsvorschlag:
Java:
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;

public class Foo extends Applet {

    private static final long serialVersionUID = 1L;
    private static final int LENGTH = 20;
    private static final int BOARDER = 2;
    private static final int SIZE = 8;
    private static final int X = 0;
    private static final int Y = 0;

    @Override
    public void paint(Graphics g) {
        g.setColor(Color.BLACK);
        g.fillRect(X, Y, SIZE * LENGTH + 2 * BOARDER, SIZE * LENGTH + 2 * BOARDER);
        for (int x = 0; x < SIZE; x++) {
            for (int y = 0; y < SIZE; y++) {
                g.setColor(x % 2 - y % 2 == 0 ? Color.WHITE : Color.BLACK);
                g.fillRect(X + BOARDER + x * LENGTH, Y + BOARDER + y * LENGTH, LENGTH, LENGTH);
            }
        }
    }
}
 
B

Bata

Gast
Hab nun den Code im ersten Posting von dir getestet und sehe kein Problem. Was passt dir nicht?
Hier trotzdem noch der komplette Code meines Lösungsvorschlag:
Java:
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;

public class Foo extends Applet {

    private static final long serialVersionUID = 1L;
    private static final int LENGTH = 20;
    private static final int BOARDER = 2;
    private static final int SIZE = 8;
    private static final int X = 0;
    private static final int Y = 0;

    @Override
    public void paint(Graphics g) {
        g.setColor(Color.BLACK);
        g.fillRect(X, Y, SIZE * LENGTH + 2 * BOARDER, SIZE * LENGTH + 2 * BOARDER);
        for (int x = 0; x < SIZE; x++) {
            for (int y = 0; y < SIZE; y++) {
                g.setColor(x % 2 - y % 2 == 0 ? Color.WHITE : Color.BLACK);
                g.fillRect(X + BOARDER + x * LENGTH, Y + BOARDER + y * LENGTH, LENGTH, LENGTH);
            }
        }
    }
}

Das Problem ist das ich nicht weiß wie ich die Buchstabenzahlenkombination in die Felder bekomme (abwechselnd schwarz und weiß) :(
 

faetzminator

Gesperrter Benutzer
Ach so. Wenn du's schön zentriert haben willst wieder mein Vorschlag:
Java:
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;

public class Foo extends Applet {

    private static final long serialVersionUID = 1L;
    private static final int  LENGTH = 20;
    private static final int  BOARDER = 2;
    private static final int  SIZE = 8;
    private static final int  X = 20;
    private static final int  Y = 20;
    private static final char START_X = 'A';
    private static final char START_Y = '1';

    @Override
    public void paint(Graphics g) {
        g.setColor(Color.BLACK);
        g.fillRect(X, Y, SIZE * LENGTH + 2 * BOARDER, SIZE * LENGTH + 2 * BOARDER);
        int fontSize = g.getFont().getSize();
        for (int x = 0; x < SIZE; x++) {
            int localX = X + BOARDER + x * LENGTH;
            for (int y = 0; y < SIZE; y++) {
                boolean isWhite = x % 2 - y % 2 == 0;
                int localY = Y + BOARDER + y * LENGTH;
                g.setColor(isWhite ? Color.WHITE : Color.BLACK);
                g.fillRect(localX, localY, LENGTH, LENGTH);
                char[] data = new char[] {(char) (START_X + x), (char) (START_Y + y)};
                int fontWidth = g.getFontMetrics().charsWidth(data, 0, data.length);
                g.setColor(isWhite ? Color.BLACK : Color.WHITE);
                g.drawChars(data, 0, data.length, localX + (LENGTH - fontWidth) / 2, localY + LENGTH
                        - (LENGTH - fontSize) / 2);
            }
        }
    }
}
 
B

Bata

Gast
Ach so. Wenn du's schön zentriert haben willst wieder mein Vorschlag:
Java:
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;

public class Foo extends Applet {

    private static final long serialVersionUID = 1L;
    private static final int  LENGTH = 20;
    private static final int  BOARDER = 2;
    private static final int  SIZE = 8;
    private static final int  X = 20;
    private static final int  Y = 20;
    private static final char START_X = 'A';
    private static final char START_Y = '1';

    @Override
    public void paint(Graphics g) {
        g.setColor(Color.BLACK);
        g.fillRect(X, Y, SIZE * LENGTH + 2 * BOARDER, SIZE * LENGTH + 2 * BOARDER);
        int fontSize = g.getFont().getSize();
        for (int x = 0; x < SIZE; x++) {
            int localX = X + BOARDER + x * LENGTH;
            for (int y = 0; y < SIZE; y++) {
                boolean isWhite = x % 2 - y % 2 == 0;
                int localY = Y + BOARDER + y * LENGTH;
                g.setColor(isWhite ? Color.WHITE : Color.BLACK);
                g.fillRect(localX, localY, LENGTH, LENGTH);
                char[] data = new char[] {(char) (START_X + x), (char) (START_Y + y)};
                int fontWidth = g.getFontMetrics().charsWidth(data, 0, data.length);
                g.setColor(isWhite ? Color.BLACK : Color.WHITE);
                g.drawChars(data, 0, data.length, localX + (LENGTH - fontWidth) / 2, localY + LENGTH
                        - (LENGTH - fontSize) / 2);
            }
        }
    }
}

klasse! vielen dank. Wie tausche ich die Reihenfolge der zahlen,d.h. ich beginne oben links bei A8 statt A1
 

faetzminator

Gesperrter Benutzer
Also, da muss ich mich jetzt auch javimka anschliessen. Nach dem Code des ersten Postings von dir bin ich davon ausgegangen, dass Grundwissen und Eigeninitiative vorhanden ist. Diese Anpassung wirst du mit 5min Code-Analyse machen können, sofern die Eigeninitiative vorhanden ist.
 

Vitali

Mitglied
Ok ich hab auch noch am programm rumgezimmert und jetzt gehts:

:oops: Aber es lässt sich nicht in (Schachbrett) Zeile 22 Invertieren woran liegt dass???

Java:
import java.awt.*;

public class Feld {
	private String name;
	private Color farbe;

	int RAND_X = 20;
	int RAND_Y = RAND_X + 10;

	public Feld(String name, Color farbe) {
		this.name = name;
		this.farbe = farbe;

	}

	public void zeichne(Graphics g, int x, int y, int gro) {
		if (g.getColor() == Color.black) {
			g.setColor(Color.black);
			g.fillRect(x, y, gro, gro);
			g.setColor(Color.white);
			g.drawString(name, x + RAND_X, y + RAND_Y);
		} else {
			g.setColor(Color.white);
			g.fillRect(x, y, gro, gro);
			g.setColor(Color.black);
			g.drawString(name, x + RAND_X, y + RAND_Y);
		}

	}

}

Java:
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JApplet;

public class SchachbrettApplet extends JApplet {

	private final int RAND = 20;
	private final int groesse = 50;
	public Feld[][] Referenzen;
	public char[] Buchstaben = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' };

	public void init() {
		Referenzen = new Feld[8][8];
		this.setSize(2 * RAND + 8 * groesse, 2 * RAND + 8 * groesse);

		for (int a = 0; a < 8; a++) {
			for (int b = 7; b >= 0; b--) {

				int ascii = Buchstaben[a];

				if ((ascii + b) % 2 == 1) {
					Referenzen[a][b] = new Feld("" + Buchstaben[a]
							+ -(((b + a) % 8) - 8), Color.WHITE);
				} else {
					Referenzen[a][b] = new Feld("" + Buchstaben[a]
							+ -(((b + a) % 8) - 8), Color.BLACK);
				}
			}
		}

	}

	public void paint(Graphics g) {

		for (int i = 0; i < 8; i++) {
			for (int j = 7; j >= 0; j--) {

				int posX = groesse * i;
				int posY = groesse * ((j + i) % 8);

				Referenzen[i][j].zeichne(g, posX + RAND, posY + RAND, groesse);
			}
		}
	}

}
 

Vitali

Mitglied
Nein eben nicht ich hatte es so geplannt aber es geht nicht

du kannst auch yellow oder so reinschreiben es verändert sich nix :lol:
 

javimka

Top Contributor
Es würde bestimmt mehr passieren, wenn du in der Methode Zeichnen() in der If-Abfrage nicht g.getColor verwenden würdest, sondern das Attribut farbe aus der Klasse. Überhaupt hast du das ja gar nicht verwendet ???:L

Ausserdem habe ich mal alle deine Variabeln gemäss Konvention geschrieben. Finale Variabeln Gross, alle anderen klein.

Java:
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JApplet;
 
public class SchachbrettApplet extends JApplet {
 
    private final int RAND = 20;
    private final int GROESSE = 50;
    public Feld[][] referenzen;
    public final char[] BUCHSTABEN = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' };
 
    public void init() {
        referenzen = new Feld[8][8];
        this.setSize(2 * RAND + 8 * GROESSE, 2 * RAND + 8 * GROESSE);
 
        for (int i=0;i<8;i++) {
            for (int j=0;j<8;j++) {
 
            	if ((i+j)%2==0) {
            		referenzen[i][j] = new Feld(""+BUCHSTABEN[i]+(8-j),Color.BLACK);
            	} else {
            		referenzen[i][j] = new Feld(""+BUCHSTABEN[i]+(8-j),Color.WHITE);
            	}
            }
        }
    }
 
    public void paint(Graphics g) {
 
        for (int i=0;i<8;i++) {
            for (int j=0;j<8;j++) {
            	
                int posX = GROESSE * i;
                int posY = GROESSE * j;
 
                referenzen[i][j].zeichne(g, posX + RAND, posY + RAND, GROESSE);
            }
        }
    }
 
    public class Feld {
        private String name;
        private Color farbe;
     
        int RAND_X = 20;
        int RAND_Y = RAND_X + 10;
     
        public Feld(String name, Color farbe) {
            this.name = name;
            this.farbe = farbe;
     
        }
     
        public void zeichne(Graphics g, int x, int y, int gro) {
            if (farbe == Color.black) {
                g.setColor(Color.black);
                g.fillRect(x, y, gro, gro);
                g.setColor(Color.white);
                g.drawString(name, x + RAND_X, y + RAND_Y);
            } else {
                g.setColor(Color.white);
                g.fillRect(x, y, gro, gro);
                g.setColor(Color.black);
                g.drawString(name, x + RAND_X, y + RAND_Y);
            }
        }
    }
}
 

javimka

Top Contributor
Viel wichtiger als die Punkte wäre es, wenn du verstehen würdest, was passiert und wo und wieso ich deine Lösung umgeschrieben habe.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Auf einem Schachbrett bewegen programmieren Java Basics - Anfänger-Themen 2
D Schachbrett (8x8) programmieren Java Basics - Anfänger-Themen 3
B Schachbrett Java Basics - Anfänger-Themen 2
F Best Practice Schachbrett Läufer Java Basics - Anfänger-Themen 11
I Schachbrett aus beliebigen Strings erstellen Java Basics - Anfänger-Themen 3
J Matrix für Schachbrett Java Basics - Anfänger-Themen 6
P Das Schachbrett - Reis Problem Java Basics - Anfänger-Themen 21
H Schachbrett erkennen Java Basics - Anfänger-Themen 19
J Schachbrett mit Hilfe von while-Schleifen Java Basics - Anfänger-Themen 10
J Schachbrett zeichnen Java Basics - Anfänger-Themen 9
E einfaches Schachbrett generieren Java Basics - Anfänger-Themen 9
P Schachbrett Java Basics - Anfänger-Themen 7
P Schachbrett Spiel Nr. 01 Java Basics - Anfänger-Themen 17
P Schachbrett mit N x N Feldern Java Basics - Anfänger-Themen 11
D Schachbrett frage Teil2 Java Basics - Anfänger-Themen 15
D Schachbrett frage Java Basics - Anfänger-Themen 3
D schachbrett aufbauen Java Basics - Anfänger-Themen 29
I Springer auf Schachbrett Java Basics - Anfänger-Themen 18
M Schachbrett Java Basics - Anfänger-Themen 31
J Schachbrett Java Basics - Anfänger-Themen 6
B [Java] Schachbrett Frage Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben