import java.awt.event.*;
public class Mensch implements MouseListener,MouseMotionListener,ActionListener
{
public static Kontrolle k=new Kontrolle();
public static Spielbrett c;
public static Highscore HS;
public static Anfangswerte e=new Anfangswerte();
public static EigenerZug ez=new EigenerZug();
public static int x=0;
public static int y=0;
public static int f=0;
public static int Zaehler=0;
public static boolean Verloren;
public boolean Erfolg;
public static String ZK2;
//Startpunkt für Spiel gegen den Menschen
public void Anfang(Mensch m)
{
Anlegen einer neuen Instanz der Klasse Spielbrett, registrieren des EndeButtons bei dieser Klasse, Setzen der Werte des Spielfeldes auf den Anfangszustand, erneutes Zeichnen des Spielbrettes, regitrieren eines MouseListeners zur Aufnahme und Auswertung der einzelnen Klicks und registrieren des MouseMotionListeners, um das Umwandeln des Mauszeigers bei Bewegung über die Spielfelder zu realisieren.
c=new Spielbrett();
c.Ende.addActionListener(this);
e.Ablaufst(c);
c.repaint();
c.addMouseListener(m);
c.addMouseMotionListener(m);
}
public void actionPerformed(ActionEvent e)
{
if(!Verloren)
{Wenn das Spiel für einen Spieler verloren ist, aber noch keine Auswertung erfolgte (!Verloren) wird an dieser Stelle eine neue Instanz der Klasse EigenerZug angelegt, die Spielfelder ausgezählt, wobei hier eine Instanz des Spielbrettes übergeben wird, da sich in ihr das Feld mit dem aktuellen Spielstand befindet, außerdem wird übergeben, dass es sich um ein Spiel Mensch gegen Mensch handelt (hat Einfluß auf die Art der Auswertung - es wird hier nicht beachtet, wer als letzter keinen Zug mehr hatte), außerdem die Namen der Spieler und zwei Zeichenketten, die benötigt werden, um die Sätze zur Punktausgabe richtig zu formulieren. Außerdem wird hier die Highscore aufgerufen.
if(Zaehler%2==0)
ez.zahl(c,"Compi",true,"hat "+nuf.NSpielerA, "hat "+nuf.NSpielerB);
else
ez.zahl(c,"Compi",false,"hat "+nuf.NSpielerA,"hat "+nuf.NSpielerB );
Verloren=true;
HS=new Highscore(c,"d");
}
else
{Ist die Auswertung bereits erfolgt, so wird jetzt das Spiel neu gestartet, indem die Klassenmethode Neustart aus Auswahlbilds aufgerufen wird. In ihr werden alle notwendigen Variablen auf ihre Ursprungswerte zurückgesetzt.
Auswahlbilds.Neustart(c);
}
}
public void mouseClicked(MouseEvent e)
{In den Variablen x und y wird das aktuell angeklickte Feld gespeichert, der Zaehler dient der Ermittlung, welcher Spieler gerade am Zug ist.
x=(int)((e.getX()-c.xmin)/c.dx);
y=(int)((e.getY()-c.ymin)/c.dy);
Zaehler++;
int z=1;
if(Verloren)
{
Auswahlbilds.Neustart(c);
}
else
{
{
if(Zaehler%2==0)
{
String ZK=k.Legal(c,x,y,1,true);
In einer Kontrollmethode wird ermittelt, ob der Spielzug den Regeln entsprach.
if(ZK=="Falsche Position")
{Die Ausgabe der Auswertung (in diesem Fall, die Angabe, das der Zug nicht korrekt war) des Spielzuges erfolgt über die Klasse Spielbrett, über die alle direkten graphischen Ausgaben während des Spielablaufes realisiert werden. Außerdem stellt sie die zentrale Klasse dar, die auch die meisten Angaben bezüglich des aktuellen Spielstandes enthält.
c.Ausgabe("Falsches Feld, "+nuf.NSpielerB,"n");
Zaehler--;
}
else
{
c.Ausgabe(" ","n");
//Prüfen, ob Gegner noch Züge übrig hat, um das Spiel abbrechen zu können, wenn dies nicht der Fall ist
Erfolg=false;
for(int i=0;i<8;i++)
{
for (int j=0;j<8;j++)
{
ZK2=k.Legal(c,i,j,0,false);
if(ZK2.equals("Richtige Position"))
{
Erfolg=true;
break;
}
}
if(ZK2.equals("Richtige Position"))
{
Erfolg=true;
break;
}
}
//Abbruch, wenn keine Züge übrig
if(!Erfolg)
{
//SpielerA hat gewonnen - SpielerB hat keine Züge mehr
ez.zahl(c,"Compi",true,"hat "+nuf.NSpielerA,"hat "+nuf.NSpielerB );
Verloren=true;
HS=new Highscore(c,"d");
}
}
}
else
{
String ZK=k.Legal(c,x,y,0,true);
if(ZK=="Falsche Position")
{
c.Ausgabe("Falsches Feld, "+nuf.NSpielerA,"n");
Zaehler--;
}
else
{
c.Ausgabe(" ","n");
//Prüfen, ob Gegner noch Züge hat
Erfolg=false;
for(int i=0;i<8;i++)
{
for (int j=0;j<8;j++)
{
ZK2=k.Legal(c,i,j,1,false);
if(ZK2.equals("Richtige Position"))
{
Erfolg=true;
break;
}
}
if(ZK2.equals("Richtige Position"))
{
Erfolg=true;
break;
}
}
//Abbruch, wenn keine Züge übrig
if(!Erfolg)
{
//Computer hat gewonnen - Mensch hat keine Züge mehr
ez.zahl(c,"Compi",false,"hat "+nuf.NSpielerA,"hat "+nuf.NSpielerB );
Verloren=true;
HS=new Highscore(c,"d");
}
}
}
}
}
}
public void mouseMoved(MouseEvent e)
{Bei Bewegung des Mauszeigers wird angezeigt, ob das Feld belegt werden darf. Auch hier stellt die Klassenvariable Zaehler einen Indikator dafür dar, welcher Spieler gerade am Zug ist. In x und y findet wieder die Skalierung des Spielbrettes statt und die Idendifikation des aktuell berührten Spielfeldes. Über die Legalität des Spielzuges entscheidet wieder die obige Methode der Klasse Kontrolle.java, wobei hier über einen Parameter desTyps boolean festgelegt wird, dass der geprüfte "Zug" nicht abgespeichert werden soll.
if(!Verloren)
{int farbe;
int x=(int)((e.getX()-c.xmin)/c.dx);
int y=(int)((e.getY()-c.ymin)/c.dy);
if((x<8)&&(y<8)&&(x>-1)&&(y>-1))
{
if(Zaehler%2==0)
farbe=0;
else
farbe=1;
if(k.Legal(c,x,y,farbe,false).equals("Richtige Position"))
c.setCursor(Cursor.HAND_CURSOR);
else
c.setCursor(Cursor.DEFAULT_CURSOR);
}
}
else
c.setCursor(Cursor.DEFAULT_CURSOR);
}
public void mouseDragged(MouseEvent e)
{}
public void mousePressed(MouseEvent e)
{}
public void mouseReleased(MouseEvent e)
{}
public void mouseEntered(MouseEvent e)
{}
public void mouseExited(MouseEvent e)
{}
}