diff options
Diffstat (limited to 'ext/wittle_generator')
-rw-r--r-- | ext/wittle_generator/Panel.cpp | 8 | ||||
-rw-r--r-- | ext/wittle_generator/Panel.h | 32 | ||||
-rw-r--r-- | ext/wittle_generator/wittle_generator.cpp | 116 |
3 files changed, 132 insertions, 24 deletions
diff --git a/ext/wittle_generator/Panel.cpp b/ext/wittle_generator/Panel.cpp index 879d205..3279943 100644 --- a/ext/wittle_generator/Panel.cpp +++ b/ext/wittle_generator/Panel.cpp | |||
@@ -127,12 +127,6 @@ std::string Panel::Write() { | |||
127 | int genericFlags = 0; | 127 | int genericFlags = 0; |
128 | if (symmetry != Symmetry::None) { | 128 | if (symmetry != Symmetry::None) { |
129 | genericFlags |= Serializer::Symmetrical; | 129 | genericFlags |= Serializer::Symmetrical; |
130 | if (symmetry == Symmetry::Vertical || symmetry == Symmetry::Rotational) { | ||
131 | genericFlags |= Serializer::SymmetryX; | ||
132 | } | ||
133 | if (symmetry == Symmetry::Horizontal || symmetry == Symmetry::Rotational) { | ||
134 | genericFlags |= Serializer::SymmetryY; | ||
135 | } | ||
136 | } | 130 | } |
137 | serializer.writeByte(genericFlags); | 131 | serializer.writeByte(genericFlags); |
138 | 132 | ||
@@ -233,5 +227,7 @@ std::string Panel::Write() { | |||
233 | } | 227 | } |
234 | serializer.writeByte(settings); | 228 | serializer.writeByte(settings); |
235 | 229 | ||
230 | serializer.writeByte(symmetry); | ||
231 | |||
236 | return serializer.str(); | 232 | return serializer.str(); |
237 | } | 233 | } |
diff --git a/ext/wittle_generator/Panel.h b/ext/wittle_generator/Panel.h index d152370..3bc23c9 100644 --- a/ext/wittle_generator/Panel.h +++ b/ext/wittle_generator/Panel.h | |||
@@ -188,22 +188,22 @@ class Panel { | |||
188 | 188 | ||
189 | enum Symmetry { // NOTE - Not all of these are valid symmetries for certain | 189 | enum Symmetry { // NOTE - Not all of these are valid symmetries for certain |
190 | // puzzles | 190 | // puzzles |
191 | None, | 191 | None = 0, |
192 | Horizontal, | 192 | Horizontal = 1, |
193 | Vertical, | 193 | Vertical = 2, |
194 | Rotational, | 194 | Rotational = 3, |
195 | RotateLeft, | 195 | RotateLeft = 4, |
196 | RotateRight, | 196 | RotateRight = 5, |
197 | FlipXY, | 197 | FlipXY = 6, |
198 | FlipNegXY, | 198 | FlipNegXY = 7, |
199 | ParallelH, | 199 | ParallelH = 8, |
200 | ParallelV, | 200 | ParallelV = 9, |
201 | ParallelHFlip, | 201 | ParallelHFlip = 10, |
202 | ParallelVFlip, | 202 | ParallelVFlip = 11, |
203 | PillarParallel, | 203 | PillarParallel = 12, |
204 | PillarHorizontal, | 204 | PillarHorizontal = 13, |
205 | PillarVertical, | 205 | PillarVertical = 14, |
206 | PillarRotational | 206 | PillarRotational = 15, |
207 | }; | 207 | }; |
208 | Symmetry symmetry; | 208 | Symmetry symmetry; |
209 | 209 | ||
diff --git a/ext/wittle_generator/wittle_generator.cpp b/ext/wittle_generator/wittle_generator.cpp index c2407cf..0efac07 100644 --- a/ext/wittle_generator/wittle_generator.cpp +++ b/ext/wittle_generator/wittle_generator.cpp | |||
@@ -420,7 +420,7 @@ Rice::Object wittle_generator_generate_easy(Rice::Object /* self */) { | |||
420 | Rice::Object wittle_generator_generate_medium(Rice::Object /* self */) { | 420 | Rice::Object wittle_generator_generate_medium(Rice::Object /* self */) { |
421 | Generate generator; | 421 | Generate generator; |
422 | 422 | ||
423 | int choice = Random::rand() % 66; | 423 | int choice = Random::rand() % 69; |
424 | std::cout << "Generate MEDIUM: choice " << std::dec << choice << std::endl; | 424 | std::cout << "Generate MEDIUM: choice " << std::dec << choice << std::endl; |
425 | 425 | ||
426 | switch (choice) { | 426 | switch (choice) { |
@@ -1015,6 +1015,33 @@ Rice::Object wittle_generator_generate_medium(Rice::Object /* self */) { | |||
1015 | {Decoration::Dot_Intersection, 25}}}); | 1015 | {Decoration::Dot_Intersection, 25}}}); |
1016 | break; | 1016 | break; |
1017 | } | 1017 | } |
1018 | case 66: { | ||
1019 | generator.setSymmetry(Panel::Symmetry::FlipNegXY); | ||
1020 | generator.generate(7, 7, | ||
1021 | {{{Decoration::Gap, 10}, | ||
1022 | {Decoration::Dot_Intersection, 8}, | ||
1023 | {Decoration::Start, 2}, | ||
1024 | {Decoration::Exit, 1}}}); | ||
1025 | break; | ||
1026 | } | ||
1027 | case 67: { | ||
1028 | generator.setSymmetry(Panel::Symmetry::ParallelV); | ||
1029 | generator.generate(7, 7, | ||
1030 | {{{Decoration::Gap, 12}, | ||
1031 | {Decoration::Dot_Intersection, 10}, | ||
1032 | {Decoration::Start, 2}, | ||
1033 | {Decoration::Exit, 1}}}); | ||
1034 | break; | ||
1035 | } | ||
1036 | case 68: { | ||
1037 | generator.setSymmetry(Panel::Symmetry::ParallelHFlip); | ||
1038 | generator.generate(7, 7, | ||
1039 | {{{Decoration::Gap, 12}, | ||
1040 | {Decoration::Dot_Intersection, 10}, | ||
1041 | {Decoration::Start, 2}, | ||
1042 | {Decoration::Exit, 1}}}); | ||
1043 | break; | ||
1044 | } | ||
1018 | } | 1045 | } |
1019 | 1046 | ||
1020 | Rice::String str(generator.AsCode()); | 1047 | Rice::String str(generator.AsCode()); |
@@ -1024,7 +1051,7 @@ Rice::Object wittle_generator_generate_medium(Rice::Object /* self */) { | |||
1024 | Rice::Object wittle_generator_generate_expert(Rice::Object /* self */) { | 1051 | Rice::Object wittle_generator_generate_expert(Rice::Object /* self */) { |
1025 | Generate generator; | 1052 | Generate generator; |
1026 | 1053 | ||
1027 | int choice = Random::rand() % 40; | 1054 | int choice = Random::rand() % 46; |
1028 | std::cout << "Generate EXPERT: choice " << std::dec << choice << std::endl; | 1055 | std::cout << "Generate EXPERT: choice " << std::dec << choice << std::endl; |
1029 | 1056 | ||
1030 | switch (choice) { | 1057 | switch (choice) { |
@@ -1497,6 +1524,91 @@ Rice::Object wittle_generator_generate_expert(Rice::Object /* self */) { | |||
1497 | {Decoration::Dot_Intersection, 36}}}); | 1524 | {Decoration::Dot_Intersection, 36}}}); |
1498 | break; | 1525 | break; |
1499 | } | 1526 | } |
1527 | case 40: { | ||
1528 | generator.setGridSize(7, 7); | ||
1529 | generator.setFlag(Generate::RequireCombineShapes); | ||
1530 | generator.setSymmetry(Panel::ParallelV); | ||
1531 | generator.setSymbol(Decoration::Start, 0, 14); | ||
1532 | generator.setSymbol(Decoration::Start, 8, 14); | ||
1533 | generator.setSymbol(Decoration::Exit, 6, 0); | ||
1534 | generator.setSymbol(Decoration::Exit, 14, 0); | ||
1535 | generator.generate(7, 7, | ||
1536 | {{{Decoration::Poly | Decoration::Color::Orange, 5}}}); | ||
1537 | break; | ||
1538 | } | ||
1539 | case 41: { | ||
1540 | generator.setGridSize(7, 7); | ||
1541 | generator.setFlag(Generate::RequireCombineShapes); | ||
1542 | generator.setSymmetry(Panel::ParallelHFlip); | ||
1543 | generator.setSymbol(Decoration::Start, 0, 14); | ||
1544 | generator.setSymbol(Decoration::Start, 14, 6); | ||
1545 | generator.setSymbol(Decoration::Exit, 0, 0); | ||
1546 | generator.setSymbol(Decoration::Exit, 14, 8); | ||
1547 | generator.generate(7, 7, | ||
1548 | {{{Decoration::Poly | Decoration::Color::Orange, 5}}}); | ||
1549 | break; | ||
1550 | } | ||
1551 | case 42: { | ||
1552 | generator.setGridSize(7, 7); | ||
1553 | generator.setFlag(Generate::RequireCombineShapes); | ||
1554 | generator.setSymmetry(Panel::ParallelVFlip); | ||
1555 | generator.setSymbol(Decoration::Start, 0, 14); | ||
1556 | generator.setSymbol(Decoration::Start, 8, 0); | ||
1557 | generator.setSymbol(Decoration::Exit, 6, 0); | ||
1558 | generator.setSymbol(Decoration::Exit, 14, 14); | ||
1559 | generator.generate(7, 7, | ||
1560 | {{{Decoration::Poly | Decoration::Color::Orange, 5}}}); | ||
1561 | break; | ||
1562 | } | ||
1563 | case 43: { | ||
1564 | generator.setSymmetry(Panel::Symmetry::RotateLeft); | ||
1565 | generator.setSymbol(Decoration::Start, 4, 4); | ||
1566 | generator.setSymbol(Decoration::Start, 10, 4); | ||
1567 | generator.setSymbol(Decoration::Start, 4, 10); | ||
1568 | generator.setSymbol(Decoration::Start, 10, 10); | ||
1569 | generator.setSymbol(Decoration::Exit, 4, 0); | ||
1570 | generator.setSymbol(Decoration::Exit, 14, 4); | ||
1571 | generator.setSymbol(Decoration::Exit, 0, 10); | ||
1572 | generator.setSymbol(Decoration::Exit, 10, 14); | ||
1573 | generator.generate( | ||
1574 | 7, 7, | ||
1575 | {{{Decoration::Triangle4 | Decoration::Color::Orange, 1}, | ||
1576 | {Decoration::Triangle | Decoration::Color::Orange, 4}}}); | ||
1577 | break; | ||
1578 | } | ||
1579 | case 44: { | ||
1580 | generator.setFlag(Generate::WriteInvisible); | ||
1581 | generator.setFlag(Generate::StartEdgeOnly); | ||
1582 | generator.setSymmetry(Panel::Symmetry::FlipXY); | ||
1583 | generator.setSymbol(Decoration::Exit, 0, 8); | ||
1584 | generator.setSymbol(Decoration::Exit, 8, 0); | ||
1585 | generator.generate(7, 7, | ||
1586 | {{{Decoration::Dot | Decoration::Color::Blue, 2}, | ||
1587 | {Decoration::Dot | Decoration::Color::Yellow, 2}, | ||
1588 | {Decoration::Dot, 8}, | ||
1589 | {Decoration::Eraser | Decoration::Color::White, 1}, | ||
1590 | {Decoration::Start, 1}}}); | ||
1591 | break; | ||
1592 | } | ||
1593 | case 45: { | ||
1594 | generator.setFlag(Generate::WriteInvisible); | ||
1595 | generator.setSymmetry(Panel::Symmetry::FlipXY); | ||
1596 | generator.setSymbol(Decoration::Start, 0, 16); | ||
1597 | generator.setSymbol(Decoration::Start, 16, 0); | ||
1598 | generator.setSymbol(Decoration::Exit, 8, 0); | ||
1599 | generator.setSymbol(Decoration::Exit, 8, 16); | ||
1600 | generator.setSymbol(Decoration::Exit, 0, 8); | ||
1601 | generator.setSymbol(Decoration::Exit, 16, 8); | ||
1602 | generator.generate( | ||
1603 | 8, 8, | ||
1604 | {{{Decoration::Triangle | Decoration::Color::Cyan, 3}, | ||
1605 | {Decoration::Triangle | Decoration::Color::Yellow, 2}, | ||
1606 | {Decoration::Star | Decoration::Color::Cyan, 3}, | ||
1607 | {Decoration::Star | Decoration::Color::Yellow, 3}, | ||
1608 | {Decoration::Stone | Decoration::Color::Cyan, 2}, | ||
1609 | {Decoration::Stone | Decoration::Color::Yellow, 3}}}); | ||
1610 | break; | ||
1611 | } | ||
1500 | } | 1612 | } |
1501 | 1613 | ||
1502 | Rice::String str(generator.AsCode()); | 1614 | Rice::String str(generator.AsCode()); |