# Schachbrett



## Vitali (10. Dez 2009)

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:



```
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);
		}
		
	}

}
```


```
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


----------



## hans90 (10. Dez 2009)

ich stolper über da selbe problem ... weiß hier keine eine antwort? ???:L


----------



## javimka (10. Dez 2009)

Was tut es denn und was sollte es machen?
Könnte es sein, dass die Berechnung von posY so [c]int posY = groesse * (j+1);[/c] aussehen müsste?


----------



## hans90 (10. Dez 2009)

es sollte ein schachbrett mit 8 * 8 feldern ausgeben, die abwechselnd schwarz und weiß sind.
und in jedes feld soll noch ne bezeichnung rein, also a1.... a8 und so weiter

leider zeichnet er aber nur schwarze und weiße streifen abwechselnd und die bezeichnungen stehen auch nur oben drüber


----------



## javimka (11. Dez 2009)

j+1 ist falsch, es müsste (j+*i*)%8 heissen. 
Ausserdem muss wird ""+b+1 als String Konkatenation angesehen, deshalb muss das als (b+1) geschreiben werden, um als Addition interpretiert zu werden.

```
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 + i)%8),Color.WHITE); // <<< Klammer und %
			} else {
				Referenzen[a][b] = new Feld("" + Buchstaben[a] + ((b + i)%8),Color.BLACK); // <<< Klammer und %
			}

		}
	}

}

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 + i) % 8); // <<< j+i statt j+1

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


----------



## javimka (11. Dez 2009)

EDIT:
Die x und y Koordinaten von drawString(s,x,y) geben übrigens die untere Linie für den zu zeichnenden String s an, deswegen war der Text vorher immer über dem Feld.

Nur so als Anmerkung, ich würde es so machen:

```
import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.JApplet;
import javax.swing.JLabel;

public class JavimkasSchachbrett extends JApplet {

	public void init() {
		int n = 8;
		setLayout(new GridLayout(n,n));
		for (int i=0;i<n;i++) {
			for (int j=0;j<n;j++) {
				String text = ""+((char)(65+j))+(i+1);
				JLabel lbl = new JLabel(text,JLabel.CENTER);
				lbl.setBackground((i+j)%2==0?Color.BLACK:Color.WHITE);
				lbl.setForeground((i+j)%2==0?Color.WHITE:Color.BLACK);
				lbl.setOpaque(true);
				add(lbl);
			}
		}
	}
}
```
Vielleicht hilfts ja was


----------



## faetzminator (11. Dez 2009)

Kommt bei euch immer die gesamte Klasse bei Aufgaben ins Forum? http://www.java-forum.org/java-basics-anfaenger-themen/93021-schachbrett.html


----------



## Vitali (11. Dez 2009)

faetzminator hat gesagt.:


> Kommt bei euch immer die gesamte Klasse bei Aufgaben ins Forum?



Nein eigendlich nicht und wenn hans intelligent genung ist wird er meine Variablen nochmal abändern 
(wills nur nochmal gesagt haben)

@javimka
ach ja danke dir für denn tipp das typische brettmuster hab ich schon mal aber:
-die änderungen in den zeilen 11 und 13 sind sinnlos da i in dieser Methode nicht existiert....
-weißt du vielleicht wie man die ganze Brett um dreht (also wo schwarz war weiß um umgekehrt)

Gruss Vitali


----------



## javimka (11. Dez 2009)

Überlegst du dir solche Dinge eigentlich auch mal selber?

Zeile 10
[c]if ((ascii + b) % 2 == 1) {[/c]
ändern in:
[c]if ((ascii + b) % 2 == 0) {[/c]


----------



## SlaterB (11. Dez 2009)

bitte nur ein einem Thema weiter:
http://www.java-forum.org/java-basics-anfaenger-themen/93021-schachbrett.html

hier geschlossen


----------

