Years ago I made a chessgame in java.
Here is some of the code.
Its in danish. But maybe u can use it.
Send me a message if I should send u the whole thing.
CHESSFRAME:
Code
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SkakFrame extends Frame
{
SkakFelt[][] felt, udfeltH, udfeltS;
Button tilslut;
Panel braetPanel, sidePanel, talPanel, bogstPanel, bundVPanel, bundHPanel;
Panel tilpasPanel, knapPanel, hovedPanel, udPanel, brHPanel, brSPanel;
public static Label urH, urS;
public static boolean urtid = true;
aListener k;
String trtekst = (" " + "Hvid" + " " + "Sort" + "\n" );
TextArea tekstområde;
Timer tid;
boolean farve = true, flyt = false;
VirtuelBraet skakbraet;
int tfx, tfy, tex, tey;
int hx = 0, hy = 0, sx = 0, sy = 0;
ImageIcon midbil, bilbp, bilbq, bilwp, bilwq;
public SkakFrame ( )
{
super("49105 SKAK");
setSize(808, 416);
urH = new Label(" H: 0:00:00");
urS = new Label(" S: 0:00:00");
urH.setBackground(Color.blue);
urS.setBackground(Color.white);
tilslut = new Button("Tilslut");
tilslut.addActionListener(new Knaplytter());
felt = new SkakFelt[8][8];
udfeltS = new SkakFelt[4][4];
udfeltH = new SkakFelt[4][4];
tekstområde = new TextArea(trtekst, 8, 1);
braetPanel = new Panel( );
knapPanel = new Panel( );
udPanel = new Panel( );
bundVPanel = new Panel( );
bundHPanel = new Panel( );
brHPanel = new Panel( );
brSPanel = new Panel( );
sidePanel = new Panel( );
hovedPanel = new Panel( );
talPanel = new Panel( );
bogstPanel = new Panel( );
tilpasPanel = new Panel( );
tid = new Timer(1000, new TidsLytter( )); // ur
bilbp = new ImageIcon("bp.gif");
bilbq = new ImageIcon("bq.gif");
bilwp = new ImageIcon("wp.gif");
bilwq = new ImageIcon("wq.gif");
setLayout(new BorderLayout( ));
hovedPanel.setLayout(new BorderLayout( ));
tilpasPanel.setLayout(new BorderLayout( ));
braetPanel.setLayout(new GridLayout(8, 8));
sidePanel.setLayout(new GridLayout(2, 1));
talPanel.setLayout(new GridLayout(8, 1));
knapPanel.setLayout(new GridLayout(2, 2));//(4, 1));
bogstPanel.setLayout(new GridLayout(1, 8));
bundVPanel.setLayout(new GridLayout(1, 2));
bundHPanel.setLayout(new GridLayout(1, 2));
udPanel.setLayout(new GridLayout(2, 1));
brHPanel.setLayout(new GridLayout(4, 4));
brSPanel.setLayout(new GridLayout(4, 4));
knapPanel.add(urS);
knapPanel.add(tilslut);
knapPanel.add(urH);
sidePanel.add(tekstområde);
sidePanel.add(knapPanel);
udPanel.add(brSPanel);
udPanel.add(brHPanel);
tilpasPanel.add("Center", bogstPanel);
bundVPanel.add(new Label(" "));
bundVPanel.add(new Label(" "));
bundHPanel.add(new Label(" "));
bundHPanel.add(new Label(" "));
tilpasPanel.add("West", bundVPanel);
tilpasPanel.add("East", bundHPanel);
hovedPanel.add("Center", braetPanel);
hovedPanel.add("West", talPanel);
add("Center", hovedPanel);
add("South", tilpasPanel);
add("East", sidePanel);
add("West", udPanel);
skakbraet = new VirtuelBraet( );
skakbraet.indsaet(new Taarn("t", true), 0, 0);
skakbraet.indsaet(new Hest("s", true), 0, 1);
skakbraet.indsaet(new Loeber("l", true), 0, 2);
skakbraet.indsaet(new Konge("k", true), 0, 3);
skakbraet.indsaet(new Dronning("d", true), 0, 4);
skakbraet.indsaet(new Loeber("l", true), 0, 5);
skakbraet.indsaet(new Hest("s", true), 0, 6);
skakbraet.indsaet(new Taarn("t", true), 0, 7);
skakbraet.indsaet(new Bonde("b", true), 1, 0);
skakbraet.indsaet(new Bonde("b", true), 1, 1);
skakbraet.indsaet(new Bonde("b", true), 1, 2);
skakbraet.indsaet(new Bonde("b", true), 1, 3);
skakbraet.indsaet(new Bonde("b", true), 1, 4);
skakbraet.indsaet(new Bonde("b", true), 1, 5);
skakbraet.indsaet(new Bonde("b", true), 1, 6);
skakbraet.indsaet(new Bonde("b", true), 1, 7);
skakbraet.indsaet(new Taarn("t", false), 7, 0);
skakbraet.indsaet(new Hest("s", false), 7, 1);
skakbraet.indsaet(new Loeber("l", false), 7, 2);
skakbraet.indsaet(new Konge("k", false), 7, 3);
skakbraet.indsaet(new Dronning("d", false), 7, 4);
skakbraet.indsaet(new Loeber("l", false), 7, 5);
skakbraet.indsaet(new Hest("s", false), 7, 6);
skakbraet.indsaet(new Taarn("t", false), 7, 7);
skakbraet.indsaet(new Bonde("b", false), 6, 0);
skakbraet.indsaet(new Bonde("b", false), 6, 1);
skakbraet.indsaet(new Bonde("b", false), 6, 2);
skakbraet.indsaet(new Bonde("b", false), 6, 3);
skakbraet.indsaet(new Bonde("b", false), 6, 4);
skakbraet.indsaet(new Bonde("b", false), 6, 5);
skakbraet.indsaet(new Bonde("b", false), 6, 6);
skakbraet.indsaet(new Bonde("b", false), 6, 7);
tegnUdfelter( );
tegnBraet( );
}
public void tegnBraet( )
{
for (int i = 7; i >= 0; i = i - 1) // (int i = 0; i < 8; i++) erstattes med denne hvis sort ønskes "nederst"
{
talPanel.add(new Label(" " + (i + 1)));
bogstPanel.add(new Label("" + Notation.givBog(i)));
for (int k = 7; k >= 0; k = k - 1) // (int k = 0; k < 8; k++) erstattes med denne hvis sort ønskes "nederst"
{
if (skakbraet.givBrik(i, k) == null)
{
felt[i][k] = new SkakFelt(farve, true);
felt[i][k].addMouseListener(new Lytter(i, k)); // listener
}
else
{
felt[i][k] = new SkakFelt(farve, false);
felt[i][k].addMouseListener(new Lytter(i, k)); // listener
midbil = new ImageIcon(skakbraet.givBrik(i, k).givIkon( ));
felt[i][k].billede = midbil.getImage();
}
braetPanel.add(felt[i][k]);
if (farve == true)
farve = false;
else
farve = true;
}
if (farve == true)
farve = false;
else
farve = true;
}
}
public boolean checkSkak(boolean farve)
{
int kgx = -1;
int kgy = -1;
boolean skak = false;
for (int i = 0; i < 8; i++)
{
for (int k = 0; k < 8; k++)
{
if (skakbraet.givBrik(i, k) != null && skakbraet.givBrik(i, k).GivNavn( ) == "k")
if (skakbraet.givBrik(i, k).givFarve( ) == farve)
{
kgx = i;
kgy = k;
}
}
}
for (int i = 0; i < 8; i++)
{
for (int k = 0; k < 8; k++)
{
if (skakbraet.givBrik(i, k) != null && skakbraet.givBrik(i, k).givFarve( ) != farve)
if (skakbraet.skakFlyt(i, k, kgx, kgy, skakbraet) == true)
skak = true;
}
}
return skak;
}
public void checkTom()
{
for (int i = 0; i < 8; i++)
{
for (int k = 0; k < 8; k++)
{
if (skakbraet.givBrik(i, k) == null && felt[i][k].tom == false)
{
felt[i][k].tom = true;
felt[i][k].repaint( );
}
if (skakbraet.givBrik(i, k) != null && skakbraet.givBrik(i, k).GivNavn() == "t" && felt[i][k].tom == true)
{
if (skakbraet.givBrik(i, k).givFarve() == true)
{
midbil = new ImageIcon("wr.gif");
felt[i][k].billede = midbil.getImage();
}
else
{
midbil = new ImageIcon("br.gif");
felt[i][k].billede = midbil.getImage();
}
felt[i][k].tom = false;
felt[i][k].repaint( );
}
}
}
}
public void tegnUdfelter( )
{
for (int i = 0; i < 4; i++)
{
for (int k = 0; k < 4; k++)
{
udfeltH[i][k] = new SkakFelt(true, true);
brHPanel.add(udfeltH[i][k]);
udfeltS[i][k] = new SkakFelt(false, true);
brSPanel.add(udfeltS[i][k]);
}
}
}
public void fjernStartFarve( )
{
for (int i = 0; i < 8; i++)
{
for (int k = 0; k < 8; k++)
{
if (felt[tfx][tfy].starttr == true)
{
felt[tfx][tfy].starttr = false;
felt[tfx][tfy].repaint( );
}
}
}
}
public void fjernBrik(int ex, int ey)
{
if (skakbraet.givBrik(ex, ey).givFarve( ) == false)
{
udfeltH[hx][hy].billede = felt[ex][ey].billede;
udfeltH[hx][hy].tom = false;
udfeltH[hx][hy].repaint( );
hx = hx + 1;
if (hx > 3)
{
hy = hy + 1;
hx = 0;
}
}
else
{
udfeltS[sx][sy].billede = felt[ex][ey].billede;
udfeltS[sx][sy].tom = false;
udfeltS[sx][sy].repaint( );
sx = sx + 1;
if (sx > 3)
{
sy = sy + 1;
sx = 0;
}
}
}
public void fjernEnpessant( )
{
if (skakbraet.tempEnpessant.givFarve( ) == true)
{
udfeltH[hx][hy].billede = bilwp.getImage();
udfeltH[hx][hy].tom = false;
udfeltH[hx][hy].repaint( );
hx = hx + 1;
if (hx > 3)
{
hy = hy + 1;
hx = 0;
}
}
else
{
udfeltS[sx][sy].billede = bilbp.getImage();
udfeltS[sx][sy].tom = false;
udfeltS[sx][sy].repaint( );
sx = sx + 1;
if (sx > 3)
{
sy = sy + 1;
sx = 0;
}
}
skakbraet.tempEnpessant = null;
}
public void farveSkift()
{
if (skakbraet.trfarve == true)
{
urH.setBackground(Color.blue);
urS.setBackground(Color.white);
}
else
{
urS.setBackground(Color.blue);
urH.setBackground(Color.white);
}
}
private class Lytter implements MouseListener
{
private int x, y;
private boolean tilladt = false;
private boolean skakcheck = false;
private ArkeBrik mid;
public Lytter(int x, int y)
{
this.x = x;
this.y = y;
}
public void mousePressed (MouseEvent event)
{
fjernStartFarve( );
if (urtid == true)
{
if (flyt == false)
{
tfx = x;
tfy = y;
if (felt[tfx][tfy].tom == false)
{
felt[tfx][tfy].starttr = true;
felt[tfx][tfy].repaint( );
flyt = true;
}
}
else
{
tex = x;
tey = y;
mid = skakbraet.givBrik(tex, tey);
tilladt = skakbraet.move(tfx, tfy, tex, tey, skakbraet, true);
if (tilladt == true)
{
if (skakbraet.givBrik(tex, tey).givFarve( ) == true)
skakcheck = checkSkak(true);
else
skakcheck = checkSkak(false);
}
if (skakcheck == true)
skakbraet.omFlyt(tex, tey, tfx, tfy, mid, true);
if (tilladt == true && skakcheck == false)
{
if (felt[tex][tey].tom == false)
fjernBrik(tex, tey);
if (skakbraet.tempEnpessant != null)
fjernEnpessant();
felt[tex][tey].tom = false;
felt[tfx][tfy].tom = true;
if (skakbraet.givBrik(tex, tey).GivNavn() == "k" && tfy - tey > 1) //notation
tekstområde.append(" " + " o-o ");
else
if (skakbraet.givBrik(tex, tey).GivNavn() == "k" && tfy - tey < -1)
tekstområde.append(" " + "o-o-o");
else
tekstområde.append(" " + Notation.nota(tfx, tfy, tex, tey)); // notation
if (skakbraet.givBrik(tex, tey).givFarve( ) == false)
tekstområde.append("\n");
tid.start( ); // ur
if (tilslut.getLabel() == "Afbryd") // Kommunikation
k.meddel("" + tfx + tfy + tex + tey);
if (felt[tfx][tfy].billede == bilbp.getImage() && tex == 0)
felt[tex][tey].billede = bilbq.getImage();
else
if (felt[tfx][tfy].billede == bilwp.getImage() && tex == 7)
felt[tex][tey].billede = bilwq.getImage();
else
felt[tex][tey].billede = felt[tfx][tfy].billede;
farveSkift(); // urenes baggrundsfarve
felt[tex][tey].repaint( );
felt[tfx][tfy].repaint( );
checkTom( );
flyt = false;
}
else
flyt = false;
}
}
}
public void mouseReleased(MouseEvent event) {}
public void mouseClicked(MouseEvent event) {}
public void mouseEntered(MouseEvent event)
{
if (flyt == true)
{
tex = x;
tey = y;
mid = skakbraet.givBrik(tex, tey);
tilladt = skakbraet.move(tfx, tfy, tex, tey, skakbraet, false);
if (tilladt == true)
{
if (skakbraet.givBrik(tex, tey).givFarve( ) == true)
skakcheck = checkSkak(true);
else
skakcheck = checkSkak(false);
}
if (tilladt == true)
skakbraet.omFlyt(tex, tey, tfx, tfy, mid, false);
if (tilladt == true && skakcheck == false)
felt[tex][tey].muligtr = true;
felt[tex][tey].repaint( );
}
}
public void mouseExited(MouseEvent event)
{
if (felt[tex][tey].muligtr == true)
{
felt[tex][tey].muligtr = false;
felt[tex][tey].repaint( );
}
}
}
public class Knaplytter implements ActionListener
{
public void fjernFlyt(int fx, int fy, int ex, int ey)
{
skakbraet.move(fx, fy, ex, ey, skakbraet, true);
if (felt[ex][ey].tom == false)
fjernBrik(ex, ey);
if (skakbraet.tempEnpessant != null)
fjernEnpessant();
felt[ex][ey].tom = false;
felt[fx][fy].tom = true;
if (skakbraet.givBrik(ex, ey).GivNavn() == "k" && fy - ey > 1) //notation
tekstområde.append(" " + " o-o ");
else
if (skakbraet.givBrik(ex, ey).GivNavn() == "k" && fy - ey < -1)
tekstområde.append(" " + "o-o-o");
else
tekstområde.append(" " + Notation.nota(fx, fy, ex, ey)); // notation
if (skakbraet.givBrik(ex, ey).givFarve( ) == false)
tekstområde.append("\n");
tid.start( ); // ur
if (felt[fx][fy].billede == bilbp.getImage() && ex == 0)
felt[ex][ey].billede = bilbq.getImage();
else
if (felt[fx][fy].billede == bilwp.getImage() && ex == 7)
felt[ex][ey].billede = bilwq.getImage();
else
felt[ex][ey].billede = felt[fx][fy].billede;
farveSkift(); // urenes baggrundsfarve
felt[ex][ey].repaint( );
felt[fx][fy].repaint( );
checkTom( );
}
public void actionPerformed (ActionEvent event)
{
//aListener k = new aListener("haj");
//k.connect();
if (tilslut.getLabel() == "Tilslut")
{
k = new aListener("haj", this);
tilslut.setLabel("Afbryd");
k.connect();
}
else
{
tilslut.setLabel("Tilslut");
k.afbryd();
}
}
}
}
VIRTUALBOARD
Code
public class VirtuelBraet
{
private ArkeBrik[][] braet;
public ArkeBrik tempEnpessant; // !!!
public int traeknr = 0;
public boolean virkeligtr = false, trfarve = true;
public VirtuelBraet( )
{
tempEnpessant = null; // !!!
braet = new ArkeBrik[8][8];
for (int i = 0; i < 8; i++)
for (int k = 0; k < 8; k ++)
braet[i][k] = null;
}
public boolean move(int fx, int fy, int ex, int ey, VirtuelBraet br, boolean pse)
{
boolean tilladt = false;
boolean bo = false, bo2 = false;
virkeligtr = pse;
bo = braet[fx][fy].Gyldig(fx, fy, ex, ey, br);
bo2 = slutpunkt(fx, fy, ex, ey);
if (bo == true && bo2 == true && braet[fx][fy].givFarve() == trfarve)
{
if (pse == true)
traeknr = traeknr + 1;
if (pse && braet[fx][fy].GivNavn( ) == "b" && Math.abs(fx - ex) == 2)
enpessant(fx, fy);
if (pse && braet[fx][fy].GivNavn( ) == "k" && Math.abs(fy - ey) == 2)
checkTaarn(ex, ey);
braet[ex][ey] = braet[fx][fy];
braet[fx][fy] = null;
if (pse && braet[ex][ey].GivNavn( ) == "k" || braet[ex][ey].GivNavn( ) == "t")
rok(ex, ey);
if (pse && trfarve == true) // trækskifte
{
TidsLytter.urfarve = false;
trfarve = false;
}
else
if (pse && trfarve == false) // trækskifte
{
TidsLytter.urfarve = true;
trfarve = true;
}
if (pse && braet[ex][ey].GivNavn( ) == "b" && ex == 0)
braet[ex][ey] = new Dronning("d", false);
else
if (pse && braet[ex][ey].GivNavn( ) == "b" && ex == 7)
braet[ex][ey] = new Dronning("d", true);
tilladt = true;
}
return tilladt;
}
public boolean skakFlyt(int fx, int fy, int ex, int ey, VirtuelBraet br)
{
boolean tilladt = false;
boolean bo = false, bo2 = false;
bo = braet[fx][fy].Gyldig(fx, fy, ex, ey, br);
bo2 = slutpunkt(fx, fy, ex, ey);
if (bo == true && bo2 == true)
tilladt = true;
return tilladt;
}
public void omFlyt(int fx, int fy, int ex, int ey, ArkeBrik brik, boolean pse)
{
braet[ex][ey] = braet[fx][fy];
braet[fx][fy] = brik;
if (pse == true)
traeknr = traeknr - 1;
}
public void checkTaarn(int ex, int ey)
{
if (ey == 1)
{
braet[ex][ey+1] = braet[ex][ey-1];
braet[ex][ey-1] = null;
}
else
{
braet[ex][ey-1] = braet[ex][ey+2];
braet[ex][ey+2] = null;
}
}
public ArkeBrik[][] givBraet( )
{
return braet;
}
public void enpessant(int fx, int fy)
{
braet[fx][fy].pessant = traeknr;
}
public void rok(int fx, int fy)
{
braet[fx][fy].skiftRok();
}
public boolean checkEnpassant(int sx, int sy)
{
boolean bo = false;
if (braet[sx][sy] != null && braet[sx][sy].pessant == traeknr)
{
if (virkeligtr == true)
{
tempEnpessant = braet[sx][sy]; // !!!
braet[sx][sy] = null;
}
bo = true;
}
return bo;
}
public boolean checkRokade(int rx, int ry, boolean kfloej)
{
boolean bo = false;
if (kfloej == true)
if (braet[rx][ry-3] != null && braet[rx][ry-3].givRok() == true)
bo = true;
if (kfloej == false)
if (braet[rx][ry+4] != null && braet[rx][ry+4].givRok() == true)
bo = true;
return bo;
}
public boolean slutpunkt(int fx, int fy, int ex, int ey)
{
boolean bo = false;
if (braet[ex][ey] == null)
bo = true;
else
if (braet[fx][fy].givFarve() != braet[ex][ey].givFarve())
bo = true;
return bo;
}
public boolean bondegaa(int fx, int fy, int ex, int ey)
{
boolean bo = false;
if (braet[ex][ey] == null)
bo = true;
return bo;
}
public boolean bondeslaa(int fx, int fy, int ex, int ey)
{
boolean bo = false;
if (braet[ex][ey] != null)
if (braet[fx][fy].givFarve() != braet[ex][ey].givFarve())
bo = true;
return bo;
}
public void indsaet(ArkeBrik brik, int x, int y)
{
braet[x][y] = brik;
}
public boolean overhop(int fx, int fy, int ex, int ey)
{
boolean bo = true;
int difx = ex - fx;
int dify = ey - fy;
int maxdif = 0; // største numeriske forskel
int skridtx = 0;
int skridty = 0;
if (Math.abs(difx) > Math.abs(dify))
maxdif = Math.abs(difx);
else
maxdif = Math.abs(dify);
if (difx > 0)
skridtx = 1;
else
if (difx < 0)
skridtx = -1;
if (dify > 0)
skridty = 1;
else
if (dify < 0)
skridty = -1;
for (int i = 1; i < maxdif; i++)
if (braet[fx + (i*skridtx)][fy + (i*skridty)] != null)
bo = false;
return bo;
}
public ArkeBrik givBrik(int x, int y)
{
return braet[x][y];
}
}
CHESSFIELD:
Code
import java.awt.*;
import java.applet.Applet;
public class SkakFelt extends Canvas
{
Image billede;
boolean tom = true; // true hvis feltet er tomt;
boolean farve = true; // true hvis hvid
boolean muligtr = false; // true hvis træk er mulig
boolean starttr = false; // true ved starttr
public SkakFelt(boolean farve, boolean tom)
{
setSize(52, 52);
this.tom = tom;
this.farve = farve;
}
public void paint(Graphics page)
{
if (starttr == true)
setBackground(Color.lightGray);
else
if (muligtr == true)
setBackground(Color.blue);
else
if (farve == false)// && muligtr == false)
setBackground(Color.gray);
else
if (farve == true)// && muligtr == false)
setBackground(Color.white);
if (tom == false)
page.drawImage(billede, 10, 10, this);
}
}
PARENTPIECE:
Code
public abstract class ArkeBrik
{
public int pessant;
public abstract String GivNavn();
public abstract boolean Gyldig(int fx, int fy, int ex, int ey, VirtuelBraet br);
public abstract boolean givFarve();
public abstract String givIkon( );
public void skiftRok( ) {}
public boolean givRok( ) {return true;}
}
The pieces know hoa they move.
Here is an example. the Knight (springer in danish, but called hest here meaning horse)
Code
public class Hest extends ArkeBrik
{
private String navn;
private boolean farve = true; // true = hvid, false = sort
public Hest(String navn, boolean farve)
{
this.farve = farve;
this.navn = navn;
}
public String GivNavn( )
{
return navn;
}
public String givIkon( )
{
String ikonnavn;
if (farve == true)
ikonnavn = "wn.gif";
else
ikonnavn = "bn.gif";
return ikonnavn;
}
public boolean givFarve( )
{
return farve;
}
public boolean Gyldig(int fx, int fy, int ex, int ey, VirtuelBraet br)
{
boolean bo = false;
if (Math.abs(ex-fx) <= 2 && Math.abs(ey-fy) <= 2 && Math.abs(ex-fx)+Math.abs(ey-fy)==3)
bo = true;
return bo;
}
}