diff --git a/src/main/java/SimulatorApplication.java b/src/main/java/SimulatorApplication.java index 7e2a01d75586b977138a32a64624b3c4879f71a6..1b933b4b006e10e0dc37af82ddd0a02510a05131 100644 --- a/src/main/java/SimulatorApplication.java +++ b/src/main/java/SimulatorApplication.java @@ -8,6 +8,7 @@ import javafx.scene.Scene; import javafx.stage.Stage; import model.CellularAutomatonSimulation; import model.automata.GameOfLifeAutomaton; +import model.automata.WireWorldAutomaton; import java.io.IOException; import java.net.URL; @@ -37,7 +38,7 @@ public class SimulatorApplication extends Application { public SimulatorApplication() { this.simulation = new CellularAutomatonSimulation<>( - new GameOfLifeAutomaton(NUMBER_OF_COLUMNS,NUMBER_OF_ROWS), + new WireWorldAutomaton(NUMBER_OF_COLUMNS,NUMBER_OF_ROWS), GENERATOR ); } diff --git a/src/main/java/model/automata/WireWorldAutomaton.java b/src/main/java/model/automata/WireWorldAutomaton.java new file mode 100644 index 0000000000000000000000000000000000000000..5ee116d98a117a94f24d3d8d3ea45e9895bd6f41 --- /dev/null +++ b/src/main/java/model/automata/WireWorldAutomaton.java @@ -0,0 +1,39 @@ +package model.automata; + +import model.CellularAutomaton; + +import java.util.Random; + +import static model.automata.WireWorldState.WIRE; + +public class WireWorldAutomaton implements CellularAutomaton<WireWorldState> { + + private final int numberOfColumns; + private final int numberOfRows; + + public WireWorldAutomaton(int numberOfColumns, int numberOfRows) { + this.numberOfColumns = numberOfColumns; + this.numberOfRows = numberOfRows; + } + + @Override + public int numberOfColumns() { + return numberOfColumns; + } + + @Override + public int numberOfRows() { + return numberOfRows; + } + + @Override + public WireWorldState defaultState() { + return WireWorldState.DEAD; + } + + @Override + public WireWorldState randomState(Random generator) { + int r = generator.nextInt(10); + return r < 3 ? WireWorldState.WIRE: WireWorldState.DEAD; + } +} diff --git a/src/main/java/model/automata/WireWorldState.java b/src/main/java/model/automata/WireWorldState.java new file mode 100644 index 0000000000000000000000000000000000000000..4d94fd294b6e3336868e7a60296e43aee83726ee --- /dev/null +++ b/src/main/java/model/automata/WireWorldState.java @@ -0,0 +1,44 @@ +package model.automata; + +import javafx.scene.paint.Color; +import model.State; + +import java.util.List; + +public enum WireWorldState implements State<WireWorldState> { + DEAD, WIRE, BLUE, RED; + + + @Override + public Color getColor() { + return switch (this) { + case DEAD -> Color.BLACK; + case WIRE -> Color.GOLD; + case BLUE -> Color.BLUE; + case RED -> Color.RED; + }; + } + + @Override + public WireWorldState cycle() { + return switch (this) { + case DEAD -> WIRE; + case WIRE -> BLUE; + case BLUE -> RED; + case RED -> DEAD; + }; + } + + @Override + public WireWorldState update(List<WireWorldState> neighbours) { + return switch (this) { + case DEAD -> DEAD; + case WIRE -> { + int countBlues = State.count(BLUE, neighbours); + yield (countBlues == 1 || countBlues == 2)? BLUE: WIRE; + } + case BLUE -> RED; + case RED -> WIRE; + }; + } +}