From 53447461a52debf7ff91d80f0fa222d88a321126 Mon Sep 17 00:00:00 2001 From: Guyslain <guyslain.naves@lis-lab.fr> Date: Mon, 23 Oct 2023 16:50:33 +0200 Subject: [PATCH] Ajout Wireworld --- src/main/java/SimulatorApplication.java | 3 +- .../model/automata/WireWorldAutomaton.java | 39 ++++++++++++++++ .../java/model/automata/WireWorldState.java | 44 +++++++++++++++++++ 3 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 src/main/java/model/automata/WireWorldAutomaton.java create mode 100644 src/main/java/model/automata/WireWorldState.java diff --git a/src/main/java/SimulatorApplication.java b/src/main/java/SimulatorApplication.java index 7e2a01d..1b933b4 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 0000000..5ee116d --- /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 0000000..4d94fd2 --- /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; + }; + } +} -- GitLab