diff options
author | jbzdarkid <jbzdarkid@gmail.com> | 2019-11-22 10:04:19 -0800 |
---|---|---|
committer | jbzdarkid <jbzdarkid@gmail.com> | 2019-11-22 10:04:19 -0800 |
commit | 059e44fa16b649938d79597bcf8f41bf4aa136ab (patch) | |
tree | 255c9f256ecae0923e872e62ccaab48221f12743 /Source/Randomizer2Core.cpp | |
parent | cbdf87bb8aaebca9c969dfec3c1664b9b6355a0d (diff) | |
download | witness-tutorializer-059e44fa16b649938d79597bcf8f41bf4aa136ab.tar.gz witness-tutorializer-059e44fa16b649938d79597bcf8f41bf4aa136ab.tar.bz2 witness-tutorializer-059e44fa16b649938d79597bcf8f41bf4aa136ab.zip |
fix more asymmetrical gap bugs
Diffstat (limited to 'Source/Randomizer2Core.cpp')
-rw-r--r-- | Source/Randomizer2Core.cpp | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/Source/Randomizer2Core.cpp b/Source/Randomizer2Core.cpp index dcb9fd2..8ef2301 100644 --- a/Source/Randomizer2Core.cpp +++ b/Source/Randomizer2Core.cpp | |||
@@ -15,9 +15,16 @@ std::vector<Pos> Randomizer2Core::CutInsideEdges(const Puzzle& p, size_t numEdge | |||
15 | } | 15 | } |
16 | 16 | ||
17 | std::vector<Pos> Randomizer2Core::CutSymmetricalEdgePairs(const Puzzle& p, size_t numEdges) { | 17 | std::vector<Pos> Randomizer2Core::CutSymmetricalEdgePairs(const Puzzle& p, size_t numEdges) { |
18 | Puzzle copy = p; | ||
18 | assert(p.symmetry != Puzzle::Symmetry::NONE); | 19 | assert(p.symmetry != Puzzle::Symmetry::NONE); |
19 | if (p.symmetry == Puzzle::Symmetry::X) { | 20 | if (p.symmetry == Puzzle::Symmetry::X) { |
20 | return CutEdgesInternal(p, 0, (p.width-1)/2, 0, p.height, numEdges); | 21 | if (p.width%4 == 1) { // Puzzle is even, so we need to prevent cutting the centerline |
22 | for (int y=0; y<p.height; y++) { | ||
23 | copy.grid[p.width/2][y].gap = Cell::Gap::FULL; | ||
24 | } | ||
25 | } | ||
26 | |||
27 | return CutEdgesInternal(copy, 0, (p.width-1)/2, 0, p.height, numEdges); | ||
21 | } | 28 | } |
22 | assert(false); | 29 | assert(false); |
23 | return {}; | 30 | return {}; |
@@ -93,10 +100,11 @@ std::vector<Pos> Randomizer2Core::CutEdgesInternal(const Puzzle& p, int xMin, in | |||
93 | 100 | ||
94 | void Randomizer2Core::DebugColorGrid(const std::vector<std::vector<int>>& colorGrid) { | 101 | void Randomizer2Core::DebugColorGrid(const std::vector<std::vector<int>>& colorGrid) { |
95 | #ifndef NDEBUG | 102 | #ifndef NDEBUG |
103 | static std::string colors = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; | ||
96 | for (int y=0; y<colorGrid[0].size(); y++) { | 104 | for (int y=0; y<colorGrid[0].size(); y++) { |
97 | std::string row; | 105 | std::string row; |
98 | for (int x=0; x<colorGrid.size(); x++) { | 106 | for (int x=0; x<colorGrid.size(); x++) { |
99 | row += std::to_string(colorGrid[x][y]); | 107 | row += colors[colorGrid[x][y]]; |
100 | } | 108 | } |
101 | row += "\n"; | 109 | row += "\n"; |
102 | OutputDebugStringA(row.c_str()); | 110 | OutputDebugStringA(row.c_str()); |
@@ -128,13 +136,10 @@ void Randomizer2Core::FloodFillOutside(const Puzzle& p, std::vector<std::vector< | |||
128 | FloodFillOutside(p, colorGrid, x-1, y); | 136 | FloodFillOutside(p, colorGrid, x-1, y); |
129 | } | 137 | } |
130 | 138 | ||
131 | /* | 139 | // Color key: |
132 | undefined -> 1 (color of outside) or * (any colored cell) or -1 (edge/intersection not part of any region) | 140 | // 0 (default): Uncolored |
133 | 141 | // 1: Outside color and separator color | |
134 | 0 -> {} (this is a special edge case, which I don't need right now) | 142 | // 2+: Flood-filled region color |
135 | 1 -> 0 (uncolored / ready to color) | ||
136 | 2 -> | ||
137 | */ | ||
138 | std::tuple<std::vector<std::vector<int>>, int> Randomizer2Core::CreateColorGrid(const Puzzle& p) { | 143 | std::tuple<std::vector<std::vector<int>>, int> Randomizer2Core::CreateColorGrid(const Puzzle& p) { |
139 | std::vector<std::vector<int>> colorGrid; | 144 | std::vector<std::vector<int>> colorGrid; |
140 | colorGrid.resize(p.width); | 145 | colorGrid.resize(p.width); |