Ejemplo n.º 1
0
        public Field(int rows, int columns, int startRow, int startColumn)
        {
            this.columns = columns;

            var mainDescriptionGenerator = new DimensionDescriptionGenerator
                                               {
                                                   Length = rows,
                                                   Assignment = DimensionAssignment.Row,
                                                   Breadth = 1,
                                                   Mode = TraverseMode.Serpentine
                                               };
            SetStartSimple(mainDescriptionGenerator, startRow, rows);

            var subDescriptionGenerator = new DimensionDescriptionGenerator
                                              {
                                                  Length = columns,
                                                  Assignment = DimensionAssignment.Column,
                                                  Breadth = 1,
                                                  Mode = TraverseMode.Serpentine
                                              };
            SetStartSimple(subDescriptionGenerator, startColumn, columns);

            main = mainDescriptionGenerator.Generate();
            sub = subDescriptionGenerator.Generate();
        }
Ejemplo n.º 2
0
        public Field(int rows, int columns, int startRow, int startColumn, char startDirection, char mode, int breadth)
        {
            this.columns = columns;

            var mainMode = GetTraverseModeFromChar(mode);
            var startSubOrder = DetermineStartSubOrder(startDirection);
            const TraverseMode subMode = TraverseMode.Serpentine;

            var rowDescriptionGenerator = new DimensionDescriptionGenerator {Length = rows, Start = startRow - 1, Assignment = DimensionAssignment.Row};
            var columnDescriptionGenerator = new DimensionDescriptionGenerator {Length = columns, Start = startColumn - 1, Assignment = DimensionAssignment.Column};

            DimensionDescriptionGenerator mainDescriptionGenerator, subDescriptionGenerator;
            if(startDirection == 'N' || startDirection == 'S')
            {
                mainDescriptionGenerator = columnDescriptionGenerator;
                subDescriptionGenerator = rowDescriptionGenerator;
            } else if(startDirection == 'O' || startDirection == 'W')
            {
                mainDescriptionGenerator = rowDescriptionGenerator;
                subDescriptionGenerator = columnDescriptionGenerator;
            } else
            {
                throw new ArgumentException();
            }

            mainDescriptionGenerator.Breadth = breadth;
            mainDescriptionGenerator.Mode = mainMode;
            mainDescriptionGenerator.StartSubOrder = startSubOrder;

            subDescriptionGenerator.Breadth = 1;
            subDescriptionGenerator.Mode = subMode;

            main = mainDescriptionGenerator.Generate();
            sub = subDescriptionGenerator.Generate();
        }
Ejemplo n.º 3
0
        public Field(int rows, int columns, int startRow, int startColumn, char startDirection, char mode, int breadth)
        {
            this.columns = columns;

            TraverseMode mainMode;
            switch (mode)
            {
                case 'S':
                    mainMode = TraverseMode.Serpentine;
                    break;
                case 'Z':
                    mainMode = TraverseMode.Circular;
                    break;
                default:
                    throw new ArgumentException();
            }

            Order startSubOrder;
            switch (startDirection)
            {
                case 'N':
                    startSubOrder = Order.Upwards;
                    break;
                case 'S':
                    startSubOrder = Order.Downwards;
                    break;
                case 'O':
                    startSubOrder = Order.Upwards;
                    break;
                case 'W':
                    startSubOrder = Order.Downwards;
                    break;
                default:
                    throw new ArgumentException();
            }

            const TraverseMode subMode = TraverseMode.Serpentine;

            var rowDescriptionGenerator = new DimensionDescriptionGenerator {Length = rows, Start = startRow - 1, Assignment = DimensionAssignment.Row};
            var columnDescriptionGenerator = new DimensionDescriptionGenerator {Length = columns, Start = startColumn - 1, Assignment = DimensionAssignment.Column};

            DimensionDescriptionGenerator mainDescriptionGenerator, subDescriptionGenerator;
            if(startDirection == 'N' || startDirection == 'S')
            {
                mainDescriptionGenerator = columnDescriptionGenerator;
                subDescriptionGenerator = rowDescriptionGenerator;
            } else if(startDirection == 'O' || startDirection == 'W')
            {
                mainDescriptionGenerator = rowDescriptionGenerator;
                subDescriptionGenerator = columnDescriptionGenerator;
            } else
            {
                throw new ArgumentException();
            }

            mainDescriptionGenerator.Breadth = breadth;
            mainDescriptionGenerator.Mode = mainMode;
            mainDescriptionGenerator.StartSubOrder = startSubOrder;
            subDescriptionGenerator.Breadth = 1;
            subDescriptionGenerator.Mode = subMode;

            main = mainDescriptionGenerator.Generate();
            sub = subDescriptionGenerator.Generate();
        }
Ejemplo n.º 4
0
 private static void SetStartSimple(DimensionDescriptionGenerator generator, int startNumber, int length)
 {
     if (startNumber == 1)
         generator.Start = 0;
     else if (startNumber == length)
         generator.Start = length - 1;
     else
         throw new ArgumentException();
 }