import javax.swing.*;
import java.awt.Color;
import java.awt.event.*;
import java.awt.*;
import java.util.HashMap;
import java.util.Timer;
import javax.swing.colorchooser.*;
import javax.swing.event.MouseInputListener;
import java.lang.*;
import java.io.*;
import java.util.*;
public class GameofLife implements MouseInputListener , ActionListener
{
private int feld; //private
private JFrame f; //private
private JPanel mainPanel; //private
private HashMap meinePanels; //private
public JButton start;
public JButton stopp;
public String john;
public GameofLife(int feld)
{
this.feld = feld;
f = new JFrame( "Spiel des Lebens" );
f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
f.setSize( 970, 730 );
f.setVisible( true );
f.setBackground(Color.DARK_GRAY);
JPanel mainPanel = new JPanel ();
mainPanel.setVisible(true);
mainPanel.setBackground(Color.DARK_GRAY);
JButton start = new JButton ();
JButton stopp = new JButton ();
start.setText("Start");
stopp.setText("Stopp");
start.setVisible(true);
stopp.setVisible(true);
f.add(mainPanel);
meinePanels = new HashMap();
for (int i = 0; i < feld*feld; i++ ){
JPanel pi = new JPanel ();
pi.setBackground(Color.gray);
pi.setName(String.valueOf(i));
pi.setVisible(true);
pi.setSize(10,10);
pi.addMouseListener(this);
mainPanel.add(pi);
meinePanels.put(String.valueOf(i), pi);
}
mainPanel.add(start);
mainPanel.add(stopp);
f.setSize(f.getSize().height,f.getSize().width-50);
start.addActionListener(this);
stopp.addActionListener(this);
}
public void changeColorofPanel(int whatPanelNumber)
{
JPanel h = (JPanel) meinePanels.get(String.valueOf(whatPanelNumber));
if (h.getBackground().equals(Color.gray))
{
h.setBackground(Color.yellow);
}
else
{
h.setBackground(Color.gray);
}
}
public boolean isPanelDead(int whatPanelNumber)
{
JPanel h = (JPanel) meinePanels.get(String.valueOf(whatPanelNumber));
if (h.getBackground().equals(Color.gray))
{return true;}
else {return false;}
}
public boolean isPanelAlive(int whatPanelNumber)
{
JPanel h = (JPanel) meinePanels.get(String.valueOf(whatPanelNumber));
if (h==null)
{
return false;
}
else{
if (h.getBackground().equals(Color.yellow))
{return true;}
else {return false;}
}
}
public void setPanelAlive(int whatPanelNumber)
{
JPanel h = (JPanel) meinePanels.get(String.valueOf(whatPanelNumber));
h.setBackground(Color.yellow);
}
public void setPanelDead(int whatPanelNumber)
{
JPanel h = (JPanel) meinePanels.get(String.valueOf(whatPanelNumber));
h.setBackground(Color.gray);
}
public HashMap getHashMap()
{
return meinePanels;
}
public static void main( String[] args )
{
GameofLife test = new GameofLife(48);
}
public void mouseClicked(MouseEvent arg0) {
JPanel clickedpanel = (JPanel) arg0.getComponent();
this.changeColorofPanel(Integer.parseInt(clickedpanel.getName()));
}
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mousePressed(MouseEvent arg0) {
}
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseDragged(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseMoved(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void actionPerformed(ActionEvent arg0) {
JButton check = (JButton) arg0.getSource();
//System.out.println(check.getText());
if (check.getText().equals("Start")){
System.out.println("start");
for (int i=0; i<10;i++){ // Schleife für die Dauer der Bewegung
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
nextStep();
}
}
if (check.getText().equals("Stopp")){
System.out.println(wievieleNachbarnLeben(49));
}
}
public int wievieleNachbarnLeben(int whatPanelNumber)
{
JPanel check = (JPanel) meinePanels.get(String.valueOf(whatPanelNumber));
int howmuchalive=0;
if (isPanelAlive(whatPanelNumber + 1)) howmuchalive=howmuchalive+1;
if (isPanelAlive(whatPanelNumber - 1)) howmuchalive=howmuchalive+1;
if (isPanelAlive(whatPanelNumber - feld - 1)) howmuchalive=howmuchalive+1;
if (isPanelAlive(whatPanelNumber - feld)) howmuchalive=howmuchalive+1;
if (isPanelAlive(whatPanelNumber - feld +1)) howmuchalive=howmuchalive+1;
if (isPanelAlive(whatPanelNumber + feld -1)) howmuchalive=howmuchalive+1;
if (isPanelAlive(whatPanelNumber + feld)) howmuchalive=howmuchalive+1;
if (isPanelAlive(whatPanelNumber + feld +1)) howmuchalive=howmuchalive+1;
return howmuchalive;
}
public void nextStep()
{
HashMap neueWerte = new HashMap();
for (int i=0; i < feld*feld; i++)
{
int check = wievieleNachbarnLeben(i);
//Zelle lebt
if (isPanelAlive(i))
{
if (check<=1||check>=4) neueWerte.put(String.valueOf(i), Color.gray);
}
//Zelle tot
else
{
if (check==3) neueWerte.put(String.valueOf(i), Color.yellow);
}
}
for (int i =0; i<feld*feld;i++)
{
if (neueWerte.containsKey(String.valueOf(i)))
{
JPanel change = (JPanel) meinePanels.get(String.valueOf(i));
change.setBackground((Color) neueWerte.get(String.valueOf(i)));
}
}
}
}