└── README.md /README.md: -------------------------------------------------------------------------------- 1 | Functional Programming In Games 2 | ============================ 3 | 4 | Welcome to this page! Hope you find what you are looking for 5 | 6 | I 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. 7 | 8 | 9 | **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.** 10 | 11 | 12 | 13 | Thanks 14 | 15 | ## Some resources for Functional Programming in Games Resources 16 | 17 | ## Books 18 | 19 | * Haskell: [Game Programming in Haskell](https://leanpub.com/gameinhaskell) 20 | * 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 21 | * Lisp: [Land of Lisp](http://landoflisp.com/) 22 | * Racket: [Realm of Racket](http://realmofracket.com/) 23 | * Rust: 24 | * [Learn game development in Rust](https://sunjay.dev/learn-game-dev/getting-started.html) 25 | * [Hands-on Rust- Effective Learning through 2D Game Development and Play](https://pragprog.com/titles/hwrust/hands-on-rust/) 26 | * [arewegameyet.rs](https://arewegameyet.rs/#resources) links to 5+ books, and there are also tutorials, videos, etc. 27 | 28 | ### Tutorials 29 | 30 | * [F# game tutorial series with Monogame](http://bruinbrown.wordpress.com/f-game-tutorial-series/) 31 | * [Arcadia - Clojure on Unity3d](https://github.com/arcadia-unity/Arcadia) 32 | * [Building flappy bird from scratch with Arcadia at November Clojure NYC Meetup](https://www.youtube.com/watch?v=tBvNIJzlWEI) 33 | * [Writing a 2048 clone in elm](http://scrambledeggsontoast.github.io/2014/05/09/writing-2048-elm/) 34 | * [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/). 35 | * [Game development in Clojure (with play-clj)](https://www.youtube.com/watch?v=9ilUe7Re-RA) 36 | 37 | ### Videos 38 | 39 | * [Building a platform game from the ground up with F# and MonoGame](https://www.youtube.com/playlist?list=PLIH3o_QrxxcfNMC3TjZ5NlHnB1AmcyaiV) 40 | * [A reactive game stack: Using Erlang, Lua and Voltdb to enable a nonsharded game world](https://www.youtube.com/watch?v=BiBvOGP-GNg) 41 | * [Writing a game in Haskell](https://www.youtube.com/watch?v=1MNTerD8IuI) 42 | * [F# in Social Gaming](https://www.youtube.com/watch?v=ZMfqNfAGZHg) 43 | * [My adventures with Elm](https://vimeo.com/113703868) 44 | * [Morgan Mullaney - Well I Wouldn't Want To Make a *Dys*functional Game](http://www.meetup.com/FunctionalKats/events/221966876/) 45 | * [Games and 3D Graphics in Arcadia](https://www.youtube.com/watch?v=zmmdYyAQhmM) 46 | * [CodeMesh 2014 - Arcadia: Functional Video Game Development](https://www.youtube.com/watch?v=lHz5A19h9Z8) 47 | * [Making Games at Runtime with Clojure (with play-clj)](https://www.youtube.com/watch?v=0GzzFeS5cMc) 48 | * [RustConf 2018 - Closing Keynote - Using Rust For Game Development by Catherine West](https://www.youtube.com/watch?v=aKLntZcp27M) 49 | * [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/) 50 | 51 | ### Presentations 52 | 53 | * [My adventure with Elm - Yan Cui](http://www.slideshare.net/theburningmonk/my-adventure-with-elm-46396046) 54 | 55 | ### Papers 56 | 57 | * [Monadic Scripting in F# for Computer Games](http://www.dsi.unive.it/~orsini/documenti/MonadicScripting2.pdf) 58 | * [A Formal Specification for Casanova,a Language for Computer Games](http://www.dsi.unive.it/~orsini/documenti/SpecificationCasanova.pdf) 59 | 60 | ### Libraries and engines 61 | 62 | #### Haskell 63 | * [HELM](https://hackage.haskell.org/package/helm) An FRP game engine inspired by Elm. 64 | * [FunGEn](http://joyful.com/fungen/) A BSD licensed, cross platform non FRP game engine written in Haskell.* 65 | * [Haskell game related libraries](http://hackage.haskell.org/packages/#cat:game) 66 | * [LambdaHack](https://github.com/LambdaHack/LambdaHack) Haskell game engine library for roguelike dungeon crawlers. 67 | 68 | #### F # 69 | 70 | * [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. 71 | * [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. 72 | * 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). 73 | 74 | #### Clojure 75 | 76 | * [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/)). 77 | * [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/). 78 | * [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. 79 | 80 | #### Scala 81 | 82 | * [Indigo](https://indigoengine.io/): A Scala 3 / Scala.js 2D game engine built specifically for functional programmers. 83 | * [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. 84 | 85 | #### Awesome Gamedev Repositories 86 | 87 | * OCaml: [Awesome OCaml Gamedev](https://github.com/fccm/awesome-gamedev-ocaml) 88 | 89 | #### Games 90 | 91 | ##### Shipped or in development commercial games made with FP languages 92 | * [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#. 93 | * [Wayward Tide](http://blog.chucklefish.org/set-sail-for-wayward-tide/) A game in development, targeting pc and written in Haskell 94 | * [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. 95 | * [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. 96 | * [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). 97 | 98 | ##### Open source 99 | 100 | * Game jam games 101 | * [An Evening of Modern Dance](http://ludumdare.com/compo/ludum-dare-32/?action=preview&uid=1066) made with Arcadia (Clojure) for Ludum Dare 32. Source available. 102 | * [Elm Flyer](http://jcollard.github.io/elm-flyer/) made with Elm. [Source](https://github.com/jcollard/elm-flyer-2014). 103 | * [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. 104 | 105 | * More open source games, by language 106 | * Haskell 107 | * [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). 108 | * [Allure of the Stars](https://github.com/AllureOfTheStars/Allure) is a near-future Sci-Fi roguelike and tactical squad game written in Haskell. 109 | * [Nikki and the Robots](https://github.com/nikki-and-the-robots/nikki) commercial game written in Haskell, now open source. 110 | 111 | * **Meta - games that teach functional programming concepts in-game** 112 | * [cube-composer](https://github.com/sharkdp/cube-composer) 113 | * "A puzzle game inspired by functional programming, written in [PureScript](https://github.com/purescript/purescript)." 114 | * [lambda-lantern](https://github.com/lettier/lambda-lantern) 115 | * You collect functional programming patterns and use them to solve puzzles and escape a dungeon. 116 | * "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++.") 117 | * **[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 118 | * **"functional is a puzzle game about math and abstraction."** 119 | --------------------------------------------------------------------------------