CompSci 308
Spring 2024
Advanced Software Design and Implementation

Team Project: Cell Society

The chess-board is the world; the pieces are the phenomena of the universe; the rules of the game are what we call the laws of Nature. — T. H. Huxley

Submitting Your Work

Use GIT to push your team's implementation to the main branch of the provided, sharedcellsociety_teamNN repository hosted in the course's Gitlab group.

As your submission for this project, use GIT to addcommit, and push the following


This project will be submitted in stages:

It is strongly encouraged that you to start simply in order to verify your understanding of the project's core features. Then refactor your code to help it serve as a foundation for the more diverse functionality expected.


In teams, write a Java program using straight OpenJFX that allows users to simulate a variety of Cellular Automata (CA) models on a regular grid of cells, each in one of a finite number of states, which are updated discretely based on a fixed rule applied to each that determines the cell's new state based on its current state and the states of the cells around it, its neighborhood. A simulation takes place on a 2D grid (a given number of rows and columns) of cells (with an initial state such as on and off). A simulation's rules (such as whether a cell changes state, is created, or moves to another position in the grid) are applied on each cell "simultaneously" (i.e., based on its current state and that of its neighbors) and then cell states are updated in a second pass. The grid's edges represent the world's bounds (i.e., cells on the grid's edges should have smaller, partial, neighborhoods than those in the middle, with full neighborhoods (i.e., 8 neighbors)).

A simulation's rule will be written in Java code but the kind of simulation, its starting configuration, as well as any initial parameter settings will be read from an eXtensible Markup Language, XML, formatted file (the exact tags of this configuration file should be decided by your team).

The full list of requirements is given here.

CompSci Context

This project highlights the following interesting and foundational Computer Science concepts. You are not expected to write a general or complete version of any of these concepts, but learning about them may help provide a context to begin thinking about some design issues or connect your work in this course to the broader computing community.

Individual Responsibilities when Working as a Team

This project requires steady, consistent, work — only by putting in consistent time each week will you see measurable progress and not have to pull "heroic" all-nighters.

Although this is a team project, everyone has individual responsibilities to the team that can be summed up as follows:

Unfortunately conflicts are likely to occur, so please let the Teaching Team know as soon as possible — even if it has happened just once or twice since it is better to deal with the situation early rather than having a disaster at the end when little can be done to get back on track.


Experiment online with the Game of Life simulator or NetLogo Fire Simulation.