Life Game

הכללים:

כל משבצת מוקפת ב-8 משבצות, לכן לכל תא יכולים להיות עד 8 שכנים. המשחק מתנהל לפי הכללים הבאים, לכל תא מסתכלים על השכנים שלו בדור הנוכחי:

  • ·         אם הוא חי, ויש לו שכן אחד או שאין לו שכנים כלל, הוא מת מבדידות. אם יש לו יותר משלושה שכנים, הוא מת מצפיפות.
  • ·         אם הוא מת, ויש לו בדיוק שלושה שכנים, הוא הופך להיות חי ("נולד").
  • ·         אחרת (שני שכנים, או שלושה שכנים והוא חי) מצבו לא משתנה.

 

 

המחלקה lifeBoard

 

 

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

 

import javax.swing.*;

import javax.swing.table.DefaultTableCellRenderer;

 

 

public class lifeBoard {

      private JFrame frame;

      private JTable j;

      private JButton button;

      private int [][] arr;

      private int row,col;

      private String[] columnNames;

      private String[][] data;

      public lifeBoard(int row,int col){

            this.row = row;

            this.col = col;

            frame = new JFrame("Life Game");

            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            button = new JButton("Next Gen");

            button.setBounds(200, 400, 100, 50);

           

            button.addActionListener(new ActionListener() {

                  public void actionPerformed(ActionEvent arg0) {

                        update();

                  }

            });

           

            arr = new int [row][col];

            frame.add(button);

           

             data = new String[row][col];

             columnNames = new String[col];

             init();

                  // Column Names

                 

 

                  // Initializing the JTable

                  j = new JTable(data, columnNames);

                  j.setBounds(100, 100, 200, 200);

                  j.setLocation(100, 100);

                  DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();

                  centerRenderer.setHorizontalAlignment(JLabel.CENTER);

                  for (int i=0;i<col;i++){

                        j.getColumnModel().getColumn(i).setCellRenderer(centerRenderer);

                  }

                 

                  // adding it to JScrollPane

                  JScrollPane sp = new JScrollPane(j);

                  sp.setLocation(100,100);

                 

                  frame.add(sp);

                  // Frame Size

                  frame.setSize(700, 500);

                  // Frame Visible = true

                  frame.setVisible(true);

      }

     

      private void updateBoard(){

            for (int i=0;i<row;i++){

                  for (int j=0;j<col;j++){

                       

                        if (arr[i][j] == 1)

                              data[i][j] = "X";

                        else

                              data[i][j] = " ";

                  }

            }

            j = new JTable(data, columnNames);

            DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();

            centerRenderer.setHorizontalAlignment(JLabel.CENTER);

            for (int i=0;i<col;i++){

                  j.getColumnModel().getColumn(i).setCellRenderer(centerRenderer);

            }

            JScrollPane sp = new JScrollPane(j);

            sp.setLocation(100,100);

           

            frame.add(sp);

            // Frame Size

            frame.setSize(700, 500);

            // Frame Visible = true

            frame.setVisible(true);

      }

     

     

      private void update(){

            for (int i=0;i<row;i++){

                  for (int j=0;j<col;j++){

                        arr[i][j] = (int)(Math.random()*4);

                        if (arr[i][j] != 1)

                              arr[i][j] = 0;

                  }

            }

            updateBoard();

           

      }

     

      private void init(){

            for (int i=0;i<row;i++){

                  for (int j=0;j<col;j++){

                        arr[i][j] = (int)(Math.random()*4);

                        if (arr[i][j] != 1)

                              arr[i][j] = 0;

                       

                             

                             

                        if (arr[i][j] == 1)

                              data[i][j] = "X";

                        else

                              data[i][j] = " ";

                  }

            }

            for (int i =0;i<col;i++){

                  columnNames[i] = i+"";

            }

      }

}

 

 

התוכנית הראשית

 

public static void main(String[] args) {

           

            lifeBoard b1 = new lifeBoard(10,40);

 

           

      }