public static Block From(string blockDefinition) { var closed = (blockDefinition[0] == '(' ? Walls.Left : Walls.Nothing) + (blockDefinition[2] == ')' ? Walls.Right : Walls.Nothing) + (blockDefinition[1] == '_' ? Walls.Bottom : Walls.Nothing) + (blockDefinition[1] == '^' ? Walls.Top : Walls.Nothing) + (blockDefinition[1] == 'O' ? Walls.Top + Walls.Bottom : Walls.Nothing); var block = new Block { Closed = closed }; Tools.Assert<ArgumentException>( block.ToString() == blockDefinition, "Unexpected block definition {0}", blockDefinition ); return block; }
public static Labyrinth From(string labyrinthDefinition) { var rows = labyrinthDefinition.Split('\n').ToList().FindAll(row => row.Length > 0); var height = rows.Count; var width = (rows[0].Length+1)/4; Tools.Assert<ArgumentException>( (width*4-1)*height == rows.Select(row => row.Length).Sum(), "Unexpected labyrinth definition {0}", labyrinthDefinition ); var blocks = new Block[width,height]; for(var y = 0; y < height; y++) for(var x = 0; x < width; x++) blocks[x,y] = Block.From(rows[y].Substring(x*4,3)); return new Labyrinth { Width = width, Height = height, _block = blocks }; }