{"id":17892460,"url":"https://github.com/simonmichael/games","last_synced_at":"2025-03-23T00:32:59.915Z","repository":{"id":138801736,"uuid":"411642885","full_name":"simonmichael/games","owner":"simonmichael","description":"Small games, experiments, and notes on (Haskell) game development.","archived":false,"fork":false,"pushed_at":"2023-02-27T17:26:08.000Z","size":1745,"stargazers_count":12,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-18T16:04:15.021Z","etag":null,"topics":["console","game","gamedev","haskell","stack","terminal","terminal-game"],"latest_commit_sha":null,"homepage":"","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/simonmichael.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-09-29T11:16:04.000Z","updated_at":"2023-05-07T03:17:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"e3b70705-bfc4-4e1c-813f-26d951e0562b","html_url":"https://github.com/simonmichael/games","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonmichael%2Fgames","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonmichael%2Fgames/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonmichael%2Fgames/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonmichael%2Fgames/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/simonmichael","download_url":"https://codeload.github.com/simonmichael/games/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245040235,"owners_count":20551297,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["console","game","gamedev","haskell","stack","terminal","terminal-game"],"created_at":"2024-10-28T14:37:54.750Z","updated_at":"2025-03-23T00:32:59.897Z","avatar_url":"https://github.com/simonmichael.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"Small games, experiments and game dev notes.\n\n## Games and experiments\n\n✅ = confirmed installable on target platforms as of release date\n🕹 = a playable game\n🔔 = sound\n\n|     |                                                                                             |              |                             |\n|-----|---------------------------------------------------------------------------------------------|--------------|-----------------------------|\n| ✅🕹 | [tiny-games-hs](https://github.com/haskell-game/tiny-games-hs)                                           | 2023         | haskell |\n| ✅🕹🔔 | [caverunner](caverunner)                                                                    | 2021         | haskell, ansi-terminal-game |\n| \u0026#x3000;\u0026#x3000;🔔  | [breakout](https://github.com/simonmichael/breakout)                                        | 2007, 2020   | haskell, sdl                |\n| ✅  | [metapong](https://github.com/simonmichael/metapong)                                        | 2019         | haskell, ansi-terminal-game |\n| ✅  | [symon](https://github.com/simonmichael/symon)                                              | 2016         | haskell, ansi-terminal      |\n| ✅🕹 | [guess-the-number](https://hub.darcs.net/simon/guess-the-number/browse/guess-the-number.hs) | 2013         | haskell, cli                |\n|     | [hssdl-osx-template](https://hub.darcs.net/simon/hssdl-osx-template)                        | 2013         | haskell, sdl                |\n|     | [hssdl-mac-example](https://github.com/simonmichael/hssdl-mac-example)                      | 2011         | haskell, sdl                |\n|     | [animtest-hs](https://hub.darcs.net/simon/animtest-hs)                                      | 2010         | haskell, sdl, opengl        |\n|     | [wallofdoom](https://hub.darcs.net/simon/wallofdoom)                                        | 2009         | python, pygame              |\n|     | [rocks](https://hub.darcs.net/simon/rocks)                                                  | 2005         | IO                          |\n| \u0026#x3000;\u0026#x3000;🔔 | [frozen-bubble-py](https://hub.darcs.net/simon/frozen-bubble-py)                            | 2002         | python, pygame              |\n| ✅🕹 | [FunGEn game engine \u0026 example games](https://github.com/haskell-game/fungen) (maintenance)  | 2008-present | haskell, opengl             |\n\n## Haskell game development\n\n### See also\n\n- [#haskell-game matrix](https://matrix.to/#/#haskell-game:matrix.org) / [IRC](https://web.libera.chat/#haskell-game) chat (also Discord, Telegram chats)\n- https://haskell-game.dev\n- http://www.reddit.com/r/haskellgamedev\n- http://www.haskell.org/haskellwiki/Game_Development\n- http://hackage.haskell.org/packages/#cat:Game\n- https://github.com/haskell-game\n\n### How hard is it to make games in Haskell ?\n\nPretty hard to figure out a good setup; relatively easy and pleasant after that,\nfor non-resource-intensive games at least.\nThese notes and examples aim to help.\n\n### Some problems and solutions\n\n(as of 2021-09)\n\n#### Packaging/installation\n\n**Minimising packaging boilerplate and complex/unreliable install instructions**\\\nUse a [stack script with `script` command](https://docs.haskellstack.org/en/stable/GUIDE/#script-interpreter).\n\n**Getting stack script header just right**\n\n- Specify all extra packages (packages other than `base` that you import from)\n  with `--package` options in the stack script header.\n  If you forget any, the script may run for you but fail for others.\n\n- If they depend on packages not in stackage, you must also mention each of those\n  (the error message will list them.)\n\n- Use a block comment (`{- -}`) so that you can write packages and options on multiple lines.\n  (A line comment (`--`) will work only for one line.)\n\n**Avoiding apparent hang when ghc is installed on first run**\\\nAdd `--verbosity=info` to stack options line to show ghc install progress\n(but this also shows unwanted \"resolver\" output on every run.\n`--verbosity=warning` hides that, but still shows package install progress.\n`--verbosity=error` hides that too.)\n\n**Avoiding recompilation delay on every run**\\\nUse `script --compile` in stack options line\n(or `script --optimize`, which might take longer and/or run faster).\n\n**Running stack script in threaded mode when using packages that require this**\\\n(ansi-terminal-game, etc.):  add `--ghc-options=-threaded` to stack options line\n\n**Providing ready-to-run binaries that don't require the user to have `stack` or other haskell tools**\n\n- set up Github CI workflows to build binary artifacts on the main platforms \n  (and ideally, statically link the GNU/Linux binary);\n  add those to a Github release for stable download url.\n\n- mac: get your app packaged in homebrew\n\n- etc.\n\n**Providing screenshots/screencasts**\\\nuse a convenient screenshot tool on your platform (eg CMD-SHIFT-5 and friends on mac);\nor install and use asciinema to record .cast files,\nasciicast2gif or similar to convert those to animated GIF images;\nadd the images to a README.md.\n\n#### Tools\n\n**Getting haskell-language-server to see extra packages, eg for editing in VS Code**\\\nadd this `hie.yaml` in the same directory:\n```\ncradle:\n  stack:\n```\nand `stack install` each extra package in stack's global project.\\\n(Still flaky..)\n\n**Configure GHC build options, eg to silence unwanted warnings**\\\nAdd lines above your imports like\\\n`{-# OPTIONS_GHC -Wno-missing-signatures -Wno-unused-imports #-}`\n\n**Enabling/disabling GHC's optional Haskell language extensions**\\\nAdd lines above your imports like\\\n`{-# LANGUAGE MultiWayIf, RecordWildCards #-}`\n\n#### Terminal/console games\n\n**Drawing anywhere on the terminal, portably**\\\nuse [ansi-terminal](https://hackage.haskell.org/package/ansi-terminal)\n\n**Getting non-blocking input, a ready-made event loop, and more powerful drawing, portably**\\\nuse [ansi-terminal-game](https://hackage.haskell.org/package/ansi-terminal-game)\n\n**Getting more powerful input/drawing/event loop, if you don't care about Windows**\\\nuse [vty](https://hackage.haskell.org/package/vty) and [brick](https://hackage.haskell.org/package/brick)\n\n**Getting arrow key and modifier key inputs**\\\nuse vty\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimonmichael%2Fgames","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsimonmichael%2Fgames","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimonmichael%2Fgames/lists"}