diff options
| -rw-r--r-- | Source/Randomizer2.cpp | 25 | ||||
| -rw-r--r-- | Source/Randomizer2Core.cpp | 5 |
2 files changed, 27 insertions, 3 deletions
| diff --git a/Source/Randomizer2.cpp b/Source/Randomizer2.cpp index 993e7cc..107950d 100644 --- a/Source/Randomizer2.cpp +++ b/Source/Randomizer2.cpp | |||
| @@ -175,20 +175,39 @@ void Randomizer2::RandomizeSymmetry() { | |||
| 175 | p.grid[2][0].end = Cell::Dir::UP; | 175 | p.grid[2][0].end = Cell::Dir::UP; |
| 176 | p.grid[6][0].end = Cell::Dir::UP; | 176 | p.grid[6][0].end = Cell::Dir::UP; |
| 177 | std::vector<Pos> cutEdges = Randomizer2Core::CutSymmetricalEdgePairs(p, 4); | 177 | std::vector<Pos> cutEdges = Randomizer2Core::CutSymmetricalEdgePairs(p, 4); |
| 178 | bool alternate = false; | ||
| 179 | for (int i=0; i<cutEdges.size(); i++) { | 178 | for (int i=0; i<cutEdges.size(); i++) { |
| 180 | Pos pos = cutEdges[i]; | 179 | Pos pos = cutEdges[i]; |
| 181 | if (alternate) { | 180 | if (i%2 == 0) { |
| 182 | p.grid[pos.x][pos.y].gap = Cell::Gap::BREAK; | 181 | p.grid[pos.x][pos.y].gap = Cell::Gap::BREAK; |
| 183 | } else { | 182 | } else { |
| 184 | Pos sym = p.GetSymmetricalPos(pos.x, pos.y); | 183 | Pos sym = p.GetSymmetricalPos(pos.x, pos.y); |
| 185 | p.grid[sym.x][sym.y].gap = Cell::Gap::BREAK; | 184 | p.grid[sym.x][sym.y].gap = Cell::Gap::BREAK; |
| 186 | } | 185 | } |
| 187 | alternate = !alternate; | ||
| 188 | } | 186 | } |
| 189 | 187 | ||
| 190 | _serializer.WritePuzzle(p, 0x87); | 188 | _serializer.WritePuzzle(p, 0x87); |
| 191 | } | 189 | } |
| 190 | { // Back wall 3 | ||
| 191 | Puzzle p; | ||
| 192 | p.NewGrid(5, 6); | ||
| 193 | p.symmetry = Puzzle::Symmetry::X; | ||
| 194 | p.grid[2][10].start = true; | ||
| 195 | p.grid[8][10].start = true; | ||
| 196 | p.grid[4][0].end = Cell::Dir::UP; | ||
| 197 | p.grid[6][0].end = Cell::Dir::UP; | ||
| 198 | std::vector<Pos> cutEdges = Randomizer2Core::CutSymmetricalEdgePairs(p, 10); | ||
| 199 | for (int i=0; i<cutEdges.size(); i++) { | ||
| 200 | Pos pos = cutEdges[i]; | ||
| 201 | if (i%2 == 0) { | ||
| 202 | p.grid[pos.x][pos.y].gap = Cell::Gap::BREAK; | ||
| 203 | } else { | ||
| 204 | Pos sym = p.GetSymmetricalPos(pos.x, pos.y); | ||
| 205 | p.grid[sym.x][sym.y].gap = Cell::Gap::BREAK; | ||
| 206 | } | ||
| 207 | } | ||
| 208 | |||
| 209 | _serializer.WritePuzzle(p, 0x59); | ||
| 210 | } | ||
| 192 | } | 211 | } |
| 193 | 212 | ||
| 194 | void Randomizer2::RandomizeKeep() { | 213 | void Randomizer2::RandomizeKeep() { |
| diff --git a/Source/Randomizer2Core.cpp b/Source/Randomizer2Core.cpp index 5cae049..ceb726b 100644 --- a/Source/Randomizer2Core.cpp +++ b/Source/Randomizer2Core.cpp | |||
| @@ -24,6 +24,11 @@ std::vector<Pos> Randomizer2Core::CutSymmetricalEdgePairs(const Puzzle& p, size_ | |||
| 24 | for (int y=0; y<p.height; y++) { | 24 | for (int y=0; y<p.height; y++) { |
| 25 | copy.grid[p.width/2][y].gap = Cell::Gap::FULL; | 25 | copy.grid[p.width/2][y].gap = Cell::Gap::FULL; |
| 26 | } | 26 | } |
| 27 | } else { | ||
| 28 | // The puzzle has an odd width (e.g. 3x3), but we still need to cut the midline. | ||
| 29 | for (int y=0; y<p.height; y++) { | ||
| 30 | copy.grid[p.width/2][y].gap = Cell::Gap::FULL; | ||
| 31 | } | ||
| 27 | } | 32 | } |
| 28 | 33 | ||
| 29 | return CutEdgesInternal(copy, 0, (p.width-1)/2, 0, p.height, numEdges); | 34 | return CutEdgesInternal(copy, 0, (p.width-1)/2, 0, p.height, numEdges); |
