Hallo ihr Lieben,
wir sollen als Hausaufgabe ein komplettes Schachspiel programmieren.
Bisher bin ich auch ganz gut klar gekommen, aber an folgender Stelle weiss ich nicht mehr wem ich wie was zuordnen soll:
Implementieren Sie eine private Methode ziehen(int spalte, int zeile), die
den Zug einer Figur an die übergebene Position ausführt. Siehe Klasse SchachBrett Zeile 45
Die folgenden Klassen SchachFigur und SchachFeld sind gegeben:
Ausserdem sind natürlich noch die Klassen der einzelnen Figuren gegeben, was aber für mein Problem nicht relevant ist, glaub ich zumindest.
Und hier folgt die Klasse, die wir implementieren sollen.
Aus "Sicherheitsgründen" poste ich aber nur das Wichtigste, und die Methode, mit der ich Probleme habe, steht wie schon gesagt in Zeile 45, die Probleme, die ich habe, habe ich an den entsprechenden Stellen markiert.
wir sollen als Hausaufgabe ein komplettes Schachspiel programmieren.
Bisher bin ich auch ganz gut klar gekommen, aber an folgender Stelle weiss ich nicht mehr wem ich wie was zuordnen soll:
Implementieren Sie eine private Methode ziehen(int spalte, int zeile), die
den Zug einer Figur an die übergebene Position ausführt. Siehe Klasse SchachBrett Zeile 45
Die folgenden Klassen SchachFigur und SchachFeld sind gegeben:
Java:
package figuren;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import uebung.GdiImage;
public abstract class SchachFigur {
private GdiImage img;
private String bezeichnung;
protected Color farbe;
public SchachFigur(GdiImage img, String bezeichnung, Color farbe) {
this.img = img;
this.bezeichnung = bezeichnung;
this.farbe = farbe;
}
@Override
public String toString() {
return bezeichnung + (farbe.equals(Color.BLACK) ? " S" : " W");
}
public void zeichne(Graphics g, int posX, int posY, int feldGroesse) {
g.drawImage(img.getImage(), posX + (feldGroesse - img.getWidth()) / 2,
posY + (feldGroesse - img.getHeight()) / 2, null);
}
public Color getFarbe() {
return farbe;
}
public abstract boolean pruefeBewegung(Point koordAlt, Point koordNeu);
public abstract boolean pruefeSchlagen(Point koordAlt, Point koordNeu, Color farbe);
}
Java:
package main;
import java.awt.Color;
import java.awt.Graphics;
public class SchachFeld {
private Color farbe;
private String bezeichnung;
private boolean markiert;
public SchachFeld(Color farbe, String bezeichnung) {
this.farbe = farbe;
this.bezeichnung = bezeichnung;
}
public void zeichne(Graphics g, int posX, int posY, int groesse) {
if(markiert) {
g.setColor(Color.RED);
} else {
g.setColor(farbe);
}
g.fillRect(posX, posY, groesse, groesse);
if (farbe.equals(Color.BLACK)) {
g.setColor(Color.WHITE);
} else {
g.setColor(Color.BLACK);
}
int width = g.getFontMetrics().stringWidth(bezeichnung);
int height = g.getFontMetrics().getHeight();
g.drawString(bezeichnung, (int) (posX + (groesse - width) / 2),
(int) (posY + groesse / 2 + height / 2));
}
public void markieren(boolean markiert) {
this.markiert = markiert;
}
@Override
public String toString() {
return bezeichnung;
}
}
Ausserdem sind natürlich noch die Klassen der einzelnen Figuren gegeben, was aber für mein Problem nicht relevant ist, glaub ich zumindest.
Und hier folgt die Klasse, die wir implementieren sollen.
Aus "Sicherheitsgründen" poste ich aber nur das Wichtigste, und die Methode, mit der ich Probleme habe, steht wie schon gesagt in Zeile 45, die Probleme, die ich habe, habe ich an den entsprechenden Stellen markiert.
Java:
package main;
import javax.swing.JComponent;
import uebung.GdiImage;
import java.awt.*;
import java.awt.event.*;
public class SchachBrett extends JComponent implements MouseListener {
private final int GROESSE = ...;
private final int RAND = 20;
private int sizeX = ...;
private int sizeY = ...;
private SchachFeld[][] schachfeld = new SchachFeld[8][8];
private SchachFigur[][] figuren = new SchachFigur[8][8];
private SchachFigur bauerS;
private SchachFigur bauerW;
// analog fuer die anderen Schachfiguren
public SchachBrett() {
// Hierin wird die Fenstergroesse festgelegt, das Schachbrett und die Figuren angelegt, und der MouseListener hinzugefuegt
}
private void legeSchachFelderAn() {
// Hier hab ich das oben anglegte 2-dimensionale Array vom Typ SchachFeld abwechselnd mit weissen und schwarzen Feldern gefuellt
}
private void legeSchachFigurenAn() {
// Hier hab ich das oben angelegte 2-dim. Array figuren gefuellt mit den einzelnen Schachfiguren und zwar je nach Position der
// Figuren bei der Startaufstellung, wobei die linke obere Ecke die Indizes (0,0) und die rechte untere Ecke (7,7) hat, also
// figuren[0][0] = turmS; figuren[0][1] = springerS; usw.
}
public void paint(Graphics g) {
// Hier hab ich das grosse Schachfeld und die Schachfiguren entsprechend der Startaufstellung in die JComponentzeichnen lassen
}
// Und hier kommt die Methode, mit der ich Probleme habe:
private void ziehen(int spalte, int zeile) {
// ES IST NOCH KEINE FIGUR ZUM ZIEHEN AUSGEWÄHLT
// To do:
// Weisen Sie die Figur an der uebergebenen Position einem passenden
// Attribut zu und merken Sie sich auch die Position in einem Objekt der
// Klasse Point.
// Zum Einfaerben des Schachfeldes an dem die gewaehlte Figur steht
// koennen Sie die Methode markieren() von SchachFeld verwenden.
// ES IST EINE FIGUR ZUM ZIEHEN AUSGEWÄHLT
// To do:
// Ueberpruefen Sie, ob die Figur an die neue Position bewegt werden
// kann, ob der Weg frei ist und ob eine Figur geschlagen werden muss.
// Mein Problem #1 ist, dass ich bei der Fallunterscheidung, ob eine Figur ausgewaehlt ist oder nicht, nicht weiss,
// wie "Figur ausgewaehlt == false" in if(Figur ausgewaehlt == false) aussehen soll !
// Mein Problem #2 ist, im Fall Figur ausgewaehlt, wie ich eine beliebige Figur auffassen soll.
// Fuer die Schachfigur auf Feld (7,7) wäre das ja einfach figuren[7][7].pruefeBewegung(new Point(7,7), new Point(spalte, zeile));
}
...
}