CompSci 308 Spring 2024 |
Advanced Software Design and Implementation |
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
Use GIT to push your team's implementation to the main
branch of the provided, shared, cellsociety_teamNN
repository hosted in the course's Gitlab group.
As your submission for this project, use GIT to add
, commit
, and push
the following
doc
folder: all design documentation and any supporting imagessrc/main/java
folder: all project codesrc/main/resources
folder: any images or program resource filesdata
folder: all example simulation filesIt 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.
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.
/etc
. It is also thanks to config files that any time you launch an application, it has "memories" of how you like to use it (or how GIT remembers your name and which repository to send your code to). There are many standard formats but Java prefers .properties and XML files. XML is an open, industry standard, flexible format, supported by most companies (including rivals Google, Facebook, Microsoft, and Apple) as well as many web protocols and Linux programs. It is supported in all modern programming languages and, while it may be viewed as "overly-verbose", it is generally easy to read and generate algorithmically.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.