Ruby is dynamically typed general purpose programming language. It is a pure object orientated language (in the vein of Smalltalk, rather than Simula), but also supports procedural and functional programming.
Ruby is still coming of age in the roguelike field -- there are no roguelike libraries and only a few finished games in the language. That said, Ruby is very powerful, combining an elegant syntax with an incredibly dynamic object system. It's also incredibly fun to code with.
Interfacing with C
Ruby MRI, the canonical and most popular Ruby distribution, is implemented in C and can make use of C libraries and extensions relatively easy. This is great for leveraging libraries such as libtcod, as well as for writing performance and/or memory critical parts of your application.
- Extending Ruby - The Pragmatic Programmer's Guide A guide to writing C extensions for Ruby. The overhead of this is minimal, but it does require a modicum of boilerplate.
- RubyInline Is a third party module that allows you to inline C code in pure ruby. The overhead is around 2*.
- Chingu, a game framework that extends Gosu with higher level features
- Gosu, a 2D game development library
- Ncurses, cross-platform, true Curses support (built-in Curses support has no colours under Windows and is generally a mess)
- Rubygame, multimedia library for entertainment software, scientific data visualisation programs, educational/training tools and interactive motion graphics
As people begin to use Ruby for RL development, code will surface. There are already a few algorithms implemented and put up at RogueBasin.
Okay, I'm going to use Ruby. What now?
You'll need to install a copy of Ruby from http://www.ruby-lang.org/ (I recommend the one-click installer) or your package manager (apt-get install ruby). Then acquaint yourself with the Ruby tools: irb, ri and rdoc. A good version of the standard library API can be found at http://www.noobkit.com/
It is possible to use the built-in curses on linux and other platforms, and interface with the Win32 console via the Win32 API for Windows support. However, this is a relative pain. Instead, install the non-standard ncurses-ruby package!
- Download ncurses-ruby1.8-0.9.1-i386-mswin32.zip from http://ncurses-ruby.berlios.de/
- Copy lib/ncurses.rb and ncurses.so into your code directory (don't copy the lib directory itself!)
- In your script, require 'ncurses'
That's it! You can now use ncurses (see the zdennis's ncurses examples at http://github.com/zdennis/ncurses_examples/tree/master or the C API, which is very similar). At some point an example roguelike using ncurses will be uploaded.
Line of sight
Here is a Bresenham's Line Algorithm implementation in Ruby.
Field of View
A few field of view algorithms have been implemented in Ruby
For certain intensive operations it may be prudent to use a Bitfield. One example is storing which map tiles have been visited by your player (and will be drawn).
Using this library, it is easy to add methods to your Map class for FOV calculation: