From 60370f9add521b2a6a8eb18730433baea8955822 Mon Sep 17 00:00:00 2001 From: Guyslain <guyslain.naves@lis-lab.fr> Date: Mon, 16 Oct 2023 08:23:34 +0200 Subject: [PATCH] ajout wireworld --- src/main/java/SimulatorApplication.java | 4 +- .../model/automata/WireWorldAutomata.java | 39 +++++++++++++++++ .../java/model/automata/WireWorldState.java | 43 +++++++++++++++++++ 3 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 src/main/java/model/automata/WireWorldAutomata.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 1e2f7b3..6f4bae3 100644 --- a/src/main/java/SimulatorApplication.java +++ b/src/main/java/SimulatorApplication.java @@ -9,6 +9,8 @@ import javafx.stage.Stage; import model.CellularAutomatonSimulation; import model.automata.BiColorAutomaton; import model.automata.SeedsAutomaton; +import model.automata.WireWorldAutomata; +import model.automata.WireWorldState; import java.io.IOException; import java.net.URL; @@ -38,7 +40,7 @@ public class SimulatorApplication extends Application { public SimulatorApplication() { this.simulation = new CellularAutomatonSimulation<>( - new BiColorAutomaton(NUMBER_OF_COLUMNS,NUMBER_OF_ROWS), + new WireWorldAutomata(NUMBER_OF_COLUMNS,NUMBER_OF_ROWS), GENERATOR ); } diff --git a/src/main/java/model/automata/WireWorldAutomata.java b/src/main/java/model/automata/WireWorldAutomata.java new file mode 100644 index 0000000..f476a25 --- /dev/null +++ b/src/main/java/model/automata/WireWorldAutomata.java @@ -0,0 +1,39 @@ +package model.automata; + +import model.CellularAutomaton; + +import java.util.Random; + +public class WireWorldAutomata implements CellularAutomaton<WireWorldState> { + + private final int numberOfColumns; + private final int numberOfRows; + + public WireWorldAutomata(int numberOfColumns, int numberOfRows) { + this.numberOfColumns = numberOfColumns; + this.numberOfRows = numberOfRows; + } + + @Override + public int numberOfColumns() { + return this.numberOfColumns; + } + + @Override + public int numberOfRows() { + return this.numberOfRows; + } + + @Override + public WireWorldState defaultState() { + return WireWorldState.DEAD; + } + + @Override + public WireWorldState randomState(Random generator) { + int r = generator.nextInt(18); + return r < 5 ? WireWorldState.CONDUCTOR: + r == 5 ? WireWorldState.HEAD: + 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..63b89a2 --- /dev/null +++ b/src/main/java/model/automata/WireWorldState.java @@ -0,0 +1,43 @@ +package model.automata; + +import javafx.scene.paint.Color; +import model.State; + +import java.util.List; + +public enum WireWorldState implements State<WireWorldState> { + DEAD, CONDUCTOR, HEAD, TAIL; + + @Override + public Color getColor() { + return switch (this) { + case DEAD -> Color.BLACK; + case CONDUCTOR -> Color.GOLD; + case HEAD -> Color.BLUE; + case TAIL -> Color.RED; + }; + } + + @Override + public WireWorldState next() { + return switch (this) { + case DEAD -> CONDUCTOR; + case CONDUCTOR -> HEAD; + case HEAD -> TAIL; + case TAIL -> DEAD; + }; + } + + @Override + public WireWorldState update(List<WireWorldState> neighbours) { + return switch (this) { + case DEAD -> DEAD; + case CONDUCTOR -> { + int heads = State.count(HEAD,neighbours); + yield heads == 1 || heads == 2 ? HEAD: CONDUCTOR; + } + case HEAD -> TAIL; + case TAIL -> CONDUCTOR; + }; + } +} -- GitLab