Hi,
ich arbeite zurzeit an einem Schachspiel in Java, Mensch gegen Mensch.
Ich hab schon einmal eine Schach geschrieben, allerdings nur in eine Klasse, jetzt will ich es halt nur objektorientiert machen.
Dazu hab ich schon ein Klassendiagramm(im Anhang) entworfen, an das ich mich
UNGEFÄHR richten möchte.
Ich müsste nun dann eigentlich nur irgendwie den Code den ich schon geschrieben habe ausschneiden und in die Klassen verteilen und natürlich mich um die Beziehungen kümmern. Aber habe leider noch Probleme damit:
Hier mal der Code(nicht komplett, aber das wichtigste, paar Methoden fehlen, import hab ich weggeblendet, ich hoffe es ist nicht zu unübersichtlich):
Wie muss ich das jetzt aufteilen, damit die das Brett gezeichnet wird und die Figuren richtig gestellt werden?
Mein erstes Problem ist, wenn ich z.B. Spielfeld und Figuren trenne und ich dann die Figurenbilder mit dem Brett zusammensetze, kennt er die Konstanten nicht mehr, vielleicht hab ich bei extends was falsch gemacht...
Anmerkung zum Klassendiagramm noch: Das Interface Plugin ist ein Interfaces von dem Framework(ist erstmal zu vernachlässigen). Es soll später muss über Netzwerk gespielt werden können mit dem Framework...
Vielen Dank im Voraus
ich arbeite zurzeit an einem Schachspiel in Java, Mensch gegen Mensch.
Ich hab schon einmal eine Schach geschrieben, allerdings nur in eine Klasse, jetzt will ich es halt nur objektorientiert machen.
Dazu hab ich schon ein Klassendiagramm(im Anhang) entworfen, an das ich mich
UNGEFÄHR richten möchte.
Ich müsste nun dann eigentlich nur irgendwie den Code den ich schon geschrieben habe ausschneiden und in die Klassen verteilen und natürlich mich um die Beziehungen kümmern. Aber habe leider noch Probleme damit:
Hier mal der Code(nicht komplett, aber das wichtigste, paar Methoden fehlen, import hab ich weggeblendet, ich hoffe es ist nicht zu unübersichtlich):
Code:
public class Schach extends JPanel implements MouseListener, ActionListener {
private Image Bild[];
static final int Schwarz = 0;
static final int Weiß = 1;
static final int Leer = -1;
static final int BauerS = 0;
static final int TurmS = 1;
static final int SpringerS = 2;
static final int LaeuferS = 3;
static final int DameS = 4;
static final int KoenigS = 5;
static final int BauerW = 6;
static final int TurmW = 7;
static final int SpringerW = 8;
static final int LaeuferW = 9;
static final int DameW = 10;
static final int KoenigW = 11;
int Brett[][];
int AktiveFigur[] = { -1, -1 };
// Welcher Spieler soll beginnen?
int nPlayer = Weiß;
JFrame applikation;
Container container;
// Menüleiste
JMenuBar menueLeiste;
// Menüleiste Elemente
JMenu datei;
JMenu spielmodus;
JMenu hilfe;
// Datei
JMenuItem neuesSpiel;
JMenuItem beenden;
// Spielmodus
JMenuItem vsMensch;
JMenuItem vsComputer;
// Hilfe
JMenuItem anleitung;
JMenuItem spielregeln;
JLabel anDerReihe;
JTextArea spielregelnText = new JTextArea();
private Image offScrImage;
public Schach() {
applikation = new JFrame("Schach");
container = applikation.getContentPane();
// Menüleiste erzeugen
menueLeiste = new JMenuBar();
// Menüelemente erzeugen
datei = new JMenu("Datei");
spielmodus = new JMenu("Spielmodus");
hilfe = new JMenu("Hilfe");
// Untermenüelemente erzeugen
neuesSpiel = new JMenuItem("Neues Spiel");
neuesSpiel.addActionListener(this);
beenden = new JMenuItem("Beenden");
beenden.addActionListener(this);
anleitung = new JMenuItem("Anleitung");
anleitung.addActionListener(this);
spielregeln = new JMenuItem("Spielregeln");
spielregeln.addActionListener(this);
vsComputer = new JMenuItem("vs. Computer");
vsComputer.addActionListener(this);
vsMensch = new JMenuItem("vs. Mensch");
vsMensch.addActionListener(this);
spielregeln = new JMenuItem("Spielregeln");
spielregeln.addActionListener(this);
// Menüelemente hinzufügen
menueLeiste.add(datei);
menueLeiste.add(hilfe);
menueLeiste.add(spielmodus);
// Untermenüelemente hinzufügen
datei.add(neuesSpiel);
datei.add(beenden);
hilfe.add(anleitung);
hilfe.add(spielregeln);
spielmodus.add(vsMensch);
spielmodus.add(vsComputer);
// NEW
applikation.setJMenuBar(menueLeiste);
init();
applikation.setSize(new Dimension(600, 600));
applikation.add(this);
applikation.setVisible(true);
anDerReihe = new JLabel("Es ist Spieler...dran!");
}
// NEW
// Bilder werden mit dem Toolkit erzeugt!!
public void init() {
Bild = new Image[12];
Bild[BauerS] = Toolkit.getDefaultToolkit().getImage(
(getClass().getResource("bilder/BauerS.gif")));
Bild[TurmS] = Toolkit.getDefaultToolkit().getImage(
(getClass().getResource("bilder/TurmS.gif")));
Bild[SpringerS] = Toolkit.getDefaultToolkit().getImage(
(getClass().getResource("bilder/SpringerS.gif")));
Bild[LaeuferS] = Toolkit.getDefaultToolkit().getImage(
(getClass().getResource("bilder/LaeuferS.gif")));
Bild[DameS] = Toolkit.getDefaultToolkit().getImage(
(getClass().getResource("bilder/DameS.gif")));
Bild[KoenigS] = Toolkit.getDefaultToolkit().getImage(
(getClass().getResource("bilder/KoenigS.gif")));
Bild[BauerW] = Toolkit.getDefaultToolkit().getImage(
(getClass().getResource("bilder/BauerW.gif")));
Bild[TurmW] = Toolkit.getDefaultToolkit().getImage(
(getClass().getResource("bilder/TurmW.gif")));
Bild[SpringerW] = Toolkit.getDefaultToolkit().getImage(
(getClass().getResource("bilder/SpringerW.gif")));
Bild[LaeuferW] = Toolkit.getDefaultToolkit().getImage(
(getClass().getResource("bilder/LaeuferW.gif")));
Bild[DameW] = Toolkit.getDefaultToolkit().getImage(
(getClass().getResource("bilder/DameW.gif")));
Bild[KoenigW] = Toolkit.getDefaultToolkit().getImage(
(getClass().getResource("bilder/KoenigW.gif")));
// Erstelle Brett mit 8 x 8 = 64 Feldern
Brett = new int[8][8];
for (int i = 0; i < 8; ++i)
for (int j = 0; j < 8; ++j)
// alle Felder sind am Anfang leer...
Brett[i][j] = Leer;
// bis auf:
Brett[0][0] = TurmS; // schwarze Spielfiguren
Brett[0][1] = SpringerS;
Brett[0][2] = LaeuferS;
Brett[0][4] = DameS;
Brett[0][3] = KoenigS;
Brett[0][5] = LaeuferS;
Brett[0][6] = SpringerS;
Brett[0][7] = TurmS;
Brett[1][0] = BauerS;
Brett[1][1] = BauerS;
Brett[1][2] = BauerS;
Brett[1][3] = BauerS;
Brett[1][4] = BauerS;
Brett[1][5] = BauerS;
Brett[1][6] = BauerS;
Brett[1][7] = BauerS;
Brett[7][0] = TurmW; //weiße Spielfiguren
Brett[7][1] = SpringerW;
Brett[7][2] = LaeuferW;
Brett[7][4] = DameW;
Brett[7][3] = KoenigW;
Brett[7][5] = LaeuferW;
Brett[7][6] = SpringerW;
Brett[7][7] = TurmW;
Brett[6][0] = BauerW;
Brett[6][1] = BauerW;
Brett[6][2] = BauerW;
Brett[6][3] = BauerW;
Brett[6][4] = BauerW;
Brett[6][5] = BauerW;
Brett[6][6] = BauerW;
Brett[6][7] = BauerW;
addMouseListener(this);
}
public Dimension getPreferredSize() {
return new Dimension(offScrImage.getWidth(this), offScrImage.getHeight(this));
}
public void mouseClicked(MouseEvent e) {
if (AktiveFigur[0] >= 0) {
int x = e.getX();
int y = e.getY();
// Finde die Spalte und Reihe heraus
Dimension d = getSize();
int c = (int) ((x * 8) / d.width);
int r = (int) ((y * 8) / d.height);
if (c < 0 || c > 7)
return;
if (r < 0 || r > 7)
return;
if (pruefeZug(AktiveFigur[0], AktiveFigur[1], c, r)) {
Brett[r][ c] = Brett[AktiveFigur[1]][AktiveFigur[0]];
Brett[AktiveFigur[1]][AktiveFigur[0]] = -1;
nPlayer = (nPlayer + 1) % 2;
}
AktiveFigur[0] = -1;
AktiveFigur[1] = -1;
} else {
int x = e.getX();
int y = e.getY();
// Finde die Spalte und Reihe heraus
Dimension d = getSize();
int c = (int) ((x * 8) / d.width);
int r = (int) ((y * 8) / d.height);
if (c < 0 || c > 7)
return;
if (r < 0 || r > 7)
return;
// Prüfe, ob da was liegt
// Wenn ja, mache daraus ein aktives Feld
if (Brett[r][ c] != -1) {
// Prüfe, welcher Spieler dran ist
if ((Brett[r][ c] < 6 && nPlayer == 0)
|| (Brett[r][ c] > 5 && nPlayer == 1)) {
AktiveFigur[0] = c;
AktiveFigur[1] = r;
System.out.println("Spieler1 ist dran");
}
}
}
repaint();
}
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == neuesSpiel){
applikation.validate();
}
if (e.getSource() == beenden){
System.exit(0);
}
if (e.getSource() == anleitung){
System.out.println("Anleitung wurde angeklickt");
}
if (e.getSource() == spielregeln){
try {
spielregelnText.read(new FileReader("C:/Dokumente und Einstellungen/fschwarz/Desktop/Projekt/Schachregeln.txt"), "");
} catch (Exception ex) {
ex.printStackTrace();
}
JScrollPane scrollPane = new JScrollPane(spielregelnText);
scrollPane.setPreferredSize(new Dimension(600, 400));
add(scrollPane);
spielregelnText.setWrapStyleWord(true);
applikation.validate();
}
if (e.getSource() == vsMensch){
System.out.println("vsMensch wurde angeklickt");
}
if (e.getSource() == vsComputer){
System.out.println("vsComputer wurde angeklickt");
}
}
private void pack() {
// TODO Auto-generated method stub
}
public static void main(String[] args) {
new Schach();
}
}
Wie muss ich das jetzt aufteilen, damit die das Brett gezeichnet wird und die Figuren richtig gestellt werden?
Mein erstes Problem ist, wenn ich z.B. Spielfeld und Figuren trenne und ich dann die Figurenbilder mit dem Brett zusammensetze, kennt er die Konstanten nicht mehr, vielleicht hab ich bei extends was falsch gemacht...
Anmerkung zum Klassendiagramm noch: Das Interface Plugin ist ein Interfaces von dem Framework(ist erstmal zu vernachlässigen). Es soll später muss über Netzwerk gespielt werden können mit dem Framework...
Vielen Dank im Voraus
Zuletzt bearbeitet: