From: Andreas Rossberg <rossberg@mpi-sws.org>
To: Yotam Barnoy <yotambarnoy@gmail.com>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] ANN: Boulder Dash in OCaml
Date: Wed, 27 Nov 2024 10:03:31 +0100 [thread overview]
Message-ID: <57578DC6-E602-4681-B65F-2D7362457D0C@mpi-sws.org> (raw)
In-Reply-To: <CAN6ygOkzw6wXtzuvi6EuYb=Zz61gFLBdUMmCzz2fsWc_bqZ03g@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 4162 bytes --]
Yeah, well, the core physics of Boulder Dash is akin to a cellular automaton whose state is advanced in ticks. So its state naturally is a 2D array with a constant change rate, and there isn’t too much to gain by a more functional representation, especially since OCaml doesn’t offer functional array types.
The uglier part in terms of being very imperative is the UI code, but without a more functional graphics library that’s probably a lost cause.
Performance would be the least of the issues, given that 1 MHz computers from the 80s were able to handle this game. :)
> On 27. Nov 2024, at 07:54, Yotam Barnoy <yotambarnoy@gmail.com> wrote:
>
> Very nice! Since you're already toying with the code, you might want to try and test the impact of moving towards a more functional, immutable data structure approach. I've found that you can separate out those parts of the game state that change more rapidly and those that don't, and the slow-changing parts can easily tolerate functional paradigms, with the advantage being greater safety and reduced state complexity.
>
> On Tue, Nov 26, 2024 at 7:39 PM Andreas Rossberg <rossberg@mpi-sws.org <mailto:rossberg@mpi-sws.org>> wrote:
>> Couldn’t let it rest, so I’m (already) announcing version 2 of it — now a much improved, practically feature-complete reimplementation of both Boulder Dash 1 & 2.
>>
>> Version 2 was an excuse for me to mess around with the OCaml bindings to popular graphics engines, and as a result, it now comes with 3 backends to choose from:
>>
>> 1. the homely bare OCaml Graphics library (https://github.com/ocaml/graphics),
>> 2. the TSDL binding to the SDL2 API (https://github.com/dbuenzli/tsdl),
>> 3. the binding to the Raylib engine (https://github.com/tjammer/raylib-ocaml).
>>
>> The list is in order of increasingly better user experience, for the price of a potentially harder build experience. In theory, all versions should run on Windows, Mac, and Linux, though I was too lazy to test all combinations, and I (or my opam) had trouble installing some of the dependencies on some of the systems.
>>
>> Features:
>>
>> * Faithful original physics, graphics, animations, sound, and music
>> * Authentic scrolling mechanics combined with dynamic resizing
>> * All 40 levels and 5 difficulties of Boulder Dash 1 & 2
>> * Pause-and-go mode for relaxed playing
>>
>> Relative to the previous release, version 2 adds the following niceties:
>>
>> * Support for SDL and Raylib engines, which allow all of the following
>> * Original sound effects and music
>> * Original level color schemes
>> * Full screen mode
>> * Faster graphics
>> * Dynamic graphics scaling adjustment
>> * Gamepad/joystick support as well as more precise keyboard controls
>> * Boulder Dash 2 levels and decoder
>>
>> Almost looks like a real game now. One from the 80s anyways. :)
>>
>> Enjoy,
>> /Andreas
>>
>>
>> > On 12. Nov 2024, at 16:55, Andreas Rossberg <rossberg@mpi-sws.org <mailto:rossberg@mpi-sws.org>> wrote:
>> >
>> > Boulder Dash(*) was my favourite computer game in the 8-bit era, first released on the Atari 400/800 in 1984. Though I never owned an 8-bit machine myself, I had friends that I annoyed enough to let me play it on theirs.
>> >
>> > As a homage to its 40th anniversary, I put together a fairly faithful clone of the original game, implemented in just a few 100 lines of bare OCaml, with nothing but the homely Graphics library. It should run on Windows, Mac, and Linux, though I was too lazy to test the latter.
>> >
>> > Features:
>> >
>> > • Faithful original physics, graphics, and animations
>> > • Authentic scrolling mechanics combined with dynamic window resizing
>> > • All 20 levels, including intermissions, and 5 difficulties
>> > • Pause-and-go mode for relaxed playing
>> >
>> > It is open-source here:
>> >
>> > https://github.com/rossberg/boulder-dash
>> >
>> > Enjoy!
>> >
>> > /Andreas
>> >
>> > (*) https://en.wikipedia.org/wiki/Boulder_Dash_(video_game)
>> > "Boulder Dash" is a trademark of BBG Entertainment
>> >
>>
[-- Attachment #2: Type: text/html, Size: 5661 bytes --]
next prev parent reply other threads:[~2024-11-27 9:05 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-12 15:55 Andreas Rossberg
2024-11-12 23:28 ` Daniel Bünzli
2024-11-13 9:44 ` Andreas Rossberg
2024-11-26 17:38 ` Andreas Rossberg
2024-11-27 6:54 ` Yotam Barnoy
2024-11-27 9:03 ` Andreas Rossberg [this message]
2024-11-27 10:44 ` Vu Ngoc San
2024-11-27 16:58 ` Andreas Rossberg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=57578DC6-E602-4681-B65F-2D7362457D0C@mpi-sws.org \
--to=rossberg@mpi-sws.org \
--cc=caml-list@inria.fr \
--cc=yotambarnoy@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox