Programm objektorientierter machen

Coldstorm

Gesperrt
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):

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

aojw-2-jpg.html


aojw-3-jpg.html
 
Zuletzt bearbeitet:
Der Vollständigkeit halber hier jetzt nochmal der Code(minimal um meine Fragen zu beantworten)

Code:
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.TextArea;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

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 void paintComponent(Graphics g) {
		Dimension d = getSize();

		offScrImage = createImage(d.width, d.height);
		Graphics og = offScrImage.getGraphics();

		int xoff = d.width / 8;
		int yoff = d.height / 8;

		/*
		 * Zeichnet Muster der schwarzen/weißen Quadrate, je nachdem, ob der
		 * Spieler schwarz oder weiß ist
		 */
		for (int c = 0; c < 8; ++c) {
			for (int r = 0; r < 8; ++r) {
				if ((c + r) % 2 == 0) {
					og.setColor(Color.gray);
				} else {
					og.setColor(Color.white);
				}
				og.fillRect(xoff * c, yoff * r, xoff, yoff);

				/* Zeichne jedes Bild auf Brett */

				int nPiece = Brett[r][ c];
				if (nPiece >= 0) {
					og.drawImage(Bild[nPiece], c * xoff, r * yoff, this);
				}
			}
		}



		g.drawImage(offScrImage, 0, 0, this.getWidth(), this.getHeight(), 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();
	}
}

Und hier das vollständige...


Code:
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.TextArea;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

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 void paintComponent(Graphics g) {
		Dimension d = getSize();

		offScrImage = createImage(d.width, d.height);
		Graphics og = offScrImage.getGraphics();

		int xoff = d.width / 8;
		int yoff = d.height / 8;

		/*
		 * Zeichnet Muster der schwarzen/weißen Quadrate, je nachdem, ob der
		 * Spieler schwarz oder weiß ist
		 */
		for (int c = 0; c < 8; ++c) {
			for (int r = 0; r < 8; ++r) {
				if ((c + r) % 2 == 0) {
					og.setColor(Color.gray);
				} else {
					og.setColor(Color.white);
				}
				og.fillRect(xoff * c, yoff * r, xoff, yoff);

				/* Zeichne jedes Bild auf Brett */

				int nPiece = Brett[r][ c];
				if (nPiece >= 0) {
					og.drawImage(Bild[nPiece], c * xoff, r * yoff, this);
				}
			}
		}

		/* Zeichne Markierung um die aktive Spielfigur */
		if (AktiveFigur[0] >= 0) {
			if (nPlayer == Weiß)
				og.setColor(Color.red);
			else
				og.setColor(Color.blue);

			og.drawRect(xoff * AktiveFigur[0], yoff * AktiveFigur[1], xoff,
					yoff);
			og.drawRect(xoff * AktiveFigur[0] - 1, yoff * AktiveFigur[1] - 1,
					xoff + 2, yoff + 2);
		}

		g.drawImage(offScrImage, 0, 0, this.getWidth(), this.getHeight(), this);

	}


	public Dimension getPreferredSize() {
		return new Dimension(offScrImage.getWidth(this), offScrImage.getHeight(this));
	}


	boolean pruefeZugGerade(int c1, int r1, int c2, int r2) {
		boolean bOK = false;
		int nPiece = Brett[r1][c1];
		int nPType = nPiece % 6;
		int ZerstoereFigur = Brett[r2][c2];
		int nDestPType = ZerstoereFigur % 6;

		if (c1 == c2 && r1 != r2) {
			int rd;
			if (r1 < r2)
				rd = 1;
			else
				rd = -1;

			bOK = true;
			for (int r = r1 + rd; r != r2; r += rd) {
				if (Brett[r][c1] != -1) {
					bOK = false;
					break;
				}
			}
		} else if (r1 == r2 && c1 != c2) {
			int cd;
			if (c1 < c2)
				cd = 1;
			else
				cd = -1;

			bOK = true;
			for (int c = c1 + cd; c != c2; c += cd) {
				if (Brett[r1][ c] != -1) {
					bOK = false;
					break;
				}
			}
		}

		return bOK;
	}

	boolean pruefeZugDiagonal(int c1, int r1, int c2, int r2) {
		boolean bOK = false;
		int nPiece = Brett[r1][c1];
		int nPType = nPiece % 6;
		int ZerstoereFigur = Brett[r2][c2];
		int nDestPType = ZerstoereFigur % 6;

		if ((c1 + r1) % 2 == 0 && (c2 + r2) % 2 == 0) {
			if (c1 + r1 == c2 + r2) {
				bOK = true;
			} else if (c1 - r1 == c2 - r2) {
				bOK = true;
			}
		} else if ((c1 + r1) % 2 == 1 && (c2 + r2) % 2 == 1) {
			if (c1 + r1 == c2 + r2) {
				bOK = true;
			} else if (c1 - r1 == c2 - r2) {
				bOK = true;
			}
		}
		if (bOK) {
			int cd;
			if (c1 < c2)
				cd = 1;
			else
				cd = -1;
			int rd;
			if (r1 < r2)
				rd = 1;
			else
				rd = -1;

			int r = r1 + rd;
			int c = c1 + cd;
			for (; c != c2; r += rd, c += cd) {
				if (Brett[r][ c] != -1) {
					bOK = false;
					break;
				}
			}
		}

		return bOK;
	}

	boolean pruefeZug(int c1, int r1, int c2, int r2) {
		if (c1 == c2 && r1 == r2)
			return false;

		boolean bOK = false;
		int nPiece = Brett[r1][c1];
		int nPType = nPiece % 6;
		int ZerstoereFigur = Brett[r2][c2];
		int nDestPType = ZerstoereFigur % 6;

		switch (nPType) {
		case BauerS:
			if (nPiece < 6) {
				if (c1 == c2) {
					if (r1 == r2 - 1) {
						if (ZerstoereFigur == -1)
							bOK = true;
					} else if (r1 == r2 - 2 && r1 == 1) {
						if (Brett[r2 - 1][c1] == -1)
							bOK = true;
					}
				} else if (c1 == c2 + 1 || c1 == c2 - 1) {
					if (r1 == r2 - 1) {
						if (ZerstoereFigur != -1 && ZerstoereFigur > 5)
							bOK = true;
					}
				}
			} else {
				if (c1 == c2) {
					if (r1 == r2 + 1) {
						if (ZerstoereFigur == -1)
							bOK = true;
					} else if (r1 == r2 + 2 && r1 == 6) {
						if (Brett[r2 + 1][c1] == -1)
							bOK = true;
					}
				} else if (c1 == c2 + 1 || c1 == c2 - 1) {
					if (r1 == r2 + 1) {
						if (ZerstoereFigur != -1 && ZerstoereFigur < 6)
							bOK = true;
					}
				}
			}
			break;
		case TurmS:
			bOK = pruefeZugGerade(c1, r1, c2, r2);
			break;
		case SpringerS:
			if (r1 == r2 - 2 || r1 == r2 + 2) {
				if (c1 == c2 - 1 || c1 == c2 + 1) {
					bOK = true;
				}
			} else if (c1 == c2 - 2 || c1 == c2 + 2) {
				if (r1 == r2 - 1 || r1 == r2 + 1) {
					bOK = true;
				}
			}
			break;
		case LaeuferS:
			bOK = pruefeZugDiagonal(c1, r1, c2, r2);
			break;
		case DameS:
			bOK = pruefeZugGerade(c1, r1, c2, r2);
			if (bOK == false)
				bOK = pruefeZugDiagonal(c1, r1, c2, r2);
			break;
		case KoenigS:
			if (Math.abs(r1 - r2) < 2 && Math.abs(c1 - c2) < 2
					&& (Math.abs(r1 - r2) != 0 || Math.abs(c1 - c2) != 0))
				bOK = true;
			break;
		default:
			break;
		}

		if (bOK == true) {
			if (nPiece < 6 && (ZerstoereFigur == -1 || ZerstoereFigur > 5))
				bOK = true;
			else if (nPiece > 5 && (ZerstoereFigur == -1 || ZerstoereFigur < 6))
				bOK = true;
			else
				bOK = false;
		}

		return bOK;
	}


	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();
	}
}
 
Also um es "objektorientierter" zu machen würde ich jedes Teilelemt als Objekt abbilden. Hier könnte man über eine Abstrakte Klasse Figur nachdenken, die von den Klassen "Bauer", "Pferd", "König" usw. erweitert bzw. ausprogrammiert wird.
Als Grundlage haben wir dann natürlich das Singleton Objekt "Schachbrett".

Usw., niemand wird dir hier deinen Code fertig zerpflücken. Das nur mal zur Anregung zur vorgehensweise.
 
Dazu hab ich schon ein Klassendiagramm(im Anhang) entworfen, an das ich mich
UNGEFÄHR richten möchte.

Das, was du da hast, ist kein Klassendiagramm, sondern ein Ablaufdiagramm (PAP).

Egal, also zum Thema OOP hat Manuel Hegemann ja schon die wichtigsten Sachen gesagt, daher kann ich dazu auch nicht wirklich was neues sagen.

Nur son Tipp: Wenn du wirklich objektorientiert programmieren willst, dann solltest du auch mit Objekten arbeiten und nicht mit Arrays und was ich sonst noch so in deinem Code gefunden hab.

EDIT:
OK, jetzt haste doch ein Klassendiagramm hochgeladen ^^ Das eine andere Teil is aber dennoch ein PAP ...
 
Zurück