import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.event.*;
class DAME extends JFrame
{
/* Die Feldtypen:
* 0 - weisses Feld
* 1 - schwarzes Feld, leer
* 2 - Feld belegt, Spieler 1
* 3 - Feld belegt, Spieler 2
* 4 - Dame, Spieler 1
* 5 - Dame, Spieler 2
*/
short[][] position = new short[8][8];
FELDER[][] feld = new FELDER[8][8];
boolean klick = false;
boolean klick_dame = false;
int horizontal;
int vertikal;
int horizontal_1 = 0;
int vertikal_1 = 0;
int spieler = 1;
int steine_spieler1 = 12;
int steine_spieler2 = 12;
ANZAHL anzahl_spieler1;
ANZAHL anzahl_spieler2;
JLabel lblSpieler;
JLabel lblSpieler1;
JLabel lblSpieler2;
DAME()
{
setTitle("Dame in Java Version 0.1");
setLocation(50,50);
setResizable(false);
setSize(600,520);
getContentPane().setLayout(null);
getContentPane().setBackground(new java.awt.Color(200,200,0));
setDefaultCloseOperation(EXIT_ON_CLOSE);
lblSpieler1 = new JLabel("Spieler 1");
lblSpieler2 = new JLabel("Spieler 2");
lblSpieler = new JLabel("Spieler 1: Welcher Stein?");
lblSpieler.setBounds(30,440,280,25);
lblSpieler1.setBounds(480,40,70,25);
lblSpieler2.setBounds(480,350,70,25);
getContentPane().add(lblSpieler);
getContentPane().add(lblSpieler1);
getContentPane().add(lblSpieler2);
startpositionen();
for(int i=0; i<8;i++)
{
for(int j=0; j<8;j++)
{
feld[i][j] = new FELDER(position[i][j]);
feld[i][j].setBounds(30+(i*50),30+(j*50),50,50);
getContentPane().add(feld[i][j]);
if(position[i][j] != 0)
{
feld[i][j].addMouseListener(new KLICK(i,j));
}
}
}
anzahl_spieler1 = new ANZAHL(1);
anzahl_spieler2 = new ANZAHL(2);
anzahl_spieler1.setBounds(480,60,50,50);
anzahl_spieler2.setBounds(480,370,50,50);
getContentPane().add(anzahl_spieler1);
getContentPane().add(anzahl_spieler2);
show();
}
/* Funktion zum Setzen der Ausgangspositionen
* 0 = weisses Feld (nicht nutzbar)
* 1 = schwarzes Feld ohne Stein
* 2 = schwarzes Feld belegt von Spieler 1
* 3 = schwarzes Feld belegt von Spieler 2 */
void startpositionen()
{
/* Setze alle Felder auf weiss */
for(int i = 0; i < 8; i++)
{
for(int j=0; j<8; j++)
{
position[i][j] = 0;
}
}
/* Setzen der schwarzen Felder */
for(int i=1; i<8; i=i+2)
{
position[i][3] = 1;
}
for(int i=0; i<8; i=i+2)
{
position[i][4] = 1;
}
/* Spieler 1 Positionieren */
for(int i=0; i<8;i=i+2)
{
for(int j=0; j<3;j=j+2)
{
position[i][j] = 2;
}
}
for(int i=1; i<8; i=i+2)
{
position[i][1] = 2;
}
/* Spieler 2 Positionieren */
for(int i=1; i<8; i=i+2)
{
for(int j=5; j<8; j=j+2)
{
position[i][j] = 3;
}
}
for(int i=0; i<8; i=i+2)
{
position[i][6] = 3;
}
}
public static void main(String[] args)
{
new DAME();
}
/* Das Spieler - Panel */
class ANZAHL extends JPanel
{
int typ;
ANZAHL(int u_typ)
{
setBackground(new java.awt.Color(200,200,0));
typ = u_typ;
}
public void paint(java.awt.Graphics g)
{
if(typ == 1)
{
g.setColor(new java.awt.Color(200,200,0));
g.fillRect(0,0,50,50);
g.setColor(new java.awt.Color(255,255,255));
g.fillOval(10,10,30,30);
g.setColor(new java.awt.Color(0,0,0));
Integer wrapper = new Integer(steine_spieler1);
g.drawString(wrapper.toString(),20,29);
}
if(typ == 2)
{
g.setColor(new java.awt.Color(200,200,0));
g.fillRect(0,0,50,50);
g.setColor(new java.awt.Color(250,0,0));
g.fillOval(10,10,30,30);
g.setColor(new java.awt.Color(0,0,0));
Integer wrapper = new Integer(steine_spieler2);
g.drawString(wrapper.toString(),20,29);
}
}
}
/* Das Felder - Panel */
class FELDER extends JPanel
{
int typ;
FELDER(int u_typ)
{
typ = u_typ;
}
public void paint(java.awt.Graphics g)
{
if(typ == 0)
{
g.setColor(new java.awt.Color(200,200,200));
g.fillRect(0,0,50,50);
}
if(typ == 1)
{
g.setColor(new java.awt.Color(80,80,80));
g.fillRect(0,0,50,50);
}
if(typ == 2)
{
g.setColor(new java.awt.Color(80,80,80));
g.fillRect(0,0,50,50);
g.setColor(new java.awt.Color(255,255,255));
g.fillOval(10,10,30,30);
}
if(typ == 3)
{
g.setColor(new java.awt.Color(80,80,80));
g.fillRect(0,0,50,50);
g.setColor(new java.awt.Color(250,0,0));
g.fillOval(10,10,30,30);
}
if(typ == 4)
{
g.setColor(new java.awt.Color(80,80,80));
g.fillRect(0,0,50,50);
g.setColor(new java.awt.Color(255,255,255));
g.fillOval(10,10,30,30);
g.setColor(new java.awt.Color(0,0,255));
g.fillOval(15,15,20,20);
}
if(typ == 5)
{
g.setColor(new java.awt.Color(80,80,80));
g.fillRect(0,0,50,50);
g.setColor(new java.awt.Color(250,0,0));
g.fillOval(10,10,30,30);
g.setColor(new java.awt.Color(0,0,255));
g.fillOval(15,15,20,20);
}
}
}
/* Aktion */
class KLICK implements MouseListener
{
int horizontal_2;
int vertikal_2;
KLICK(int u_i, int u_j)
{
horizontal_2=u_i;
vertikal_2=u_j;
}
public void mousePressed(MouseEvent e)
{
horizontal = horizontal_2;
vertikal = vertikal_2;
if(klick_dame)
{
if(korrekt_dame())
{
feld[horizontal][vertikal].typ = position[horizontal_1][vertikal_1];
position[horizontal][vertikal] = position[horizontal_1][vertikal_1];
feld[horizontal][vertikal].repaint();
feld[horizontal_1][vertikal_1].typ = 1;
feld[horizontal_1][vertikal_1].repaint();
position[horizontal_1][vertikal_1] = 1;
klick_dame=false;
klick=false;
anzahl_spieler1.repaint();
anzahl_spieler2.repaint();
if(spieler == 1)
{
spieler = 2;
lblSpieler.setText("Spieler 2: Welcher Stein?");
}
else
{
spieler = 1;
lblSpieler.setText("Spieler 1: Welcher Stein?");
}
}
else
{
if(spieler == 1) lblSpieler.setText("Spieler 1: Ungueltig! Welcher Stein?");
if(spieler == 2) lblSpieler.setText("Spieler 2: Ungueltig! Welcher Stein?");
klick=false;
klick_dame=false;
}
}
if(klick)
{
if((spieler == 1 && vertikal_1 < vertikal) || (spieler == 2 && vertikal_1 > vertikal))
{
if(korrekt())
{
feld[horizontal][vertikal].typ = position[horizontal_1][vertikal_1];
position[horizontal][vertikal] = position[horizontal_1][vertikal_1];
feld[horizontal][vertikal].repaint();
feld[horizontal_1][vertikal_1].typ = 1;
position[horizontal_1][vertikal_1] = 1;
feld[horizontal_1][vertikal_1].repaint();
klick = false;
anzahl_spieler1.repaint();
anzahl_spieler2.repaint();
if(spieler == 1 && vertikal == 7)
{
position[horizontal][vertikal] = 4;
feld[horizontal][vertikal].typ = 4;
feld[horizontal][vertikal].repaint();
}
if(spieler == 2 && vertikal == 0)
{
position[horizontal][vertikal] = 5;
feld[horizontal][vertikal].typ = 5;
feld[horizontal][vertikal].repaint();
}
horizontal=0;
vertikal = 0;
horizontal_1=0;
vertikal_1=0;
if(spieler == 1)
{
spieler = 2;
lblSpieler.setText("Spieler 2: Welcher Stein?");
}
else
{
spieler = 1;
lblSpieler.setText("Spieler 1: Welcher Stein?");
}
}
else
{
klick = false;
horizontal=0;
vertikal = 0;
horizontal_1=0;
vertikal_1=0;
if(spieler == 1) lblSpieler.setText("Spieler 1: Ungueltig! Welcher Stein?");
if(spieler == 2) lblSpieler.setText("Spieler 2: Ungueltig! Welcher Stein?");
}
}
}
else
{
if((spieler ==1 && (position[horizontal][vertikal] == 2)) || (spieler == 2 && (position[horizontal][vertikal] == 3)))
{
horizontal_1 = horizontal;
vertikal_1 = vertikal;
klick = true;
if(spieler == 1) lblSpieler.setText("Spieler 1: Wohin?");
if(spieler == 2) lblSpieler.setText("Spieler 2: Wohin?");
}
if((spieler == 1 && (position[horizontal][vertikal] == 4)) || (spieler == 2 && (position[horizontal][vertikal] == 5)))
{
horizontal_1 = horizontal;
vertikal_1 = vertikal;
if(spieler == 1) lblSpieler.setText("Spieler 1: Dame wohin?");
if(spieler == 2) lblSpieler.setText("Spieler 2: Dame wohin?");
klick_dame = true;
}
}
}
public void mouseClicked(MouseEvent e) { }
public void mouseReleased(MouseEvent e) { }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
/* Ueberprueft, ob in Zug korrekt war */
boolean korrekt()
{
if(position[horizontal][vertikal] != 1) return false;
if(spieler == 1)
{
if(vertikal - vertikal_1 == 2)
{
if(horizontal > horizontal_1)
{
if(position[horizontal_1+1][vertikal_1+1] == 3 || position[horizontal_1+1][vertikal_1+1] == 5)
{
position[horizontal_1+1][vertikal_1+1] = 1;
feld[horizontal_1+1][vertikal_1+1].typ = 1;
feld[horizontal_1+1][vertikal_1+1].repaint();
steine_spieler2--;
return true;
}
else
{
return false;
}
}
if(horizontal < horizontal_1)
{
if(position[horizontal_1-1][vertikal_1+1] == 3 || position[horizontal_1-1][vertikal_1+1] == 5)
{
position[horizontal_1-1][vertikal_1+1] = 1;
feld[horizontal_1-1][vertikal_1+1].typ = 1;
feld[horizontal_1-1][vertikal_1+1].repaint();
steine_spieler2--;
return true;
}
else
{
return false;
}
}
}
}
if(spieler == 2)
{
if(vertikal_1 - vertikal == 2)
{
if(horizontal > horizontal_1)
{
if(position[horizontal_1+1][vertikal_1-1] == 2 || position[horizontal_1+1][vertikal_1-1] == 4)
{
position[horizontal_1+1][vertikal_1-1] = 1;
feld[horizontal_1+1][vertikal_1-1].typ = 1;
feld[horizontal_1+1][vertikal_1-1].repaint();
steine_spieler1--;
return true;
}
else
{
return false;
}
}
if(horizontal < horizontal_1)
{
if(position[horizontal_1-1][vertikal_1-1] == 2 || position[horizontal_1-1][vertikal_1-1] == 4)
{
position[horizontal_1-1][vertikal_1-1] = 1;
feld[horizontal_1-1][vertikal_1-1].typ = 1;
feld[horizontal_1-1][vertikal_1-1].repaint();
steine_spieler1--;
return true;
}
else
{
return false;
}
}
}
}
return true;
}
boolean korrekt_dame()
{
int differenz1 = horizontal_1 - horizontal;;
int differenz2 = vertikal_1 - vertikal;
if(position[horizontal][vertikal] != 1) return false;
if((horizontal_1 - horizontal) < 0) differenz1 = -1*(horizontal_1-horizontal);
if((vertikal_1 - vertikal) < 0) differenz2 = -1*(vertikal_1 - vertikal);
if(differenz1 == differenz2)
{
if((horizontal < horizontal_1) && (vertikal < vertikal_1))
{
if(spieler == 1)
{
if(position[horizontal+1][vertikal+1] == 3 || position[horizontal+1][vertikal+1] == 5)
{
feld[horizontal+1][vertikal+1].typ = 1;
feld[horizontal+1][vertikal+1].repaint();
position[horizontal+1][vertikal+1] = 1;
steine_spieler2--;
}
}
if(spieler == 2)
{
if(position[horizontal+1][vertikal+1] == 2 || position[horizontal+1][vertikal+1] == 4)
{
feld[horizontal+1][vertikal+1].typ = 1;
feld[horizontal+1][vertikal+1].repaint();
position[horizontal+1][vertikal+1] = 1;
steine_spieler1--;
}
}
}
if((horizontal > horizontal_1) && (vertikal < vertikal_1))
{
if(spieler == 1)
{
if(position[horizontal-1][vertikal+1] == 3 || position[horizontal-1][vertikal+1] == 5)
{
feld[horizontal-1][vertikal+1].typ = 1;
feld[horizontal-1][vertikal+1].repaint();
position[horizontal-1][vertikal+1] = 1;
steine_spieler2--;
}
}
if(spieler == 2)
{
if(position[horizontal-1][vertikal+1] == 2 || position[horizontal-1][vertikal+1] == 4)
{
feld[horizontal-1][vertikal+1].typ = 1;
feld[horizontal-1][vertikal+1].repaint();
position[horizontal-1][vertikal+1] = 1;
steine_spieler1--;
}
}
}
if((horizontal < horizontal_1) && (vertikal > vertikal_1))
{
if(spieler == 1)
{
if(position[horizontal+1][vertikal-1] == 3 || position[horizontal+1][vertikal-1] == 5)
{
feld[horizontal+1][vertikal-1].typ = 1;
feld[horizontal+1][vertikal-1].repaint();
position[horizontal+1][vertikal-1] = 1;
steine_spieler2--;
}
}
if(spieler == 2)
{
if(position[horizontal+1][vertikal-1] == 2 || position[horizontal+1][vertikal-1] == 4)
{
feld[horizontal+1][vertikal-1].typ = 1;
feld[horizontal+1][vertikal-1].repaint();
position[horizontal+1][vertikal-1] = 1;
steine_spieler1--;
}
}
}
if((horizontal > horizontal_1) && (vertikal > vertikal_1))
{
if(spieler == 1)
{
if(position[horizontal-1][vertikal-1] == 3 || position[horizontal-1][vertikal-1] == 5)
{
feld[horizontal-1][vertikal-1].typ = 1;
feld[horizontal-1][vertikal-1].repaint();
position[horizontal-1][vertikal-1] = 1;
steine_spieler2--;
}
}
if(spieler == 2)
{
if(position[horizontal-1][vertikal-1] == 2 || position[horizontal-1][vertikal-1] == 4)
{
feld[horizontal-1][vertikal-1].typ = 1;
feld[horizontal-1][vertikal-1].repaint();
position[horizontal-1][vertikal-1] = 1;
steine_spieler1--;
}
}
}
return true;
}
return false;
}
}
}