הכללים:
כל משבצת מוקפת ב-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);
}