#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(); }