#ifndef PUZZLE_HPP_SENTRY #define PUZZLE_HPP_SENTRY #include #include #include #include #include #include enum { puzzle_pieces = 8, puzzles_per_side = 3, puzzle_size = 100, spacing = 5 }; class Puzzle : public Fl_Button{ public: unsigned char sequence_number; std::string path; Puzzle(int x, int y) : Fl_Button(x, y, puzzle_size, puzzle_size) {} }; class GameParams { public: struct coordinates { int x, y; }; private: coordinates standard_puzzle_coordinates[puzzle_pieces]; char free_puzzles[puzzle_pieces]; coordinates empty_box; std::vector> puzzles; Fl_Window *win; GameParams(Fl_Window *a_win = nullptr) : win(a_win) {} void CalculateStandardPuzzlePos(); void ResetFreePuzzles(); void NextUntestedPuzzles(); bool IsSolvability(); void CreateNewPuzzles(); friend class PuzzleGame; friend void press_button_callback(Fl_Widget*, void*); public: void SetXYEmptyBox(int x, int y) { empty_box.x = x; empty_box. y = y; } coordinates GetXYEmptyBox() { return empty_box; } static GameParams *SetUpParams(Fl_Window *win) { GameParams *gi = new GameParams(win); gi->CalculateStandardPuzzlePos(); gi->SetXYEmptyBox(215, 245); return gi; } }; #endif