From 09aa8de52cb962f1ceebfb1fd44f2c54a924fc5c Mon Sep 17 00:00:00 2001 From: Franklin Wei Date: Mon, 22 Jul 2024 21:43:25 -0400 Subject: puzzles: resync with upstream This brings the puzzles source in sync with Simon's branch, commit fd304c5 (from March 2024), with some added Rockbox-specific compatibility changes: https://www.franklinwei.com/git/puzzles/commit/?h=rockbox-devel&id=516830d9d76bdfe64fe5ccf2a9b59c33f5c7c078 There are quite a lot of backend changes, including a new "Mosaic" puzzle. In addition, some new frontend changes were necessary: - New "Preferences" menu to access the user preferences system. - Enabled spacebar input for several games. Change-Id: I94c7df674089c92f32d5f07025f6a1059068af1e --- apps/plugins/puzzles/src/CMakeLists.txt | 287 ++++++++++++++++++++++++++++++++ 1 file changed, 287 insertions(+) create mode 100644 apps/plugins/puzzles/src/CMakeLists.txt (limited to 'apps/plugins/puzzles/src/CMakeLists.txt') diff --git a/apps/plugins/puzzles/src/CMakeLists.txt b/apps/plugins/puzzles/src/CMakeLists.txt new file mode 100644 index 0000000000..4153efc246 --- /dev/null +++ b/apps/plugins/puzzles/src/CMakeLists.txt @@ -0,0 +1,287 @@ +cmake_minimum_required(VERSION 3.5) + +project(puzzles + LANGUAGES C) + +include(cmake/setup.cmake) + +add_library(core_obj OBJECT + combi.c divvy.c drawing.c dsf.c findloop.c grid.c latin.c + laydomino.c loopgen.c malloc.c matching.c midend.c misc.c penrose.c + penrose-legacy.c ps.c random.c sort.c tdq.c tree234.c version.c + ${platform_common_sources}) +add_library(core $) +add_library(common $ hat.c spectre.c) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}) + +puzzle(blackbox + DISPLAYNAME "Black Box" + DESCRIPTION "Ball-finding puzzle" + OBJECTIVE "Find the hidden balls in the box by bouncing laser beams \ +off them.") + +puzzle(bridges + DISPLAYNAME "Bridges" + DESCRIPTION "Bridge-placing puzzle" + OBJECTIVE "Connect all the islands with a network of bridges.") + +puzzle(cube + DISPLAYNAME "Cube" + DESCRIPTION "Rolling cube puzzle" + OBJECTIVE "Pick up all the blue squares by rolling the cube over them.") + +puzzle(dominosa + DISPLAYNAME "Dominosa" + DESCRIPTION "Domino tiling puzzle" + OBJECTIVE "Tile the rectangle with a full set of dominoes.") +solver(dominosa) + +puzzle(fifteen + DISPLAYNAME "Fifteen" + DESCRIPTION "Sliding block puzzle" + OBJECTIVE "Slide the tiles around to arrange them into order.") +solver(fifteen) + +puzzle(filling + DISPLAYNAME "Filling" + DESCRIPTION "Polyomino puzzle" + OBJECTIVE "Mark every square with the area of its containing region.") +solver(filling) + +puzzle(flip + DISPLAYNAME "Flip" + DESCRIPTION "Tile inversion puzzle" + OBJECTIVE "Flip groups of squares to light them all up at once.") + +puzzle(flood + DISPLAYNAME "Flood" + DESCRIPTION "Flood-filling puzzle" + OBJECTIVE "Turn the grid the same colour in as few flood fills as possible.") + +puzzle(galaxies + DISPLAYNAME "Galaxies" + DESCRIPTION "Symmetric polyomino puzzle" + OBJECTIVE "Divide the grid into rotationally symmetric regions each \ +centred on a dot.") +solver(galaxies) +cliprogram(galaxiespicture galaxies.c + COMPILE_DEFINITIONS STANDALONE_PICTURE_GENERATOR) +guiprogram(galaxieseditor galaxies.c + COMPILE_DEFINITIONS EDITOR) + +puzzle(guess + DISPLAYNAME "Guess" + DESCRIPTION "Combination-guessing puzzle" + OBJECTIVE "Guess the hidden combination of colours.") + +puzzle(inertia + DISPLAYNAME "Inertia" + DESCRIPTION "Gem-collecting puzzle" + OBJECTIVE "Collect all the gems without running into any of the mines.") + +puzzle(keen + DISPLAYNAME "Keen" + DESCRIPTION "Arithmetic Latin square puzzle" + OBJECTIVE "Complete the latin square in accordance with the \ +arithmetic clues.") +solver(keen latin.c) + +puzzle(lightup + DISPLAYNAME "Light Up" + DESCRIPTION "Light-bulb placing puzzle" + OBJECTIVE "Place bulbs to light up all the squares.") +solver(lightup) + +puzzle(loopy + DISPLAYNAME "Loopy" + DESCRIPTION "Loop-drawing puzzle" + OBJECTIVE "Draw a single closed loop, given clues about number of \ +adjacent edges.") +solver(loopy) + +puzzle(magnets + DISPLAYNAME "Magnets" + DESCRIPTION "Magnet-placing puzzle" + OBJECTIVE "Place magnets to satisfy the clues and avoid like poles \ +touching.") +solver(magnets) + +puzzle(map + DISPLAYNAME "Map" + DESCRIPTION "Map-colouring puzzle" + OBJECTIVE "Colour the map so that adjacent regions are never the \ +same colour.") +solver(map) + +puzzle(mines + DISPLAYNAME "Mines" + DESCRIPTION "Mine-finding puzzle" + OBJECTIVE "Find all the mines without treading on any of them.") +cliprogram(mineobfusc mines.c COMPILE_DEFINITIONS STANDALONE_OBFUSCATOR) + +puzzle(mosaic + DISPLAYNAME "Mosaic" + DESCRIPTION "Grid-filling puzzle" + OBJECTIVE "Fill in the grid given clues about number of \ +nearby black squares.") + +puzzle(net + # The Windows Net shouldn't be called 'net.exe', since Windows + # already has a reasonably important utility program by that name! + WINDOWS_EXE_NAME netgame + + DISPLAYNAME "Net" + DESCRIPTION "Network jigsaw puzzle" + OBJECTIVE "Rotate each tile to reassemble the network.") + +puzzle(netslide + DISPLAYNAME "Netslide" + DESCRIPTION "Toroidal sliding network puzzle" + OBJECTIVE "Slide a row at a time to reassemble the network.") + +puzzle(nullgame) + +puzzle(palisade + DISPLAYNAME "Palisade" + DESCRIPTION "Grid-division puzzle" + OBJECTIVE "Divide the grid into equal-sized areas in accordance with\ + the clues.") + +puzzle(pattern + DISPLAYNAME "Pattern" + DESCRIPTION "Pattern puzzle" + OBJECTIVE "Fill in the pattern in the grid, given only the lengths \ +of runs of black squares.") +solver(pattern) +cliprogram(patternpicture pattern.c + COMPILE_DEFINITIONS STANDALONE_PICTURE_GENERATOR) + +puzzle(pearl + DISPLAYNAME "Pearl" + DESCRIPTION "Loop-drawing puzzle" + OBJECTIVE "Draw a single closed loop, given clues about corner and \ +straight squares.") +solver(pearl) +cliprogram(pearlbench pearl.c COMPILE_DEFINITIONS STANDALONE_SOLVER) + +puzzle(pegs + DISPLAYNAME "Pegs" + DESCRIPTION "Peg solitaire puzzle" + OBJECTIVE "Jump pegs over each other to remove all but one.") + +puzzle(range + DISPLAYNAME "Range" + DESCRIPTION "Visible-distance puzzle" + OBJECTIVE "Place black squares to limit the visible distance from \ +each numbered cell.") + +puzzle(rect + DISPLAYNAME "Rectangles" + DESCRIPTION "Rectangles puzzle" + OBJECTIVE "Divide the grid into rectangles with areas equal to the \ +numbers.") + +puzzle(samegame + DISPLAYNAME "Same Game" + DESCRIPTION "Block-clearing puzzle" + OBJECTIVE "Clear the grid by removing touching groups of the same \ +colour squares.") + +puzzle(signpost + DISPLAYNAME "Signpost" + DESCRIPTION "Square-connecting puzzle" + OBJECTIVE "Connect the squares into a path following the arrows.") +solver(signpost) + +puzzle(singles + DISPLAYNAME "Singles" + DESCRIPTION "Number-removing puzzle" + OBJECTIVE "Black out the right set of duplicate numbers.") +solver(singles) + +puzzle(sixteen + DISPLAYNAME "Sixteen" + DESCRIPTION "Toroidal sliding block puzzle" + OBJECTIVE "Slide a row at a time to arrange the tiles into order.") + +puzzle(slant + DISPLAYNAME "Slant" + DESCRIPTION "Maze-drawing puzzle" + OBJECTIVE "Draw a maze of slanting lines that matches the clues.") +solver(slant) + +puzzle(solo + DISPLAYNAME "Solo" + DESCRIPTION "Number placement puzzle" + OBJECTIVE "Fill in the grid so that each row, column and square \ +block contains one of every digit.") +solver(solo) + +puzzle(tents + DISPLAYNAME "Tents" + DESCRIPTION "Tent-placing puzzle" + OBJECTIVE "Place a tent next to each tree.") +solver(tents) + +puzzle(towers + DISPLAYNAME "Towers" + DESCRIPTION "Tower-placing Latin square puzzle" + OBJECTIVE "Complete the latin square of towers in accordance with \ +the clues.") +solver(towers latin.c) + +puzzle(tracks + DISPLAYNAME "Tracks" + DESCRIPTION "Path-finding railway track puzzle" + OBJECTIVE "Fill in the railway track according to the clues.") +solver(tracks) + +puzzle(twiddle + DISPLAYNAME "Twiddle" + DESCRIPTION "Rotational sliding block puzzle" + OBJECTIVE "Rotate the tiles around themselves to arrange them into order.") + +puzzle(undead + DISPLAYNAME "Undead" + DESCRIPTION "Monster-placing puzzle" + OBJECTIVE "Place ghosts, vampires and zombies so that the right \ +numbers of them can be seen in mirrors.") + +puzzle(unequal + DISPLAYNAME "Unequal" + DESCRIPTION "Latin square puzzle" + OBJECTIVE "Complete the latin square in accordance with the > signs.") +solver(unequal latin.c) + +puzzle(unruly + DISPLAYNAME "Unruly" + DESCRIPTION "Black and white grid puzzle" + OBJECTIVE "Fill in the black and white grid to avoid runs of three.") +solver(unruly) + +puzzle(untangle + DISPLAYNAME "Untangle" + DESCRIPTION "Planar graph layout puzzle" + OBJECTIVE "Reposition the points so that the lines do not cross.") + +add_subdirectory(unfinished) +add_subdirectory(auxiliary) + +if(build_cli_programs) + write_generated_games_header() + include(CheckFunctionExists) + check_function_exists(HF_ITER HAVE_HF_ITER) + set(WITH_LIBFUZZER OFF + CACHE BOOL "Build fuzzpuzz using Clang's libFuzzer") + cliprogram(fuzzpuzz fuzzpuzz.c list.c ${puzzle_sources} + COMPILE_DEFINITIONS COMBINED $<$:OMIT_MAIN> + $<$:HAVE_HF_ITER>) + target_include_directories(fuzzpuzz PRIVATE ${generated_include_dir}) + if(WITH_LIBFUZZER) + target_compile_options(fuzzpuzz PRIVATE -fsanitize=fuzzer) + set_target_properties(fuzzpuzz PROPERTIES LINK_FLAGS -fsanitize=fuzzer) + endif() +endif() + +build_extras() -- cgit v1.2.3