Home

Awesome

Version on Hackage Flattr this git repo

This is a Haskell breakout game implemented using the Functional Reactive Programming library Yampa.

<p align="center"> <img src="/screenshots/android.gif?raw=true" alt="Haskanoid Video" style="max-width:100%;"> </p> The game has been created for educational purposes, but tries to feature a substantial amount of the complexity often found in real arcade games. In particular:

A version of this game using SDL2 has been made available by Keera Studios for free on Google Play for Android. There is a bug that makes the app not close or save the game when you exit it. I know how to solve it, I just haven't found the time to push that change. Please, report other bugs of that Android app here. You can follow the progress of the port for Android on facebook and twitter.

Haskanoid on Android

We would like to call on Haskell programmers, game developers and anyone with an interest in Functional Reactive Programming and/or Game Programming to review the code, ask for clarification when the code is not clear enough, and help us improve the game, and the state of FRP/Yampa programming as well.

This game was used to present a Declarative Game Programming tutorial at PPDP 14 (see http://keera.co.uk/blog/2014/09/24/game-programming-videos-code/ for details). Slides are linked from that website.

Installation

The game is available on hackage. All the media resources are included with the distribution (see LICENCE for redistribution terms). You can install it with*:

$ cabal update
$ cabal install haskanoid
$ $HOME/.cabal/bin/haskanoid

If you want to explore the code and possibly make changes, do the following:

$ cabal update
$ cabal unpack haskanoid            # or git clone http://github.com/ivanperez-keera/haskanoid
$ cd haskanoid-*                    # Game resources are here
$ cabal install
$ $HOME/.cabal/bin/haskanoid

To play it with the wiimote, you need to run the program with the special arguments +RTS -V0. See http://github.com/ivanperez-keera/hcwiid for an explanation.

*Additional notes:

Documentation

To try and make things as clear as possible, the code includes a much haddock documentation and comments as we could reasonably fit. You can compile those with:

$ cabal unpack haskanoid     ## Or git clone this-repo
$ cd haskanoid-*
$ cabal install --only-dependencies
$ cabal haddock --haddock-executables --haddock-internal

You may also want to add the flags -f-wiimote and -f-kinect to the cabal commands above to install without wiimote and kinect support.

Related projects

Hands-on

In the hands-on file you find ideas to improve haskanoid while focussing on (game) programming related areas that you might want to dive in deeper. The areas are: functional (reactive) programming, performance, human-computer interaction and input/output, and game design.

Educators

If you find this game attractive and would like to use it to teach functional programming or other subjects, we'd be very happy to know about it. We can provide extra material that you can show to students (videos, screenshots, etc.).