diff options
Diffstat (limited to 'ext')
-rw-r--r-- | ext/wittle_generator/wittle_generator.cpp | 132 |
1 files changed, 129 insertions, 3 deletions
diff --git a/ext/wittle_generator/wittle_generator.cpp b/ext/wittle_generator/wittle_generator.cpp index e1b5323..f3d2947 100644 --- a/ext/wittle_generator/wittle_generator.cpp +++ b/ext/wittle_generator/wittle_generator.cpp | |||
@@ -392,7 +392,6 @@ Rice::Object wittle_generator_generate_easy(Rice::Object /* self */) { | |||
392 | {{{Decoration::Star | Decoration::Color::Magenta, 6}, | 392 | {{{Decoration::Star | Decoration::Color::Magenta, 6}, |
393 | {Decoration::Stone | Decoration::Color::Orange, 4}, | 393 | {Decoration::Stone | Decoration::Color::Orange, 4}, |
394 | {Decoration::Stone | Decoration::Color::Green, 4}}}); | 394 | {Decoration::Stone | Decoration::Color::Green, 4}}}); |
395 | generator.place_gaps(8); | ||
396 | break; | 395 | break; |
397 | } | 396 | } |
398 | } | 397 | } |
@@ -404,7 +403,7 @@ Rice::Object wittle_generator_generate_easy(Rice::Object /* self */) { | |||
404 | Rice::Object wittle_generator_generate_medium(Rice::Object /* self */) { | 403 | Rice::Object wittle_generator_generate_medium(Rice::Object /* self */) { |
405 | Generate generator; | 404 | Generate generator; |
406 | 405 | ||
407 | int choice = Random::rand() % 30; | 406 | int choice = Random::rand() % 33; |
408 | std::cout << "Generate MEDIUM: choice " << std::dec << choice << std::endl; | 407 | std::cout << "Generate MEDIUM: choice " << std::dec << choice << std::endl; |
409 | 408 | ||
410 | switch (choice) { | 409 | switch (choice) { |
@@ -679,6 +678,132 @@ Rice::Object wittle_generator_generate_medium(Rice::Object /* self */) { | |||
679 | 4, 4, {{{Decoration::Triangle | Decoration::Color::Orange, 8}}}); | 678 | 4, 4, {{{Decoration::Triangle | Decoration::Color::Orange, 8}}}); |
680 | break; | 679 | break; |
681 | } | 680 | } |
681 | case 30: { | ||
682 | generator.setFlag(Generate::RegularStartEnd); | ||
683 | generator.setFlag(Generate::LongestPath); | ||
684 | generator.setFlag(Generate::FullGaps); | ||
685 | generator.generate( | ||
686 | 6, 6, {{{Decoration::Dot_Intersection, 12}, {Decoration::Gap, 18}}}); | ||
687 | break; | ||
688 | } | ||
689 | case 31: { | ||
690 | generator.generate(5, 5, | ||
691 | {{{Decoration::Start, 8}, | ||
692 | {Decoration::Exit, 1}, | ||
693 | {Decoration::Dot_Intersection, 36}}}); | ||
694 | break; | ||
695 | } | ||
696 | case 32: { | ||
697 | generator.setFlag(Generate::RegularStartEnd); | ||
698 | generator.setSymmetry(Panel::Horizontal); | ||
699 | generator.generate( | ||
700 | 6, 6, | ||
701 | {{{Decoration::Triangle | Decoration::Color::Orange, 12}, | ||
702 | {Decoration::Start, 1}, | ||
703 | {Decoration::Exit, 1}}}); | ||
704 | break; | ||
705 | } | ||
706 | } | ||
707 | |||
708 | Rice::String str(generator.AsCode()); | ||
709 | return str; | ||
710 | } | ||
711 | |||
712 | Rice::Object wittle_generator_generate_expert(Rice::Object /* self */) { | ||
713 | Generate generator; | ||
714 | |||
715 | int choice = Random::rand() % 8; | ||
716 | std::cout << "Generate EXPERT: choice " << std::dec << choice << std::endl; | ||
717 | |||
718 | switch (choice) { | ||
719 | case 0: { | ||
720 | generator.setFlag(Generate::StartEdgeOnly); | ||
721 | generator.setSymmetry(Panel::Rotational); | ||
722 | generator.generate( | ||
723 | 6, 6, | ||
724 | {{{Decoration::Triangle | Decoration::Color::Orange, 12}, | ||
725 | {Decoration::Start, 1}, | ||
726 | {Decoration::Exit, 1}}}); | ||
727 | break; | ||
728 | } | ||
729 | case 1: { | ||
730 | generator.setFlag(Generate::StartEdgeOnly); | ||
731 | generator.setFlag(Generate::WriteInvisible); | ||
732 | generator.setSymmetry(Panel::Rotational); | ||
733 | generator.generate(7, 7, | ||
734 | {{{Decoration::Dot | Decoration::Color::Blue, 4}, | ||
735 | {Decoration::Dot | Decoration::Color::Yellow, 4}, | ||
736 | {Decoration::Dot, 7}, | ||
737 | {Decoration::Start, 1}, | ||
738 | {Decoration::Exit, 1}}}); | ||
739 | break; | ||
740 | } | ||
741 | case 2: { | ||
742 | generator.setFlag(Generate::StartEdgeOnly); | ||
743 | generator.setFlag(Generate::WriteInvisible); | ||
744 | generator.setSymmetry(Panel::Rotational); | ||
745 | generator.generate(7, 7, | ||
746 | {{{Decoration::Stone | Decoration::Color::Black, 6}, | ||
747 | {Decoration::Stone | Decoration::Color::White, 6}, | ||
748 | {Decoration::Start, 1}, | ||
749 | {Decoration::Exit, 1}}}); | ||
750 | break; | ||
751 | } | ||
752 | case 3: { | ||
753 | generator.setFlag(Generate::StartEdgeOnly); | ||
754 | generator.setFlag(Generate::WriteInvisible); | ||
755 | generator.setSymmetry(Panel::Rotational); | ||
756 | generator.generate(7, 7, | ||
757 | {{{Decoration::Star | Decoration::Color::Orange, 6}, | ||
758 | {Decoration::Star | Decoration::Color::Green, 6}, | ||
759 | {Decoration::Start, 1}, | ||
760 | {Decoration::Exit, 1}}}); | ||
761 | break; | ||
762 | } | ||
763 | case 4: { | ||
764 | generator.setFlag(Generate::StartEdgeOnly); | ||
765 | generator.setFlag(Generate::WriteInvisible); | ||
766 | generator.setFlag(Generate::RequireCombineShapes); | ||
767 | generator.setSymmetry(Panel::Rotational); | ||
768 | generator.generate(5, 5, | ||
769 | {{{Decoration::Poly | Decoration::Color::Yellow, 3}, | ||
770 | {Decoration::Start, 1}, | ||
771 | {Decoration::Exit, 1}}}); | ||
772 | break; | ||
773 | } | ||
774 | case 5: { | ||
775 | generator.setFlag(Generate::StartEdgeOnly); | ||
776 | generator.setFlag(Generate::WriteInvisible); | ||
777 | generator.setSymmetry(Panel::Rotational); | ||
778 | generator.generate(7, 7, | ||
779 | {{{Decoration::Dot | Decoration::Color::Blue, 2}, | ||
780 | {Decoration::Dot | Decoration::Color::Yellow, 2}, | ||
781 | {Decoration::Dot, 8}, | ||
782 | {Decoration::Eraser | Decoration::Color::Purple, 1}, | ||
783 | {Decoration::Start, 1}}}); | ||
784 | break; | ||
785 | } | ||
786 | case 6: { | ||
787 | generator.setFlag(Generate::RegularStartEnd); | ||
788 | generator.generate( | ||
789 | 4, 4, | ||
790 | {{{Decoration::Triangle | Decoration::Color::Orange, 15}, | ||
791 | {Decoration::Eraser | Decoration::Color::Purple, 1}}}); | ||
792 | break; | ||
793 | } | ||
794 | case 7: { | ||
795 | generator.setFlag(Generate::RegularStartEnd); | ||
796 | generator.generate( | ||
797 | 4, 4, | ||
798 | {{{Decoration::Stone | Decoration::Color::White, 1}, | ||
799 | {Decoration::Stone | Decoration::Color::Black, 2}, | ||
800 | {Decoration::Stone | Decoration::Color::Red, 2}, | ||
801 | {Decoration::Star | Decoration::Color::White, 4}, | ||
802 | {Decoration::Star | Decoration::Color::Black, 3}, | ||
803 | {Decoration::Star | Decoration::Color::Red, 3}, | ||
804 | {Decoration::Decoration::Eraser | Decoration::Color::Green, 1}}}); | ||
805 | break; | ||
806 | } | ||
682 | } | 807 | } |
683 | 808 | ||
684 | Rice::String str(generator.AsCode()); | 809 | Rice::String str(generator.AsCode()); |
@@ -689,5 +814,6 @@ extern "C" void Init_wittle_generator() { | |||
689 | Rice::Class rb_cWittleGenerator = | 814 | Rice::Class rb_cWittleGenerator = |
690 | Rice::define_class("WittleGenerator") | 815 | Rice::define_class("WittleGenerator") |
691 | .define_method("generate_easy", &wittle_generator_generate_easy) | 816 | .define_method("generate_easy", &wittle_generator_generate_easy) |
692 | .define_method("generate_medium", &wittle_generator_generate_medium); | 817 | .define_method("generate_medium", &wittle_generator_generate_medium) |
818 | .define_method("generate_expert", &wittle_generator_generate_expert); | ||
693 | } | 819 | } |