[Haskell-cafe] Asteroids game, (was Space leaks)
Ben.Lippmeier at anu.edu.au
Wed Oct 6 22:01:40 EDT 2004
For the asteroids game, I just call GHC's System.Mem.performGC every
frame and it seems to run ok. It's a very simple game, my 2.6Ghz P4
system walks all over it and the FPS counter seems to bounce around from
about 150 to 300.
I would imagine it's spending all it's time in the big XFillRectangle
call I'm using to blank the screen, and without double buffering it
flickers pretty bad.
I wrote the game as a way to get some non-tree-processing experience
with Haskell, and to test out a C struct marshalling FFI preprocessor I
was messing with. All the graphics stuff is written using straight Xlib,
called from Haskell.
You're more than welcome to the code if you think you can do something
with it. You can get it from my homepage at
There's also a mandelbrot set plotter, written in Haskell, which I wrote
to try out various unboxing schemes.
The only other (reasonably current) real-time projects i've heard of are:
* The HOpenGL effort and Haskell Quake.
HOpenGL seems to be somewhat active, you might like to try out some of
their sample programs.
I tried to get Haskell Quake to work once, but from memory they were
using an ancient version of Greencard/HOpenGL for their FFI, which I
couldn't get to work. The Haskell Quake home page says it hasn't been
updated since 1997.
* Alastair Reid's real-time computer computer vision project, FVision.
I think they solved their Garbage Collection stall problem the same way
I did, just invoked the garbage collector some fixed number of times per
second / frame.. Don't know much about it, best ask him directly.
* The Haskell DSP libraries
I think its mostly an off-line, don't-care-too-much-about-runtime
-performance kind of thing. I think it consists of a collection of
(typically) list to list functions, so its not really designed for real
However, a while back I had the idea that if you wanted to burn some CPU
cycles in a real-time way, you might try piping to/from /dev/dsp with a
full duplex souncard to make yourself some sort of poor-mans effect
Thats it. Not much code deployed out in the 'world' it seems. My PhD
project is also aligned with addressing this issue.
I think it's one of those catch 22 situations where no-one has written
real-time programs in Haskell cause they knew it probably wouldn't
work.. So when someone comes up with a new language feature which tries
to solve the problem, there's no programs to try it on cause no-one's
Do you know of any other real-time type projects besides these?
Perhaps the two of us, and who ever else is interested, should choose
some real-time program (perhaps the asteroids game, or revive Haskell
Quake) and spend some small, fixed amount of time per week working on it
so we'll all have some application to showcase our glorious new language
Andrew Cheadle wrote:
> Hi Ben
>>-> An astroids game I wrote for X.
>>The state: position, velocities of ship, astroids, missiles.
>>The [x] list: ship control data, key codes.
>>The [y] list: a list of graphics prims which get rendered to the screen.
> I wonder if you could help me out. I'm trying to investigate the
> practical use of my incremental collector for GHC over the standard
> generational collector. I'm looking for applications that have soft-real
> time constraints / interactive nature where garbage collector pauses are
> noticable. Do you know of any such applciations, did your asteroids game
> suffer any such problems? Although graphical programs would be great,
> when written in Haskell the rendering engine is usually in C so they're
> not usually appropriate!
> Any help greatly appreciated!
More information about the Haskell-Cafe