public void Normalise() { var report = new TestReport(); var p = Puzzle.Builder.DefaultTestPuzzle(); Assert.True(p.Definition.Wall.Equals(p[0, 0])); Assert.True(p.Definition.Void == p[1, 1]); Assert.True(p.Definition.Player == p[4, 4]); Assert.True(p[4, 4].IsPlayer); Assert.Equal(new VectorInt2(4, 4), p.Player.Position); var norm = StaticAnalysis.Normalise(p); report.WriteLine(norm.ToString()); Assert.Equal(new TestReport(@"########### ####.###### ###..###..# ##.X......# #...PX.#..# ###.X###..# ###..#OO..# ###.##O#.## ##......### ##.....#### ########### "), report); }
private BitStream Encode(Puzzle puzzle) { var norm = StaticAnalysis.RemoveOuter(StaticAnalysis.Normalise(puzzle)); var bs = new BitStream(); foreach (var cell in RunLength.Encode(norm.ForEachTile(), this)) { var s = cell.Item1.Cell; if (s == puzzle.Definition.Void || s == puzzle.Definition.Wall) { EncodeItem(cell, Control.None, bs); } if (s == puzzle.Definition.Floor) { EncodeItem(cell, Control.Floor, bs); } if (s == puzzle.Definition.Goal) { bs.AddRange(BitStream.Encode(Control.Goal)); } if (s == puzzle.Definition.Crate) { bs.AddRange(BitStream.Encode(Control.Crate)); } if (s == puzzle.Definition.CrateGoal) { bs.AddRange(BitStream.Encode(Control.CrateGoal)); } if (s == puzzle.Definition.Player) { bs.AddRange(BitStream.Encode(Control.Player)); } if (s == puzzle.Definition.PlayerGoal) { bs.AddRange(BitStream.Encode(Control.PlayerGoal)); } } bs.AddRange(BitStream.Encode(Control.End)); return(bs); }