From 365c27f05d5739213d3a98aa41dcc7f1cb0a6c60 Mon Sep 17 00:00:00 2001 From: scratko Date: Fri, 25 Oct 2024 00:40:58 +0300 Subject: Initial commit Creating widgets with a split image --- puzzle.cpp | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 puzzle.cpp (limited to 'puzzle.cpp') 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 +#include +#include + +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(); +} -- cgit v1.2.3