Ejemplo n.º 1
0
        private void MakeTurn(Membrane currentCreature)
        {
            try
            {
                var turnResult = currentCreature.Turn(EatMatrix, Creatures);
                var action     = turnResult.Item1;
                var direction  = turnResult.Item2;

                switch (action)
                {
                case ActionEnum.Die:
                    MakeTurnDie(currentCreature.Position); break;

                case ActionEnum.MakeChild:
                    MakeTurnMakeChild(direction, currentCreature); break;

                case ActionEnum.Go:
                    MakeTurnGo(direction, currentCreature); break;

                case ActionEnum.Eat:
                    currentCreature.Eat(EatMatrix); break;

                default: throw new Exception();
                }
            }
            catch (Exception)
            {
                MakeTurnDie(currentCreature.Position);
                EXCEPTIONS++;
            }
        }
Ejemplo n.º 2
0
 public Matrix(int length, int height, Creator creator, IFoodDistributionStrategy strategy)
 {
     Length = length;
     Height = height;
     _creator = creator;
     EatMatrix = new FoodMatrix(length, height, strategy);
     Creatures = new Membrane[length, height];
 }
Ejemplo n.º 3
0
        private void MakeTurnMakeChild(DirectionEnum direction, Membrane creature)
        {
            if (direction == DirectionEnum.Stay)
            {
                return;
            }
            var childPoint = DirectionEx.PointByDirection(direction, creature.Position);

            if (CommonMethods.IsValidAndFree(childPoint, Creatures))
            {
                Creatures[childPoint.X, childPoint.Y] = creature.MakeChild(childPoint);
            }
        }
Ejemplo n.º 4
0
        private void MakeTurnGo(DirectionEnum direction, Membrane creature)
        {
            if (direction == DirectionEnum.Stay)
            {
                return;
            }
            var newPosition = DirectionEx.PointByDirection(direction, creature.Position);

            if (!CommonMethods.IsValidAndFree(newPosition, Creatures))
            {
                return;
            }
            creature.Move(Creatures, newPosition);
            Stats.AddStats(direction);
        }
Ejemplo n.º 5
0
 private void MakeTurnMakeChild(DirectionEnum direction, Membrane creature)
 {
     if (direction == DirectionEnum.Stay)
         return;
     var childPoint = DirectionEx.PointByDirection(direction, creature.Position);
     if (CommonMethods.IsValidAndFree(childPoint, Creatures))
     {
         Creatures[childPoint.X, childPoint.Y] = creature.MakeChild(childPoint);
     }
 }
Ejemplo n.º 6
0
        private void MakeTurnGo(DirectionEnum direction, Membrane creature)
        {
            if (direction == DirectionEnum.Stay)
                return;
            var newPosition = DirectionEx.PointByDirection(direction, creature.Position);

            if (!CommonMethods.IsValidAndFree(newPosition, Creatures)) return;
            creature.Move(Creatures, newPosition);
            Stats.AddStats(direction);
        }
Ejemplo n.º 7
0
        private void MakeTurn(Membrane currentCreature)
        {
            try
            {
                var turnResult = currentCreature.Turn(EatMatrix, Creatures);
                var action = turnResult.Item1;
                var direction = turnResult.Item2;

                switch (action)
                {
                    case ActionEnum.Die:
                        MakeTurnDie(currentCreature.Position); break;
                    case ActionEnum.MakeChild:
                        MakeTurnMakeChild(direction, currentCreature); break;
                    case ActionEnum.Go:
                        MakeTurnGo(direction, currentCreature); break;
                    case ActionEnum.Eat:
                        currentCreature.Eat(EatMatrix); break;
                    default: throw new Exception();
                }
            }
            catch (Exception)
            {
                MakeTurnDie(currentCreature.Position);
                EXCEPTIONS++;
            }
        }
Ejemplo n.º 8
0
 private DirectionEnum GetDirectionForChild(Membrane[,] creatures)
 {
     var points = CommonMethods.GetPoints(Position);
     var directions = (from item in points where CommonMethods.IsValidAndFree(item, creatures)
                       select DirectionEx.DirectionByPoints(Position, item)).ToList();
     return directions.Count == 0 ? DirectionEnum.Stay : directions.ElementAt(_random.Next(directions.Count));
 }
Ejemplo n.º 9
0
        public Tuple<ActionEnum, DirectionEnum> Turn(FoodMatrix eatMatrix, 
            Membrane[,] creatures)
        {
            if (HasToDie()) return Tuple.Create(ActionEnum.Die, DirectionEnum.Stay);

            _energyPoints -= CreatureConstants.MinFoodToSurvive;

            var result = Creature.MyTurn(eatMatrix, creatures, Position, _random, HasOneBite(eatMatrix), _energyPoints);

            return result.Item1 == ActionEnum.MakeChild ? Tuple.Create(ActionEnum.MakeChild, GetDirectionForChild(creatures)) : result;
        }
Ejemplo n.º 10
0
 public void Move(Membrane[,] creatures, Point newPosition)
 {
     creatures[Position.X, Position.Y] = null;
     Position = newPosition;
     creatures[Position.X, Position.Y] = this;
 }