Write a program titled \"YourLastName_GameOfLife\" which will implement Conway\'
ID: 3844347 • Letter: W
Question
Write a program titled "YourLastName_GameOfLife" which will implement Conway's Game of Life. Life is a
simulation of simple one-celled organisms and therefore typically played on a 2D grid of square cells. Each cell
has two possible states: dead or alive. To calculate each new generation of the board, use the following rules:
For spaces already "alive":
Each cell with less than two neighbors, who are alive, dies of loneliness in the next generation.
Each cell with more than three neighbors, who are alive, dies of overpopulation in the next generation.
Each cell with two or three neighbors, who are alive, continues to be alive in the next generation.
For spaces already "dead":
Each cell with three neighbors, who are alive, comes to life in the next generation.
Note: Every cell has eight neighbors which are the cells that are diagonally, vertically, or horizontally adjacent.
For your program, use a 2D char array to represent the board. Use '0' to represent dead cells of the board and 'X'
to represent cells which are alive. Your program will load game board data from a file to begin the game, with
the first line of the input file consisting of two ints representing the number of columns and rows for the board.
For example, a sample input file may appear as follows:
10 9
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 X X X 0 0 0
0 0 X 0 0 0 0 X 0 0
0 0 X 0 0 0 0 X 0 0
0 0 X 0 0 0 0 X 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 X X X 0 0 0
0 0 0 0 0 0 0 0 0 0
Methods to implement:
The constructor which initializes a new game board by prompting the user for the file name and loading
the game board data from the file.
public int getColumns(), return the number of columns in the game board.
public int getRows(), return the number of rows in the game board.
public int getCell(int column, int row), get the value of the cell at given column and row, returning 0 if
either the column or the row is outside the bounds of the game board.
public void setCell(int column, int row, int value), set the value of the cell at given column and row.
This method does not have to handle out-of-bounds column or row numbers.
public void computeNextGeneration(int generation), creates a temporary 2D array to compute the next
iteration of the board containing the next generation of organisms, as determined by the Rules of Life.
Then updates the board to represent the next generation. The argument passed in represents the number
of generations the user wants to compute. To compute each generation, the method should recursively
call itself and decrement the integer until it terminates when there are no more generations left to
compute.
public void print(), which prints out the board to the console.
The program should prompt the user for the file name and how many generations to compute, then print out
each generation to the screen.
The following shows an example interaction captured in a file by the command “% script GameOfLife.out”
(bolded areas represent the user's input):
Script started on Thu Sep 26 10:23:58 2013
% java GameOfLife
Enter file name: sample.life
Enter how many generations to compute: 4
Generation 1
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 X X X 0 0 0
0 0 X 0 0 0 0 X 0 0
0 0 X 0 0 0 0 X 0 0
0 0 X 0 0 0 0 X 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 X X X 0 0 0
0 0 0 0 0 0 0 0 0 0
Generation 2
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 X 0 0 0 0
0 0 0 0 0 X X 0 0 0
0 0 0 X 0 X 0 X 0 0
0 X X X 0 0 X X X 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 X X 0 0 0
0 0 0 0 0 X 0 0 0 0
0 0 0 0 0 X 0 0 0 0
Generation 3
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 X X 0 0 0
0 0 0 0 0 X 0 0 0 0
0 0 0 X 0 X 0 0 X 0
0 0 X X X 0 X X X 0
0 0 X 0 0 X 0 0 0 0
0 0 0 0 0 X X 0 0 0
0 0 0 0 X X 0 0 0 0
0 0 0 0 0 0 0 0 0 0
Generation 4
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 X X 0 0 0
0 0 0 0 0 X 0 0 0 0
0 0 X X 0 X 0 0 X 0
0 0 X 0 0 0 X X X 0
0 0 X 0 0 0 0 0 0 0
0 0 0 0 0 0 X 0 0 0
0 0 0 0 X X X 0 0 0
0 0 0 0 0 0 0 0 0 0
% exit
script done on Thu Sep 26 10:24:17 2013
Explanation / Answer
import java.io.*;
import java.util.Scanner;
public class Sarin_GameOfLife
{
private char[][] board;
private int columns;
private int rows;
private int generation;
public static void main(String[] args) throws FileNotFoundException
{
Sarin_GameOfLife game = new Sarin_GameOfLife();
Scanner keyboard = new Scanner(System.in);
System.out.print("Enter how many generations to compute: ");
int gen = keyboard.nextInt();
System.out.println("Generation 1:");
game.print();
for(int i = 2; i <= gen; i++)
{
System.out.println("Generation " + i);
game.computeNextGeneration(gen);
game.printNew();
}
}
public Sarin_GameOfLife() throws FileNotFoundException
{
Scanner keyboard = new Scanner(System.in);
System.out.print("Enter file name: ");
String filename = keyboard.nextLine();
File file = new File(filename);
Scanner inputFile = new Scanner(file);
int columns = inputFile.nextInt();
int rows = inputFile.nextInt();
inputFile.nextLine();
board = new char[rows][columns];
for(int i = 0; i < rows; i++)
{
String line = inputFile.nextLine();
for(int j = 0; j < columns; j++)
{
board[i][j] = line.charAt(j);
}
}
}
public int getColumns()
{
return columns;
}
public int getRows()
{
return rows;
}
public int getCell(int rows, int columns)
{
if(board[rows][columns] == 'X' || board[rows][columns] == '0')
{
return board[rows][columns];
}
else
{
return 0;
}
}
public void setCell(int rows, int columns, int value)
{
for(int i = 0; i < board.length; i++)
{
for(int j = 0; j < board[i].length; j++)
{
value = board[rows][columns];
}
}
}
public void print()
{
for(int i = rows; i < board.length; i++)
{
for(int j = columns; j < board[i].length; j++)
{
System.out.print( board[i][j] );
}
System.out.println();
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.