Schachbrett

Status
Nicht offen für weitere Antworten.

Vitali

Mitglied
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
 

javimka

Top Contributor
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

Mitglied
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
 
Zuletzt bearbeitet:

javimka

Top Contributor
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.
Java:
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);
		}
	}
}
 
Zuletzt bearbeitet:

javimka

Top Contributor
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:
Java:
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 :)
 

Vitali

Mitglied
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

Top Contributor
Ü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]
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben