import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class RevSpielfeldx extends JApplet implements MouseListener{// JInternalFrame
//Instanzvariablen
static int zähler = 0;
static int Höhe = 10;//RevStartx.tse;
int Breite =Höhe;
Felder[][] SFeld = new Felder[Höhe][Breite];
//JButton[][] SFeld = new JButton[Höhe][Breite];
JTextField zug;
JTextField test;
JTextField test2;
//Gasis Änderung 1
JTextField spielerdran;
//ReversiMaster des;
int aktspieler=0;
int FeldKoordinate;
//---Init-Methode---------------------------------------------------------------
public RevSpielfeldx(){//ReversiMaster df) {
//des = df;
setSize(600,400);
// setIconifiable(true);
/* setDefaultCloseOperation(
JInternalFrame.DISPOSE_ON_CLOSE
);*/
JSplitPane main =new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); //Das Fenster wird durch eine
//JSplitPane geteilt
JPanel spielfeld = new JPanel(); //Die linke Seite zeigt das
spielfeld.setMinimumSize(new Dimension(400,400)); //Spielfeld
spielfeld.setPreferredSize(new Dimension(400,400));
spielfeld.setLayout(new BorderLayout(1,1));
JPanel center = new JPanel();
center.setLayout(new GridLayout(Höhe,Breite));
center.setSize(400,400);
//SFeld[Höhe-1][Breite-1]=new Felder();
for (int i=0; i<Höhe; i++){ //Baut Spielfeld
for(int j =0; j<Breite; j++){ //mit Hilfe der Klasse
//"Felder" auf
SFeld[i][j] = new Felder(i,j);
SFeld[i][j].addMouseListener(this);
center.add(SFeld[i][j]);
}
}
SFeld[Höhe/2][Breite/2].setState(1); //Baut Startaufstellung
SFeld[Höhe/2][Breite/2-1].setState(0); //auf
SFeld[Höhe/2-1][Breite/2].setState(0);
SFeld[Höhe/2-1][Breite/2-1].setState(1);
//sucheZüge();
spielfeld.add(center);
JPanel status =new JPanel(); //Die rechte Seite ist für
status.setMinimumSize(new Dimension(200,400)); //Statusanzeigen vorgesehen
status.setPreferredSize(new Dimension(200,400));
zug =new JTextField("Spielzug: "+(zähler+1),13);
zug.setEditable(false);
test =new JTextField("Feld: ",13);
test.setEditable(false);
test2 =new JTextField("State: ",13);
test2.setEditable(false);
spielerdran=new JTextField(zähler%2==0?"Spieler1 ist am Zug":"Spieler2 ist am Zug",13);
spielerdran.setEditable(false);
status.add(zug);
status.add(test);
status.add(test2);
status.add(spielerdran);
main.setLeftComponent(spielfeld);
main.setRightComponent(status);
Container ois=getContentPane();
ois.add(main);
JMenuBar mb = new JMenuBar(); //Hier wird das Menu gebaut
JMenu datei = new JMenu("Datei");
datei.setMnemonic('D');
JMenuItem neu = new JMenuItem("Neues Spiel");
neu.setMnemonic('N');
neu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
//des.addChild(new RevStartx(), 20,20);
}});
JMenuItem save= new JMenuItem("Speichern");
save.setMnemonic('S');
JMenuItem load= new JMenuItem("Laden");
load.setMnemonic('L');
JMenuItem quit= new JMenuItem("Beenden");
quit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
setVisible(false);
}});
datei.add(neu);
datei.addSeparator();
datei.add(save);
datei.add(load);
datei.addSeparator();
datei.add(quit);
JMenu option = new JMenu("Optionen");
option.setMnemonic('p');
JMenuItem undo = new JMenuItem("Undo");
undo.setMnemonic('U');
JMenu stauf= new JMenu("Startaufstellung");
stauf.setMnemonic('t');
JMenuItem kla =new JMenuItem("klassisch");
JMenuItem mod =new JMenuItem("modern");
stauf.add(kla);
stauf.add(mod);
option.add(undo);
option.addSeparator();
option.add(stauf);
JMenu frage = new JMenu ("?");
JMenuItem about = new JMenuItem("About");
JMenuItem zusp = new JMenuItem("Über das Spiel");
frage.add(zusp);
frage.addSeparator();
frage.add(about);
mb.add(datei);
mb.add(option);
mb.add(frage);
setJMenuBar(mb);
setVisible(true);
sucheNachSetzbarenFeldern();
}
//---Main-Methode---------------------------------------------------------------
public static void main(String[] args) {
Konsole.run(new RevSpielfeldx(),600,400);
}
//---Methoden-------------------------------------------------------------------
public void mouseExited(MouseEvent e){
}
public void mouseEntered(MouseEvent e){
}
public void mouseReleased(MouseEvent e){
}
public void mousePressed(MouseEvent e){
}
public void mouseClicked(MouseEvent e){
Felder eld = (Felder)e.getSource();
int x = eld.getIDx();
int y = eld.getIDy();
spielroutine(x,y);
}
public int überprüfeNachbar(int x, int y, int richtung){
/*Richtung kann von 0-7 gewählt werden.
*Hierbei gilt:
* 0: unten
* 1: links unten
* 2: links
* 3: links oben
* 4: rechts unten
* 5: rechts
* 6: rechts oben
* 7: oben
*/
int nState =3;
if (richtung==0){
if(y>0){
nState= SFeld[x][y-1].getState();
}
}
return nState;
}
// public static reverse (){
// }
//Gasis krasse Funktionen
public void sucheNachSetzbarenFeldern(){
for(int i=0;i<Höhe;i++){
for(int j=0;j<Breite;j++){
//Prüfe ob das Feld leer ist
if(SFeld[i][j].getState()==2){
//Wenn zähler%2==0 dann ist Spieler1 dran ansonsten Spieler2
if(zähler%2==0){
System.out.println("hallo");
//Wenn unter dem leeren Feld ein Feld mit dem Status 1 ist
überprüfenachunten(0,1);
überprüfenachoben(0,1);
überprüfenachlinks(0,1);
überprüfenachrechts(0,1);
überprüfediagonallinksoben(0,1);
überprüfediagonallinksunten(0,1);
//überprüfediagonalrechtsoben(0,1);
//überprüfediagonalrechtsunten(0,1);
}
//Spieler 2 ist dran
else{
überprüfenachunten(1,0);
überprüfenachoben(1,0);
überprüfenachlinks(1,0);
überprüfenachrechts(1,0);
überprüfediagonallinksoben(1,0);
überprüfediagonallinksunten(1,0);
//überprüfediagonalrechtsoben(1,0);
//überprüfediagonalrechtsunten(1,0);
}
}
}
}
}
public void überprüfenachunten(int eigenerStein,int gegnerischerStein){
for(int i=0;i<Höhe;i++){
for(int j=0;j<Breite;j++){
if(SFeld[i][j].getState()==2){
if(i+1<Höhe&&SFeld[i+1][j].getState()==gegnerischerStein){
//Beginn der Überprüfung ob nach unten ob Steine gesetzt werden können
//Und in der Reihe ein Stein mit dem Status 0 kommt
for(int gehenachunten=i+2;gehenachunten<Höhe;gehenachunten++){
if(gehenachunten<Höhe&&SFeld[gehenachunten][j].getState()==eigenerStein){
SFeld[i][j].setBackground(Color.YELLOW);
SFeld[i][j].setState(3);
break;
}
//Wenn ein leeres Feld nach dem gegnerischen Stein kommt muss abgebrochen werden
if(gehenachunten<Höhe&&SFeld[gehenachunten][j].getState()==2){
break;
}
}//Ende der for-Schleife
//Ende der Überprüfung ob nach unten ob Steine gesetzt werden können
//Wenn über dem leeren Feld ein Feld mit dem Status 1 ist
}
}
}
}
}
public void überprüfenachoben(int eigenerStein,int gegnerischerStein){
for(int i=0;i<Höhe;i++){
for(int j=0;j<Breite;j++){
if(SFeld[i][j].getState()==2){
//Beginn der Überprüfung ob nach oben ob Steine gesetzt werden können
//Und in der Reihe ein Stein mit dem Status 0 kommt
//Wenn über dem leeren Feld ein Feld mit Status 1 ist
if(i-1>=0&&SFeld[i-1][j].getState()==gegnerischerStein){
System.out.println("oben");
for(int gehenachoben=i-2;gehenachoben>0;gehenachoben--){
if(gehenachoben>=0&&SFeld[gehenachoben][j].getState()==eigenerStein){
SFeld[i][j].setBackground(Color.YELLOW);
SFeld[i][j].setState(3);
break;
}
//Wenn ein leeres Feld nach dem gegnerischen Stein kommt muss abgebrochen werden
if(gehenachoben<Höhe&&SFeld[gehenachoben][j].getState()==2){
break;
}
}//Ende der for-Schleife
}
//Ende der Überprüfung ob nach oben ob Steine gesetzt werden können
}
}
}
}
public void überprüfenachlinks(int eigenerStein,int gegnerischerStein){
for(int i=0;i<Höhe;i++){
for(int j=0;j<Breite;j++){
if(SFeld[i][j].getState()==2){
if(j-1>=0&&SFeld[i][j-1].getState()==gegnerischerStein){
//Beginn der Überprüfung ob nach unten ob Steine gesetzt werden können
//Und in der Reihe ein Stein mit dem Status 0 kommt
for(int gehenachlinks=j-2;gehenachlinks<Höhe;gehenachlinks--){
if(gehenachlinks>=0&&SFeld[i][gehenachlinks].getState()==eigenerStein){
SFeld[i][j].setBackground(Color.YELLOW);
SFeld[i][j].setState(3);
break;
}
//Wenn ein leeres Feld nach dem gegnerischen Stein kommt muss abgebrochen werden
if(gehenachlinks>=0&&SFeld[i][gehenachlinks].getState()==2){
break;
}
}//Ende der for-Schleife
//Ende der Überprüfung ob nach unten ob Steine gesetzt werden können
//Wenn über dem leeren Feld ein Feld mit dem Status 1 ist
}
}
}
}
}
public void überprüfenachrechts(int eigenerStein,int gegnerischerStein){
for(int i=0;i<Höhe;i++){
for(int j=0;j<Breite;j++){
if(SFeld[i][j].getState()==2){
if(j+1<Breite&&SFeld[i][j+1].getState()==gegnerischerStein){
//Beginn der Überprüfung ob nach unten ob Steine gesetzt werden können
//Und in der Reihe ein Stein mit dem Status 0 kommt
for(int gehenachrechts=j+2;gehenachrechts<Breite;gehenachrechts++){
if(gehenachrechts>=0&&SFeld[i][gehenachrechts].getState()==eigenerStein){
SFeld[i][j].setBackground(Color.YELLOW);
SFeld[i][j].setState(3);
break;
}
//Wenn ein leeres Feld nach dem gegnerischen Stein kommt muss abgebrochen werden
if(gehenachrechts<Breite&&SFeld[i][gehenachrechts].getState()==2){
break;
}
}//Ende der for-Schleife
//Ende der Überprüfung ob nach unten ob Steine gesetzt werden können
//Wenn über dem leeren Feld ein Feld mit dem Status 1 ist
}
}
}
}
}
public void überprüfediagonalrechtsoben(int eigenerStein,int gegnerischerStein){
for(int i=0;i<Höhe;i++){
for(int j=0;j<Breite;j++){
if(SFeld[i][j].getState()==2){
if((i-1>=0)&&(j+1<Breite)&&(SFeld[i-1][j+1].getState()==gegnerischerStein)){
//Beginn der Überprüfung ob nach unten ob Steine gesetzt werden können
//Und in der Reihe ein Stein mit dem Status 0 kommt
int gehenachrechtsoben_rechts=j+2;
for(int gehenachrechtsoben=i-2;gehenachrechtsoben<Breite;gehenachrechtsoben--){
if((gehenachrechtsoben>0)&&(gehenachrechtsoben_rechts+2<Breite)){
if(SFeld[gehenachrechtsoben][gehenachrechtsoben_rechts].getState()==eigenerStein){
SFeld[i][j].setBackground(Color.YELLOW);
SFeld[i][j].setState(3);
break;
}
}
//Wenn ein leeres Feld nach dem gegnerischen Stein kommt muss abgebrochen werden
if((gehenachrechtsoben>0)&&(gehenachrechtsoben_rechts+2<Breite)){
if(SFeld[gehenachrechtsoben][gehenachrechtsoben_rechts].getState()==2){
break;
}
}
gehenachrechtsoben_rechts++;
}//Ende der for-Schleife
//Ende der Überprüfung ob nach unten ob Steine gesetzt werden können
//Wenn über dem leeren Feld ein Feld mit dem Status 1 ist
}
}
}
}
}
public void überprüfediagonalrechtsunten(int eigenerStein,int gegnerischerStein){
for(int i=0;i<Höhe;i++){
for(int j=0;j<Breite;j++){
if(SFeld[i][j].getState()==2){
if((i+1<Höhe)&&(j+1<Breite)&&(SFeld[i+1][j+1].getState()==gegnerischerStein)){
//Beginn der Überprüfung ob nach unten ob Steine gesetzt werden können
//Und in der Reihe ein Stein mit dem Status 0 kommt
int gehenachrechtsunten_rechts=j+2;
for(int gehenachrechtsunten=i+2;gehenachrechtsunten<Breite;gehenachrechtsunten++){
if((gehenachrechtsunten<Höhe)&&(gehenachrechtsunten_rechts+2<Breite)){
if(SFeld[gehenachrechtsunten][gehenachrechtsunten_rechts].getState()==eigenerStein){
SFeld[i][j].setBackground(Color.YELLOW);
SFeld[i][j].setState(3);
break;
}
}
//Wenn ein leeres Feld nach dem gegnerischen Stein kommt muss abgebrochen werden
if((gehenachrechtsunten>=0)&&(gehenachrechtsunten_rechts<Breite)){
if(SFeld[gehenachrechtsunten][gehenachrechtsunten_rechts].getState()==2){
break;
}
}
gehenachrechtsunten_rechts++;
}//Ende der for-Schleife
//Ende der Überprüfung ob nach unten ob Steine gesetzt werden können
//Wenn über dem leeren Feld ein Feld mit dem Status 1 ist
}
}
}
}
}
public void überprüfediagonallinksoben(int eigenerStein,int gegnerischerStein){
for(int i=0;i<Höhe;i++){
for(int j=0;j<Breite;j++){
if(SFeld[i][j].getState()==2){
if((i-1>=0)&&(j-1>=0)&&(SFeld[i-1][j-1].getState()==gegnerischerStein)){
//Beginn der Überprüfung ob nach unten ob Steine gesetzt werden können
//Und in der Reihe ein Stein mit dem Status 0 kommt
int gehenachlinksoben_links=j-2;
for(int gehenachlinksoben=i-2;gehenachlinksoben>0;gehenachlinksoben--){
if((gehenachlinksoben>=0)&&(gehenachlinksoben_links>=0)){
if(SFeld[gehenachlinksoben][gehenachlinksoben_links].getState()==eigenerStein){
SFeld[i][j].setBackground(Color.YELLOW);
SFeld[i][j].setState(3);
break;
}
}
//Wenn ein leeres Feld nach dem gegnerischen Stein kommt muss abgebrochen werden
if((gehenachlinksoben>=0)&&(gehenachlinksoben_links>0)){
if(SFeld[gehenachlinksoben][gehenachlinksoben_links].getState()==2){
break;
}
}
gehenachlinksoben_links--;
}//Ende der for-Schleife
//Ende der Überprüfung ob nach unten ob Steine gesetzt werden können
//Wenn über dem leeren Feld ein Feld mit dem Status 1 ist
}
}
}
}
}
public void überprüfediagonallinksunten(int eigenerStein,int gegnerischerStein){
for(int i=0;i<Höhe;i++){
for(int j=0;j<Breite;j++){
if(SFeld[i][j].getState()==2){
if(i+1<Höhe&&j-1>0&&SFeld[i+1][j-1].getState()==gegnerischerStein){
//Beginn der Überprüfung ob nach unten ob Steine gesetzt werden können
//Und in der Reihe ein Stein mit dem Status 0 kommt
int gehenachlinksunten_links=j-2;
for(int gehenachlinksunten=i+2;gehenachlinksunten<Breite;gehenachlinksunten++){
if((gehenachlinksunten<Höhe)&&(gehenachlinksunten_links>0)){
if(SFeld[gehenachlinksunten][gehenachlinksunten_links].getState()==eigenerStein){
SFeld[i][j].setBackground(Color.YELLOW);
SFeld[i][j].setState(3);
break;
}
}
//Wenn ein leeres Feld nach dem gegnerischen Stein kommt muss abgebrochen werden
if((gehenachlinksunten>=0)&&(gehenachlinksunten_links>0)){
if(SFeld[gehenachlinksunten][gehenachlinksunten_links].getState()==2){
break;
}
}
gehenachlinksunten_links--;
}//Ende der for-Schleife
//Ende der Überprüfung ob nach unten ob Steine gesetzt werden können
//Wenn über dem leeren Feld ein Feld mit dem Status 1 ist
}
}
}
}
}
public void setzeStein(int x,int y,int zähler){
if(zähler%2==0){
SFeld[x][y].setState(0);
}
else{
SFeld[x][y].setState(1);
}
}
public void hintergrundAufGrünSetzen(){
for(int i=0;i<Höhe;i++){
for(int j=0;j<Breite;j++){
SFeld[i][j].setBackground(Color.GREEN);
}
}
}
public void alleLeerenFelderAuf2Setzen(){
for(int i=0;i<Höhe;i++){
for(int j=0;j<Breite;j++){
if(SFeld[i][j].getState()==3){
SFeld[i][j].setState(2);
}
}
}
}
public void spielroutine(int x,int y){
spielerdran.setText(zähler%2==0?"Spieler1 ist am Zug":"Spieler2 ist am Zug");
zug.setText("Spielzug: "+(zähler+1));
test.setText("Feld: "+x+", "+y);//FeldKoordinate);
test2.setText("State: "+SFeld[x][y].getState());
//Beim Wert 3 kann ein Stein gesetzt werden
if(SFeld[x][y].getState()==3){
setzeStein(x,y,zähler);
dreheSteineUm(x,y);
zähler++;
}
else{
spielroutine(x,y);
}
hintergrundAufGrünSetzen();
alleLeerenFelderAuf2Setzen();
sucheNachSetzbarenFeldern();
}
public void dreheSteineUm(int x,int y){
if(zähler%2==0){
dreheSteineUmNachUnten(x,y,1,0);
dreheSteineUmNachOben(x,y,1,0);
dreheSteineUmNachRechts(x,y,1,0);
dreheSteineUmNachLinks(x,y,1,0);
dreheSteineUmNachLinksOben(x,y,1,0);
dreheSteineUmNachLinksUnten(x,y,1,0);
//dreheSteineUmNachRechtsOben(x,y,1,0);
//dreheSteineUmNachRechtsUnten(x,y,1,0);
}
else{
dreheSteineUmNachUnten(x,y,0,1);
dreheSteineUmNachOben(x,y,0,1);
dreheSteineUmNachRechts(x,y,0,1);
dreheSteineUmNachLinks(x,y,0,1);
dreheSteineUmNachLinksOben(x,y,0,1);
dreheSteineUmNachLinksUnten(x,y,0,1);
//dreheSteineUmNachRechtsOben(x,y,0,1);
//dreheSteineUmNachRechtsUnten(x,y,0,1);
}
}
public void dreheSteineUmNachUnten(int x,int y,int gegnerischerStein,int eigenerStein){
for(int nachunten=x+1;nachunten<Höhe;nachunten++){
if(SFeld[nachunten][y].getState()==gegnerischerStein){
SFeld[nachunten][y].setState(eigenerStein);
}
else{
break;
}
}
}
public void dreheSteineUmNachOben(int x,int y,int gegnerischerStein,int eigenerStein){
for(int nachoben=x-1;nachoben>=0;nachoben--){
if(SFeld[nachoben][y].getState()==gegnerischerStein){
SFeld[nachoben][y].setState(eigenerStein);
}
else{break;}
}
}
public void dreheSteineUmNachRechts(int x,int y,int gegnerischerStein,int eigenerStein){
for(int nachrechts=y+1;nachrechts<Breite;nachrechts++){
if(SFeld[x][nachrechts].getState()==gegnerischerStein){
SFeld[x][nachrechts].setState(eigenerStein);
}
else{
break;
}
}
}
public void dreheSteineUmNachLinks(int x,int y,int gegnerischerStein,int eigenerStein){
for(int nachlinks=y-1;nachlinks>=0;nachlinks--){
if(SFeld[x][nachlinks].getState()==gegnerischerStein){
SFeld[x][nachlinks].setState(eigenerStein);
}
else{
break;
}
}
}
public void dreheSteineUmNachLinksOben(int x,int y,int gegnerischerStein,int eigenerStein){
int xlo=x-1;
for(int nachlinksoben=y-1;nachlinksoben>0;nachlinksoben--){
if(xlo>=0&&SFeld[xlo][nachlinksoben].getState()==gegnerischerStein){
SFeld[xlo][nachlinksoben].setState(eigenerStein);
xlo--;
}
else{
break;
}
}
}
public void dreheSteineUmNachLinksUnten(int x,int y,int gegnerischerStein,int eigenerStein){
int xlu=x+1;
for(int nachlinksunten=y-1;nachlinksunten>0;nachlinksunten--){
if((xlu<Höhe)&&(SFeld[xlu][nachlinksunten].getState()==gegnerischerStein)){
SFeld[xlu][nachlinksunten].setState(eigenerStein);
xlu++;
}
else{
break;
}
}
}
public void dreheSteineUmNachRechtsOben(int x,int y,int gegnerischerStein,int eigenerStein){
int xro=x-1;
for(int nachrechtsoben=y+1;nachrechtsoben<Breite;nachrechtsoben++){
if((xro>=0)&&(SFeld[xro][nachrechtsoben].getState()==gegnerischerStein)){
SFeld[xro][nachrechtsoben].setState(eigenerStein);
xro--;
}
else{
break;
}
}
}
public void dreheSteineUmNachRechtsUnten(int x,int y,int gegnerischerStein,int eigenerStein){
int xru=x+1;
for(int nachrechtsunten=y+1;nachrechtsunten<Breite;nachrechtsunten++){
if((xru<Höhe)&&(SFeld[xru][nachrechtsunten].getState()==gegnerischerStein)){
SFeld[xru][nachrechtsunten].setState(eigenerStein);
xru++;
}
else{
break;
}
}
}
}