Skip to content
Snippets Groups Projects
Select Git revision
  • f996b97f3c75ed73409b15f142f45a746ddc6eeb
  • main default protected
  • melissa
  • yanis
  • variant
5 results

Rock.java

Blame
  • Forked from COUETOUX Basile / FirefighterStarter
    Source project has a limited visibility.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    Fires.java 2.30 KiB
    package model;
    
    import util.Position;
    
    import java.util.*;
    
    public class Fires implements ModelElement {
    
        private Set<Position> firePositions;
    
        private int step;
        private int rowCount;
        private int columnCount;
    
        private final Random randomGenerator = new Random();
    
        public Fires() {
        }
    
        public void add(Position newPositions){
            firePositions.add(newPositions);
        }
    
        public Set<Position> getFirePositions() {
            return firePositions;
        }
    
        public List<Position> updateFires() {
            List<Position> result = new ArrayList<>();
            if (step % 2 == 0) {
                List<Position> newFirePositions = new ArrayList<>();
                for (Position fire : firePositions) {
                    newFirePositions.addAll(neighbors(fire, fire.row(), fire.column()));
                }
                firePositions.addAll(newFirePositions);
                result.addAll(newFirePositions);
            }
            return result;
    
        }
    
        public void incrementStep(){
            this.step ++;
        }
    
        public void initializeElements(int initialFireCount, int rowCount, int columnCount) {
            //this.step=step;
            this.columnCount = columnCount;
            this.rowCount = rowCount;
            firePositions = new HashSet<>();
            for (int index = 0; index < initialFireCount; index++)
                firePositions.add(randomPosition());
        }
    
        @Override
        public Position randomPosition() {
            if (rowCount <= 0 || columnCount <= 0) {
                throw new IllegalArgumentException("Les limites doivent être positives");
            }
    
            return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount));
    
        }
    
        public void extinguish(Position position) {
            firePositions.remove(position);
        }
    
        private List<Position> neighbors(Position position, int rowCount, int columnCount) {
            List<Position> list = new ArrayList<>();
            if (position.row() > 0) list.add(new Position(position.row() - 1, position.column()));
            if (position.column() > 0) list.add(new Position(position.row(), position.column() - 1));
            if (position.row() < rowCount - 1) list.add(new Position(position.row() + 1, position.column()));
            if (position.column() < columnCount - 1) list.add(new Position(position.row(), position.column() + 1));
            return list;
        }
    }