Skip to content
Snippets Groups Projects
BrianBrainState.java 1.2 KiB
Newer Older
  • Learn to ignore specific revisions
  • SAHIN Melis damla's avatar
    TP
    SAHIN Melis damla committed
    package model.automata;
    
    import javafx.scene.paint.Color;
    import model.State;
    
    import java.util.List;
    
    public class BrianBrainState implements State<BrianBrainState> {
        enum StateType { DEAD,
            FIRE,
            READY_TO_FIRE }
    
        private final StateType currentState;
    
        public BrianBrainState(StateType state) {
            this.currentState = state;
        }
    
        @Override
        public Color getColor() {
            return switch (currentState) {
                case DEAD -> Color.WHITE;
                case FIRE -> Color.RED;
                case READY_TO_FIRE -> Color.YELLOW;
            };
        }
        @Override
        public BrianBrainState next() {
            return new BrianBrainState(currentState == StateType.FIRE ? StateType.DEAD : StateType.FIRE);
        }
        @Override
        public BrianBrainState update(List<BrianBrainState> neighbours) {
            int fireCount = (int) neighbours.stream().filter(n -> n.currentState == StateType.FIRE).count();
    
            if (currentState == StateType.READY_TO_FIRE && fireCount > 0) {
                return new BrianBrainState(StateType.FIRE);
            } else if (currentState == StateType.FIRE) {
                return new BrianBrainState(StateType.DEAD);
            } else {
                return this;
            }
        }
    }