From 9e2c8f0c5c8ee66398b59ff2dcca49a0ea2d5509 Mon Sep 17 00:00:00 2001 From: Joshua Moerman Date: Tue, 18 Feb 2014 16:13:44 +0100 Subject: [PATCH] Adds a replayed for the solutions --- src/Replayer.cpp | 54 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/Replayer.cpp diff --git a/src/Replayer.cpp b/src/Replayer.cpp new file mode 100644 index 0000000..671072c --- /dev/null +++ b/src/Replayer.cpp @@ -0,0 +1,54 @@ +#include "dynamic_grid.hpp" +#include "analyzed_grid.hpp" +#include "clusters.hpp" + +#include + +#include + +int main(int argc, char** argv){ + namespace po = boost::program_options; + + // Describe program options + po::options_description opts; + opts.add_options() + ("file", "level file to replay") + ("help", po::bool_switch(), "show this help"); + + po::positional_options_description file_opts; + file_opts.add("file", 1); + + // Parse and store them in a vm + po::variables_map vm; + po::store(po::command_line_parser(argc, argv).options(opts).positional(file_opts).run(), vm); + po::notify(vm); + + if(vm["help"].as()){ + std::cout << "Puzzle Wuzzle Replayer, version " << __DATE__ << std::endl; + std::cout << opts << std::endl; + return 0; + } + + std::cout << "= The puzzle =\n"; + auto level = grid_from_file(vm["file"].as()); + level.grid.print(std::cout); + if(level.analysis.solution_traces.empty()){ + std::cout << "has no solutions\n"; + } else { + std::cout << "has " << level.analysis.solution_traces.size() << " solutions\n\n"; + } + + int count = 0; + for(auto && solution : level.analysis.solution_traces){ + std::cout << "= Solution " << count++ << " =\n"; + + auto grid = level.grid; + grid.print(std::cout); + + for(auto && tap : solution){ + std::cout << "Tapping on " << tap.first << ", " << tap.second << " => \n"; + grid = make_empty(grid, cluster_at(grid, level.rules, tap)); + grid.print(std::cout); + } + } +}