private IAction? Reproduce(OrganismKind ownKind, IOrganismEnvironment environment) { return WithRandomUnoccupiedCell(environment, destination => { StepsSinceLastReproduction = 0; return new Copy(destination, Clone(), ownKind); }); }
public IAction? Step(OrganismKind ownKind, IOrganismEnvironment environment) { StepsSinceLastReproduction += 1; if (ShouldReproduce()) { return Reproduce(ownKind, environment); } return Move(environment); }
private IAction?Reproduce(OrganismKind ownKind, IOrganismEnvironment environment) { var unoccupiedNeighbours = environment.GetFreeNeighbours().ToList(); if (unoccupiedNeighbours.Count == 0) { return(null); } var destination = RandomElementPicker.PickRandomElement(unoccupiedNeighbours); var clone = Organism.Clone(); return(new Copy(destination, clone, ownKind)); }
public Copy(Position destination, IOrganism organism, OrganismKind organismKind) { Destination = destination; Organism = organism; OrganismKind = organismKind; }
public void AddOrganism(Position position, IOrganism organism, OrganismKind kind) { throw new System.NotImplementedException(); }
public GridCell(OrganismKind organismKind, IOrganism organism) { OrganismKind = organismKind; Organism = organism; }
public IAction?Step(OrganismKind ownKind, IOrganismEnvironment environment) { throw new System.NotImplementedException(); }