{"id":13688180,"url":"https://github.com/Andrea/FunctionalProgrammingInGames","last_synced_at":"2025-05-01T16:30:37.590Z","repository":{"id":23053955,"uuid":"26407199","full_name":"Andrea/FunctionalProgrammingInGames","owner":"Andrea","description":"Functional Programming in Games Resources","archived":false,"fork":false,"pushed_at":"2024-01-14T15:12:40.000Z","size":88,"stargazers_count":212,"open_issues_count":3,"forks_count":17,"subscribers_count":21,"default_branch":"master","last_synced_at":"2025-04-09T15:05:47.389Z","etag":null,"topics":["clojure","elm","frp-game-engine","functional-programming","game-development","haskell","rust"],"latest_commit_sha":null,"homepage":null,"language":null,"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/Andrea.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":"2014-11-09T19:57:08.000Z","updated_at":"2025-04-05T18:28:12.000Z","dependencies_parsed_at":"2024-01-14T17:58:24.373Z","dependency_job_id":"ed06a9d2-7368-4a74-8ed4-f155b1210702","html_url":"https://github.com/Andrea/FunctionalProgrammingInGames","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/Andrea%2FFunctionalProgrammingInGames","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Andrea%2FFunctionalProgrammingInGames/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Andrea%2FFunctionalProgrammingInGames/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Andrea%2FFunctionalProgrammingInGames/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Andrea","download_url":"https://codeload.github.com/Andrea/FunctionalProgrammingInGames/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251906752,"owners_count":21663155,"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":["clojure","elm","frp-game-engine","functional-programming","game-development","haskell","rust"],"created_at":"2024-08-02T15:01:08.416Z","updated_at":"2025-05-01T16:30:37.585Z","avatar_url":"https://github.com/Andrea.png","language":null,"funding_links":[],"categories":["Others"],"sub_categories":[],"readme":"Functional Programming In Games\n============================\n\nWelcome to this page! Hope you find what you are looking for\n\nI don't know you, but when I was learning how to do funcitonal programming I wanted to program fun things, or something other than a \"website for your cat(tm)\" so I was looking for FP in games and there wasn't much around at the time... so I created this list.\n\n\n**Please note: this list is not complete. If you find something missing or incorrect, please send a PR or create an issue specifying the problem.**\n\n\n\nThanks\n\n## Some resources for Functional Programming in Games Resources\n\n## Books\n\n* Haskell: [Game Programming in Haskell](https://leanpub.com/gameinhaskell)\n* F#: [Friendly F#](http://www.amazon.com/Friendly-Fun-game-programming-Book-ebook/dp/B005HHYIWC) Not totally about games but all examples are game related\n* Lisp: [Land of Lisp](http://landoflisp.com/)\n* Racket: [Realm of Racket](http://realmofracket.com/)\n* Rust:\n    * [Learn game development in Rust](https://sunjay.dev/learn-game-dev/getting-started.html)\n    * [Hands-on Rust- Effective Learning through 2D Game Development and Play](https://pragprog.com/titles/hwrust/hands-on-rust/)\n    * [arewegameyet.rs](https://arewegameyet.rs/#resources) links to 5+ books, and there are also tutorials, videos, etc.\n\n### Tutorials\n\n* [F# game tutorial series with Monogame](http://bruinbrown.wordpress.com/f-game-tutorial-series/)\n* [Arcadia - Clojure on Unity3d](https://github.com/arcadia-unity/Arcadia)\n* [Building flappy bird from scratch with Arcadia at November Clojure NYC Meetup](https://www.youtube.com/watch?v=tBvNIJzlWEI)\n* [Writing a 2048 clone in elm](http://scrambledeggsontoast.github.io/2014/05/09/writing-2048-elm/)\n* [Caves of Clojure](http://stevelosh.com/blog/2012/07/caves-of-clojure-01/) a blog series on how to develop a Roguelike in Clojure. [Code](https://github.com/sjl/caves/).\n* [Game development in Clojure (with play-clj)](https://www.youtube.com/watch?v=9ilUe7Re-RA)\n\n### Videos\n\n* [Building a platform game from the ground up with F# and MonoGame](https://www.youtube.com/playlist?list=PLIH3o_QrxxcfNMC3TjZ5NlHnB1AmcyaiV)\n* [A reactive game stack: Using Erlang, Lua and Voltdb to enable a nonsharded game world](https://www.youtube.com/watch?v=BiBvOGP-GNg)\n* [Writing a game in Haskell](https://www.youtube.com/watch?v=1MNTerD8IuI)\n* [F# in Social Gaming](https://www.youtube.com/watch?v=ZMfqNfAGZHg)\n* [My adventures with Elm](https://vimeo.com/113703868)\n* [Morgan Mullaney - Well I Wouldn't Want To Make a *Dys*functional Game](http://www.meetup.com/FunctionalKats/events/221966876/)\n* [Games and 3D Graphics in Arcadia](https://www.youtube.com/watch?v=zmmdYyAQhmM)\n* [CodeMesh 2014 - Arcadia: Functional Video Game Development](https://www.youtube.com/watch?v=lHz5A19h9Z8)\n* [Making Games at Runtime with Clojure (with play-clj)](https://www.youtube.com/watch?v=0GzzFeS5cMc)\n* [RustConf 2018 - Closing Keynote - Using Rust For Game Development by Catherine West](https://www.youtube.com/watch?v=aKLntZcp27M)\n* [Rust Linz, 2021 - Herbert Wolverson - Learning Rust with Game Development](https://www.youtube.com/watch?v=79GyLlXAk-0) - this video is by the author of [Hands-On Rust](https://pragprog.com/titles/hwrust/hands-on-rust/)\n\n### Presentations\n\n* [My adventure with Elm - Yan Cui](http://www.slideshare.net/theburningmonk/my-adventure-with-elm-46396046)\n\n### Papers\n\n* [Monadic Scripting in F# for Computer Games](http://www.dsi.unive.it/~orsini/documenti/MonadicScripting2.pdf)\n* [A Formal Specification for Casanova,a Language for Computer Games](http://www.dsi.unive.it/~orsini/documenti/SpecificationCasanova.pdf)\n\n### Libraries and engines\n\n#### Haskell\n* [HELM](https://hackage.haskell.org/package/helm) An FRP game engine inspired by Elm. \n* [FunGEn](http://joyful.com/fungen/) A BSD licensed, cross platform non FRP game engine written in Haskell.* \n* [Haskell game related libraries](http://hackage.haskell.org/packages/#cat:game)\n* [LambdaHack](https://github.com/LambdaHack/LambdaHack) Haskell game engine library for roguelike dungeon crawlers.\n\n#### F \u0026#35;\n\n* [Duality Scripting](https://github.com/BraveSirAndrew/DualityScripting) Allows you to write F# on the Duality Game Engine (the compiler is integrated into the editor so you can write code on any editor you want). This plugin supports C# too.\n* [Nu Game Engine](https://github.com/bryanedds/FPWorks) cross-platform F# 2D game engine. It encourages to use as the architecture a variation of FRP which he calls Iterative Functional Reactive Programming.\n* Unity 3D can be used with F#. There are multiple examples in the internet, for example [this one](https://github.com/Thorium/Roll-a-ball-FSharp).\n\n#### Clojure\n\n* [play-clj](https://github.com/oakes/play-clj) A wrapper around [libGDX](http://libgdx.badlogicgames.com/). It supports pc, Android and iOS (through [RoboVM](http://robovm.com/)).\n* [brute](https://github.com/markmandel/brute) An Entity Component System which supports both Clojure and ClojureScript. Some information on the thinking behind the implementation are on the author's [blog](http://www.compoundtheory.com/brute-entity-component-system-library-0-2-0-the-sequel/).\n* [Arcadia](http://arcadia-unity.tumblr.com/) Clojure integrated into the Unity engine. It uses ClojureCLR. It has been used for interactive art installations and game jam games.\n\n#### Scala\n\n* [Indigo](https://indigoengine.io/): A Scala 3 / Scala.js 2D game engine built specifically for functional programmers.\n* [SGL](https://github.com/regb/scala-game-library): Scala Game Library (SGL) is a library for developing cross-platform 2D video games in Scala. It provides a high-level API for building games, and can export games to the Desktop, Android, and the web. More platforms, including iOS and consoles, are on the roadmap.\n\n#### Awesome Gamedev Repositories\n\n* OCaml: [Awesome OCaml Gamedev](https://github.com/fccm/awesome-gamedev-ocaml)\n\n#### Games\n\n##### Shipped or in development commercial games made with FP languages\n* [Onikira: Demon Killer](https://store.steampowered.com/app/310850/Onikira__Demon_Killer/) is a 2D side scrolling beat ‘em up set in a fantasy feudal Japan. It's on Steam (tho unsupported), parts of it written in F#.\n* [Wayward Tide](http://blog.chucklefish.org/set-sail-for-wayward-tide/) A game in development, targeting pc and written in Haskell\n* [Magic Cookies](http://keera.co.uk/blog/2015/03/19/magic-cookies-released-google-play/) Published on [iTunes](https://itunes.apple.com/us/app/magic-cookies/id1244709871) and [Google Play for Android](https://play.google.com/store/apps/details?id=uk.co.keera.games.magiccookies), it's written in Haskell.\n* [Nikki and the Robots](https://github.com/nikki-and-the-robots/nikki) is a 2-dimensional platform game written in Haskell, now open source. It's published on Steam.\n* [Asteroid Sharpshooter] published on Xbox Live Indie Games, written in F#. [Slides on the development process](https://docs.google.com/presentation/d/1teGhBf-m7qRkMzsbCKvRcIEo-QLwdK9w8VOEWqu1qWQ/edit#slide=id.p). His [blog](http://sharp-gamedev.blogspot.co.uk/2011/03/asteroid-sharpshooter-post-mortem.html) has more information on how he made [F# work with XNA on Xbox 360](http://sharp-gamedev.blogspot.co.uk/search/label/xna).\n\n##### Open source\n\n* Game jam games\n    * [An Evening of Modern Dance](http://ludumdare.com/compo/ludum-dare-32/?action=preview\u0026uid=1066) made with Arcadia (Clojure) for Ludum Dare 32. Source available.\n    * [Elm Flyer](http://jcollard.github.io/elm-flyer/) made with Elm. [Source](https://github.com/jcollard/elm-flyer-2014).\n    * [Castle of Elm](http://www.castleofelm.com/) 7DRL game made in Elm. [Source](https://github.com/doppioslash/CastleOfElm), [slides](http://slides.com/doppioslash/the-elm-language-livjavascriptug) on Elm and developing a game jam game with it.\n\n* More open source games, by language\n    * Haskell\n        * [Haskanoid](https://github.com/ivanperez-keera/haskanoid) A breakout game in Haskell using SDL and FRP, with Wiimote and Kinect support. [Available on Google Play](https://play.google.com/store/apps/details?id=uk.co.keera.games.breakout.beta).\n        * [Allure of the Stars](https://github.com/AllureOfTheStars/Allure) is a near-future Sci-Fi roguelike and tactical squad game written in Haskell. \n        * [Nikki and the Robots](https://github.com/nikki-and-the-robots/nikki) commercial game written in Haskell, now open source.\n\n* **Meta - games that teach functional programming concepts in-game**\n    * [cube-composer](https://github.com/sharkdp/cube-composer)\n        * \"A puzzle game inspired by functional programming, written in [PureScript](https://github.com/purescript/purescript).\"\n    * [lambda-lantern](https://github.com/lettier/lambda-lantern)\n        * You collect functional programming patterns and use them to solve puzzles and escape a dungeon.\n        * \"Lambda Lantern is a game made with PureScript, PureScript Native, and Panda3D.\" (\"One of the purposes of Lambda Lantern is to demonstrate binding PureScript to C++.\")\n    * **[functional](https://store.steampowered.com/app/1636730/functional/)** - on [Steam]((https://store.steampowered.com/app/1636730/functional/)) and [open source](https://github.com/yancouto/functional), implemented in Rust\n        * **\"functional is a puzzle game about math and abstraction.\"**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAndrea%2FFunctionalProgrammingInGames","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FAndrea%2FFunctionalProgrammingInGames","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAndrea%2FFunctionalProgrammingInGames/lists"}