back to scratko.xyz
summaryrefslogtreecommitdiff
path: root/puzzle.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'puzzle.cpp')
-rw-r--r--puzzle.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/puzzle.cpp b/puzzle.cpp
new file mode 100644
index 0000000..6d7d635
--- /dev/null
+++ b/puzzle.cpp
@@ -0,0 +1,68 @@
+#include "puzzle.hpp"
+
+#include <stdlib.h>
+#include <string>
+#include <FL/Fl_JPEG_Image.H>
+
+void GameParams::CalculatePuzzlePos()
+{
+ coordinates tmp;
+
+ int i, j, k = 0;
+ for(i = 0; i < puzzles_per_side; ++i)
+ for(j = 0; j < puzzles_per_side; ++j, ++k) {
+ if(i == puzzles_per_side-1 && j == puzzles_per_side-1)
+ break;
+ tmp.x = i * (puzzle_size + spacing) + spacing;
+ tmp.y = j * (puzzle_size + spacing) + spacing;
+ puzzle_coordinates[k] = tmp;
+ }
+}
+
+void GameParams::ResetFreePuzzles()
+{
+ for(int i = 0; i < puzzle_pieces; ++i)
+ free_puzzles[i] = 1;
+}
+
+static void find_path_to_picture(std::string& path, int number)
+{
+ path =
+ "resources/tucan/" + std::to_string(number / puzzles_per_side) +
+ std::to_string(number % puzzles_per_side) + ".jpg";
+}
+
+void GameParams::CreateNewPuzzles()
+{
+ int idx_random_puzzle;
+ /*
+ * check if puzzles already were created
+ */
+ for(int i = 0; i < puzzle_pieces; ++i)
+ if(puzzles[i])
+ delete puzzles[i];
+ /*
+ * ======== creating puzzles ===========
+ */
+ for(int i = 0; i < puzzle_pieces; ++i) {
+ puzzles[i] =
+ new Puzzle(puzzle_coordinates[i].x, puzzle_coordinates[i].y);
+ idx_random_puzzle =
+ 0 + (int)((double)puzzle_pieces * rand()/(RAND_MAX + 1.0));
+ while(!free_puzzles[idx_random_puzzle])
+ idx_random_puzzle =
+ 0 + (int)((double)puzzle_pieces * rand()/(RAND_MAX + 1.0));
+ free_puzzles[idx_random_puzzle] = 0;
+ puzzles[i]->sequence_number = idx_random_puzzle;
+ find_path_to_picture(puzzles[i]->path, puzzles[i]->sequence_number);
+ Fl_JPEG_Image *img = new Fl_JPEG_Image(puzzles[i]->path.c_str());
+ // TODO check fails img->fail();
+ puzzles[i]->image(img);
+ }
+}
+
+void GameParams::NewGame()
+{
+ ResetFreePuzzles();
+ CreateNewPuzzles();
+}