Hi,
ich hab ein kleines Schachprogramm geschrieben in AWT mit MouseListener(nur für zwei menschliche Spieler).
Nun möchte ich es aber mit möglichst wenig Aufwand in eine SWING-Klasse umwandeln, also dass es ein JFrame ist und kein Applet mehr.
Das Programm funktioniert als Applet einwandfrei. Nur brauch ich jetzt noch ein Menü, und da hab ich mich entschieden, dies mit SWING und dem ActionListener zu implementieren...
Aber kann mir jemand helfen, wie ich das Applet möglichst einfach in ein JFrame stecke?
Hier mal der Code der Klasse, der Ordner images ist im Projekt, darin sind die ganzen Bilder der Figuren
Und so hab ich angefangen mit dem Menü
Jetzt will ich halt, dass das Menü und das Applet in einem JFrame ist
Wenn ich "public class Schach extends JFrame" statt Applet schreibe dann bringt er mir Fehler bei getCodeBase() bei public void init
Vielen Dank im Voraus
ich hab ein kleines Schachprogramm geschrieben in AWT mit MouseListener(nur für zwei menschliche Spieler).
Nun möchte ich es aber mit möglichst wenig Aufwand in eine SWING-Klasse umwandeln, also dass es ein JFrame ist und kein Applet mehr.
Das Programm funktioniert als Applet einwandfrei. Nur brauch ich jetzt noch ein Menü, und da hab ich mich entschieden, dies mit SWING und dem ActionListener zu implementieren...
Aber kann mir jemand helfen, wie ich das Applet möglichst einfach in ein JFrame stecke?
Hier mal der Code der Klasse, der Ordner images ist im Projekt, darin sind die ganzen Bilder der Figuren
Code:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.lang.Math;
import javax.swing.*;
public class Schach extends Applet implements MouseListener
{
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 };
int nPlayer = Weiß;
public void init()
{
Bild = new Image[12];
Bild[ BauerS ] = getImage( getCodeBase(), "images/BauerS.gif" );
Bild[ TurmS ] = getImage( getCodeBase(), "images/TurmS.gif" );
Bild[ SpringerS ] = getImage( getCodeBase(), "images/SpringerS.gif" );
Bild[ LaeuferS ] = getImage( getCodeBase(), "images/LaeuferS.gif" );
Bild[ DameS ] = getImage( getCodeBase(), "images/DameS.gif" );
Bild[ KoenigS ] = getImage( getCodeBase(), "images/KoenigS.gif" );
Bild[ BauerW ] = getImage( getCodeBase(), "images/BauerW.gif" );
Bild[ TurmW ] = getImage( getCodeBase(), "images/TurmW.gif" );
Bild[ SpringerW ] = getImage( getCodeBase(), "images/SpringerW.gif" );
Bild[ LaeuferW ] = getImage( getCodeBase(), "images/LaeuferW.gif" );
Bild[ DameW ] = getImage( getCodeBase(), "images/DameW.gif" );
Bild[ KoenigW ] = getImage( getCodeBase(), "images/KoenigW.gif" );
// Erstelle Brett
Brett = new int[8][8];
for ( int i = 0; i < 8; ++i )
for ( int j = 0; j < 8; ++j )
Brett[i][j] = Leer;
Brett[0][0] = TurmS;
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;
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 destroy()
{
removeMouseListener( this );
}
public void paint( Graphics g )
{
Dimension d = getSize();
Image 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 );
}
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 mouseReleased( MouseEvent e ) {
}
public void mousePressed( MouseEvent e ) {
}
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;
}
}
}
repaint();
}
public void mouseEntered( MouseEvent e ) {
}
public void mouseExited( MouseEvent e ) {
}
}
Und so hab ich angefangen mit dem Menü
Jetzt will ich halt, dass das Menü und das Applet in einem JFrame ist
Code:
public class Schach extends JFrame implements MouseListener, ActionListener
{
JFrame applikation;
Container container;
// Menüleiste
JMenuBar menueLeiste;
// Menüleiste Elemente
JMenu datei;
JMenu hilfe;
// Datei
JMenuItem neuesSpiel;
JMenuItem beenden;
// Hilfe
JMenuItem anleitung;
JMenuItem spielregeln;
JTextArea textarea;
Image Bild[];
public Schach() {
applikation = new JFrame("Schach");
container = applikation.getContentPane();
// Menüleiste erzeugen
menueLeiste = new JMenuBar();
// Menüelemente erzeugen
datei = new JMenu("Datei");
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);
// Menüelemente hinzufügen
menueLeiste.add(datei);
menueLeiste.add(hilfe);
// Untermenüelemente hinzufügen
datei.add(neuesSpiel);
datei.add(beenden);
hilfe.add(anleitung);
hilfe.add(spielregeln);
Wenn ich "public class Schach extends JFrame" statt Applet schreibe dann bringt er mir Fehler bei getCodeBase() bei public void init
Vielen Dank im Voraus