R
Radeon
Gast
Ein Freund und ich programmieren im Zuge eines Schulprojektes für Wirtschaftsinformatik das allbekannte Spiel Schach.
Die bisherige Klassenstruktur umfasst:
Figur.java (Bauer.java, ... , Koenig.java sollen von dieser erben)
Brett.java (umfasst bisher ein eindimensionales Array)
SchachbrettGUI.java (leider mit dem Visual Editor in Eclipse erstellt da der direkte Code nicht gefressen wurde - wird evtl. noch zu einem späteren Zeitpunkt abgeändert)
Zur besseren verdeutlichunge hier ein Screenshot der Benutzeroberfläche:
Kommen wir zur ersten Problematik: Wir möchten die Verknüpfung zwischen den einzelnen Schachfeldern und dem eindimensionales Array herstellen und stehen momentan auf dem Schlauch.
Die einzelnen Schachfelder sind als JPanels deklariert und werden mit einer for Schleife abwechselnd schwarz bzw. weiß gezeichnet. Um die einzelnen Felder anzusprechen sollen MouseListener verwendet werden die zum Teil schon vorhanden sind, ihre Funktionalität und Notwendigkeit konnte allerdings aufgrund der fehlenden Verknüpfung zum Array noch nicht geprüft werden.
In der Brettklasse befindet sich unser eindimensionales Array mit 120 Felden (bezug wird hierbei auf die 10x12-Darstellung genommen). Das Array besteht dabei aus 120 Feldern mit dem im angehängten Code zu findenden Werten. *1 steht dabei für den Bauer, 1* für weiß und 2* für schwarz, sowie 1xx ob bereits eine Rochade mit dem Turm ausgeführt wurde.
Was uns jetzt fehlt ist die Übergabe der Werte (bzw. der daran angefügten Bildern) an die GUI.
Hier kommt ihr ins Spiel, ich hoffe es gibt diesbezüglich jemanden der uns da weiterhelfen kann.
Konstuktive Kritik gegenüber den Code ist natürlich auch sehr gerne gesehen, schließlich sind wir beide noch blutige Anfänger und lernen gerne dazu!
SchachbrettGUI.java:
Brett.java:
Als ob das aber nicht schon genug wäre schlage ich mich noch mit einem weiteren Problem rum. Und zwar handelt es sich diesmal um die Figurklasse in der ich enums verwenden will. Ich denke größtenteils stimmt das was ich bereits gemacht habe durchaus, irgendwo muss aber noch ein Denkfehler drin sein, ich hoffe auch dort gibt es Anregungen von jemandem von euch!
PS: Da wir noch am rumprobieren was verschiedenen Wegen angeht wirkt das ganze natürlich noch etwas zerfleddert. Auch die Tatsache das zweimal Varianten für das Laden der Bilder vorhanden sind spricht für diese Tatsache. Also was das angeht einfach mal ein Auge zudrücken bzw. noch besser: konstruktive Kritik mit Verbesserungsvorschlägen walten lassen!
Ein herzliches Dankeschön nochmal an dieser Stelle!
Josch und Fabian
Die bisherige Klassenstruktur umfasst:
Figur.java (Bauer.java, ... , Koenig.java sollen von dieser erben)
Brett.java (umfasst bisher ein eindimensionales Array)
SchachbrettGUI.java (leider mit dem Visual Editor in Eclipse erstellt da der direkte Code nicht gefressen wurde - wird evtl. noch zu einem späteren Zeitpunkt abgeändert)
Zur besseren verdeutlichunge hier ein Screenshot der Benutzeroberfläche:

Kommen wir zur ersten Problematik: Wir möchten die Verknüpfung zwischen den einzelnen Schachfeldern und dem eindimensionales Array herstellen und stehen momentan auf dem Schlauch.
Die einzelnen Schachfelder sind als JPanels deklariert und werden mit einer for Schleife abwechselnd schwarz bzw. weiß gezeichnet. Um die einzelnen Felder anzusprechen sollen MouseListener verwendet werden die zum Teil schon vorhanden sind, ihre Funktionalität und Notwendigkeit konnte allerdings aufgrund der fehlenden Verknüpfung zum Array noch nicht geprüft werden.
In der Brettklasse befindet sich unser eindimensionales Array mit 120 Felden (bezug wird hierbei auf die 10x12-Darstellung genommen). Das Array besteht dabei aus 120 Feldern mit dem im angehängten Code zu findenden Werten. *1 steht dabei für den Bauer, 1* für weiß und 2* für schwarz, sowie 1xx ob bereits eine Rochade mit dem Turm ausgeführt wurde.
Was uns jetzt fehlt ist die Übergabe der Werte (bzw. der daran angefügten Bildern) an die GUI.
Hier kommt ihr ins Spiel, ich hoffe es gibt diesbezüglich jemanden der uns da weiterhelfen kann.
Konstuktive Kritik gegenüber den Code ist natürlich auch sehr gerne gesehen, schließlich sind wir beide noch blutige Anfänger und lernen gerne dazu!
SchachbrettGUI.java:
Java:
package paketSchach;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SchachbrettGUI extends JFrame implements MouseListener, MouseMotionListener{
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JButton bsNeuesSpiel = null;
private JButton bsBeenden = null;
private JButton bsZurueck = null;
private JPanel schachbrett = null;
public SchachbrettGUI() {
super();
initialize();
}
private void initialize() {
this.setSize(700, 507);
//this.setLocationRelativeTo(null);
this.setContentPane(getJContentPane());
this.setTitle("Schach");
this.setResizable(false);
}
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(getSchachbrett(), null);
jContentPane.add(getBsNeuesSpiel(), null);
jContentPane.add(getBsBeenden(), null);
jContentPane.add(getBsZurueck(), null);
}
return jContentPane;
}
private JPanel getSchachbrett() {
if (schachbrett == null) {
GridLayout gridLayout = new GridLayout();
gridLayout.setRows(8);
gridLayout.setColumns(8);
schachbrett = new JPanel();
schachbrett.setLayout(gridLayout);
schachbrett.setSize(480, 480);
schachbrett.setVisible(true);
for (int i = 0; i < 64; i++) {
JPanel feld = new JPanel();
feld.setSize(60, 60);
feld.addMouseListener(new MyMouseListener(i));
if ((i / 8 + i % 8) % 2 == 1) {
feld.setBackground(Color.black);}
else{
feld.setBackground(Color.white);}
schachbrett.add(feld);
}
}
return schachbrett;
}
private JButton getBsNeuesSpiel() {
if (bsNeuesSpiel == null) {
bsNeuesSpiel = new JButton();
bsNeuesSpiel.setBounds(new Rectangle(520, 40, 150, 35));
bsNeuesSpiel.setText("Neues Spiel");
bsNeuesSpiel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.out.println("actionPerformed()");
}
});
}
return bsNeuesSpiel;
}
private JButton getBsBeenden() {
if (bsBeenden == null) {
bsBeenden = new JButton();
bsBeenden.setBounds(new Rectangle(520, 400, 150, 35));
bsBeenden.setText("Beenden");
bsBeenden.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.exit(0);
}
});
}
return bsBeenden;
}
private JButton getBsZurueck() {
if (bsZurueck == null) {
bsZurueck = new JButton();
bsZurueck.setBounds(new Rectangle(520, 350, 150, 35));
bsZurueck.setText("Zurück");
bsZurueck.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
}
});
}
return bsZurueck;
}
class MyMouseListener implements MouseListener {
int labelIdx;
MyMouseListener(int labelIdx) {
this.labelIdx = labelIdx;
}
public void mouseClicked(MouseEvent arg0) {
// label[labelIdx] has beeen click
}
public void mouseEntered(MouseEvent arg0) {
}
public void mouseExited(MouseEvent arg0) {
}
public void mousePressed(MouseEvent arg0) {
}
public void mouseReleased(MouseEvent arg0) {
}
}
public void mouseClicked(MouseEvent arg0) {}
public void mouseMoved(MouseEvent arg0) {}
public void mouseEntered(MouseEvent arg0) {}
public void mouseExited(MouseEvent arg0) {}
public void mousePressed(MouseEvent arg0) {}
public void mouseReleased(MouseEvent arg0) {}
public void mouseDragged(MouseEvent arg0) {}
}
Brett.java:
Java:
package paketSchach2;
import java.awt.*;
public class Brett {
{
int []brett =new int [120];
int [] org = {
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 124, 22, 23, 25, 126, 23, 22, 124, -1,
-1, 21, 21, 21, 21, 21, 21, 21, 21, -1,
-1, 0, 0, 0, 0, 0, 0, 0, 0, -1,
-1, 0, 0, 0, 0, 0, 0, 0, 0, -1,
-1, 0, 0, 0, 0, 0, 0, 0, 0, -1,
-1, 0, 0, 0, 0, 0, 0, 0, 0, -1,
-1, 11, 11, 11, 11, 11, 11, 11, 11, -1,
-1, 114, 12, 13, 15, 116, 13, 12, 114, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };
for (int i=0; i < 120; i++)
brett [i] = org [i];
}
//Bilder
public Brett (java.applet.Applet ref) {
super();
Image [] pieces = new Image [18];
MediaTracker controler = new MediaTracker (ref);
pieces [1] = ref.getImage (ref.getCodeBase (), "Bilder/baur_weiss.gif");
pieces [2] = ref.getImage (ref.getCodeBase (), "Bilder/pferd_weiss.gif");
pieces [3] = ref.getImage (ref.getCodeBase (), "Bilder/laeufer_weiss.gif");
pieces [4] = ref.getImage (ref.getCodeBase (), "Bilder/turm_weiss.gif");
pieces [5] = ref.getImage (ref.getCodeBase (), "Bilder/dame_weiss.gif");
pieces [6] = ref.getImage (ref.getCodeBase (), "Bilder/koenig_weiss.gif");
pieces [11] = ref.getImage (ref.getCodeBase (), "Bilder/baur_schwarz.gif");
pieces [12] = ref.getImage (ref.getCodeBase (), "Bilder/pferd_schwarz.gif");
pieces [13] = ref.getImage (ref.getCodeBase (), "Bilder/laeufer_schwarz.gif");
pieces [14] = ref.getImage (ref.getCodeBase (), "Bilder/turm_schwarz.gif");
pieces [15] = ref.getImage (ref.getCodeBase (), "Bilder/dame_schwarz.gif");
pieces [16] = ref.getImage (ref.getCodeBase (), "Bilder/koenig_schwarz.gif");
for (int i = 1; i < 7; i++)
{
controler.addImage (pieces [i], 0);
controler.addImage (pieces [i + 10], 0);
}
try {
controler.waitForAll (); //wait for images
} catch (InterruptedException e) {
System.out.println ("Images not successfull loaded - Trying again ...");
controler.checkID (0, true);
}
}
}
Als ob das aber nicht schon genug wäre schlage ich mich noch mit einem weiteren Problem rum. Und zwar handelt es sich diesmal um die Figurklasse in der ich enums verwenden will. Ich denke größtenteils stimmt das was ich bereits gemacht habe durchaus, irgendwo muss aber noch ein Denkfehler drin sein, ich hoffe auch dort gibt es Anregungen von jemandem von euch!
Java:
package paketSchach;
import javax.swing.*;
import java.awt.*;
public class Figur{
public enum figurTyp {BAUER, TURM, SPRINGER, LAEUFER, DAME, KOENIG}
public enum figurFarbe {SCHWARZ, WEISS}
private final figurTyp typ;
private final figurFarbe farbe;
private final Image bild;
private String bildName;
private Figur(figurTyp typ, figurFarbe farbe, String bildName)
{
this.typ = typ;
this.farbe = farbe;
this.bild = Toolkit.getDefaultToolkit().getImage(getClass().getResource("Bilder/" + bildName + ".gif"));
//this.positionX = posX;
//this.positionY = posY;
//this.geschlagen = false;
}
public enum Figur {
bauer_schwarz(BAUER, SCHWARZ, "bauer_schwarz"),
turm_schwarz(TURM, SCHWARZ, "turm_schwarz"),
springer_schwarz(SPRINGER, SCHWARZ, "springer_schwarz"),
laeufer_schwarz(LAEUFER, SCHWARZ, "laeufer_schwarz"),
dame_schwarz(DAME, SCHWARZ, "dame_schwarz"),
koenig_schwarz(KOENIG, SCHWARZ, "koenig_schwarz"),
bauer_weiss(BAUER, WEISS, "bauer_weiss"),
turm_weiss(TURM, WEISS, "turm_weiss"),
springer_weiss(SPRINGER, WEISS, "springer_weiss"),
laeufer_weiss(LAEUFER, WEISS, "laeufer_weiss"),
dame_weiss(DAME, WEISS, "dame_weiss"),
koenig_weiss(KOENIG, WEISS, "koenig_weiss");
public figurTyp getFigurTyp(){return typ;}
public figurFarbe getFigurFarbe(){return farbe;}
public Image getBild() { return bild; }
}
private int positionX, positionY;
private boolean geschlagen;
public int getPositionX()
{
return positionX;
}
public void setPositionX(int _x)
{
positionX = _x;
}
public void setPositionY(int _y)
{
positionY = _y;
}
public int getPositionY()
{
return positionY;
}
//public abstract boolean kannDiagonalGehen();
//public abstract boolean kannHorizontalGehen();
//public abstract boolean kannVertikalGehen();
//public abstract boolean kannSpringen();
//public abstract boolean kannDiagonalSchlagen();
//public abstract boolean kannHorizontalSchlagen();
//public abstract boolean kannVertikalSchlagen();
}
Ein herzliches Dankeschön nochmal an dieser Stelle!
Josch und Fabian