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(); }
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(); }
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(); }
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(); }