You will write a Java program that implements Conway’s Game of Life, a simple ce
ID: 3765277 • Letter: Y
Question
You will write a Java program that implements Conway’s Game of Life, a simple cellular automaton discussed in class. See for example: http://www.bitstorm.org/gameoflife/ Our simplified version has a 10 x 10 grid, numbered like this: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 The grid is represented by a 10 x 10 2-dimensional integer array. If the grid point (i, j) is “populated”, the array element [i][j] contains 1; otherwise it contains 0. Elements along the edges, i == 0 or 9, or j == 0 or 9, are always unpopulated. When we display the grid, a populated cell is indicated by a ‘#’; an unpopulated cell is indicated by a space. What your program should do: Prompt the user to enter a list of (i,j) pairs (both non-negative integers) (stop when a negative integer is read for either i or j) Prompt the user to enter the number of time steps Initialize the grid based on the (i,j) pairs entered by the user Display the initial state of the grid (call the displayGrid() method) For each time step, update the grid according to Conway’s rules (call the updateGrid() method) display the grid (call the displayGrid() method) We follow Conway’s standard rules for updating the cells. For a cell that is “populated”, if the cell has <= 1 neighbors, or > = 4 neighbors, it dies (becomes 0). Otherwise, it survives (remains 1). For a cell that is not populated, if the cell has exactly 3 neighbors, it becomes populated (becomes 1). Cells on the edge always remain unpopulated (0). The displayGrid() method has prototype: void displayGrid(int mat[][]); It displays the borders of the grid (see sample runs below), and prints the 10 x 10 grid of cells. Populated cells are indicated with a ‘#’ sign, unpopulated cells with a space. The updateGrid() method has prototype: void updateGrid(int mat[][]); mat is the 2-dimensional array that contains the current state of the grid. The method counts the neighbors in each cell of the grid, updates the cells in the grid according to Conway’s rules, and returns the grid. You can obviously enter arbitrary initial conditions to test your program Sample runs: libra% java Life Please enter list of (i,j) pairs for populated cells (negative i or j to quit): 6 4 6 5 6 6 6 7 6 8 -1 -1 Enter number of time steps: 5 Initial grid: 0123456789 0 1 2 3 4 5 ##### 6 7 8 9 Time step 1 0123456789 0 1 2 3 4 ### 5 ### 6 ### 7 8 9 Time step 2 0123456789 0 1 2 3 # 4 # # 5 # # 6 # # 7 # 8 9 Time step 3 0123456789 0 1 2 3 # 4 ### 5 ## ## 6 ### 7 # 8 9 Time step 4 0123456789 0 1 2 3 ### 4 # # 5 # # 6 # # 7 ### 8 9 Time step 5 0123456789 0 1 2 # 3 ### 4 # # # 5 ### ## 6 # # # 7 ### 8 9 libra% java Life Please enter list of (i,j) pairs for populated cells (negative i or j to quit): 5 4 6 4 4 5 5 5 7 5 5 6 6 6 -1 -1 Enter number of time steps: 5 Initial grid: 0123456789 0 1 2 3 # 4 ### 5 # # 6 # 7 8 9 Time step 1 0123456789 0 1 2 3 ### 4 # # 5 # # 6 # 7 8 9 Time step 2 0123456789 0 1 2 # 3 # # 4 ## ## 5 # # 6 # 7 8 9 [some steps not shown…] Time step 5 0123456789 0 1 # 2 ### 3 ##### 4 ## ## 5 ##### 6 ### 7 # 8 9 libra%
Explanation / Answer
import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.swing.event.*; import java.awt.event.MouseListener; import java.util.Hashtable; public class SwingLife extends JApplet { LifePanel lifePanel; public void init() { Container contentPane = getContentPane(); lifePanel = new LifePanel(); contentPane.add(lifePanel); lifePanel.startAnimation(); } public String getAppletInfo() { return "Title: Swing Game of Life Applet v1.0b, 20 Oct 2000. " + "Author: Brett Alistair Kromkamp. " + "Copyright (C) 2000 - Brett Alistair Kromkamp. " + "A simple Swing applet demonstrating Conway's Game of Life."; } public String[][] getParameterInfo() { String [][] info = {{"NONE", "NONE", "This applet takes no HTML-parameters"}}; return info; } } class LifeGridComponent extends JComponent { final static int XSIZE = 362; // class constants final static int YSIZE = 162; private Dimension preferredSize = new Dimension(XSIZE, YSIZE); private Cursor cursor; private int row; private int col; private int size; private LifePanel lp; public LifeGridComponent(LifePanel newPanel, int newRow, int newCol, int newSize) { setPreferredSize(preferredSize); setMinimumSize(preferredSize); setCursor(cursor.getPredefinedCursor(cursor.CROSSHAIR_CURSOR)); this.row = newRow; this.col = newCol; this.size = newSize; this.lp = newPanel; } public void paint(Graphics g) { int i, j; for (i = 0; iRelated Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.