Logic game in modern Elm
Twenty years ago, in 2001, I created the very first version of Solvenius: it was a simple videogame, written in Visual Basic 6, but it still contained most of the game dynamics - in particular, the user had to deduce sequences of digits, à la Mastermind.
About fifteen years later, I discovered Elm, a sublime functional programming language: after the initial challenges due to the new paradigm, I was definitely excited about the well-structured nature of the Elm architecture, so I wanted to try it on a project I knew very well - so, why not Solvenius?
Solvenius 3, which I published in January 2016, was an invaluable breakthrough - which even inspired later projects like EighthBridge; however:
- it lacked proper build automation
- it was based on the ancient, signal-based Elm architecture
- its mobile usability, despite media queries, was limited - which is why I later created a Kotlin wrapper to publish the game to Google Play: but what about iPhone users and non-Android users in general?
Solvenius 4 addresses the above points:
-
package dependencies are ensured by Yarn and Elm, while the build process - from code to website - runs via Webpack and GitHub Actions
-
the code is written in modern, message-based Elm - after 5 years of courses and experience in the domain of functional/hybrid programming; part of the app is also in TypeScript - and the two languages are elegantly mixed by Webpack
-
in lieu of addressing specific stores, Solvenius is now a Progressive Web Application - that can be installed to a range of different devices!
Solvenius is an HTML 5 game- so you can run it just by pointing your web browser to:
https://gianlucacosta.info/solvenius
Furthermore, your web browser might even suggest that you install Solvenius - making it feel like a native application! ^__^
The game is fairly straightforward - but you can find detailed instructions in the online help, accessible from the title screen.
-
What's new in this major version?
Solvenius 4 introduces the following technical enhancements:
-
Portable Web Application (PWA) - to make the game compatible with a wider range of devices, and to make it available even when the user is not connected to the Internet
-
Far more elegant codebase, rewritten in modern Elm
-
Enhanced user interface:
- Multiple background music tracks
- Sounds
- Game pausing
- Confirmation messages before exiting the game
- Path-based page routing - which enables bookmarks to specific pages
-
Browser integration (e.g.: multimedia, local storage) via a thin layer of TypeScript code
-
Webpack to unify the two different languages into a single JavaScript bundle
-
Tests, to check the core parts of the game engine
-
Simple and elegant build process, supported by Yarn, Webpack and GitHub Actions
-
-
"Solvenius" - what does that mean?
Solvenius is short for solving genius - focusing on the deductive nature of the game and the fact that everyone can master its mechanics by applying logic! ^__^
-
The Entertainer by Kevin MacLeod Link: https://incompetech.filmmusic.io/song/5765-the-entertainer License: https://filmmusic.io/standard-license
-
Frogs Legs Rag by Kevin MacLeod Link: https://incompetech.filmmusic.io/song/5761-frogs-legs-rag License: https://filmmusic.io/standard-license
-
Ding sound Link: https://djlunatique.com/ding-sound-effect/ License: https://creativecommons.org/publicdomain/zero/1.0/
NOTE: the original audio files have been compressed when creating the game.
The author would like to thank:
- Marco Mengoli and Elisa Bruzzi: for testing this new release on iPhone, as well as for providing hyper-valuable feedback
The author would like to thank - in order by surname:
-
Massimiliano Corsini: for his valuable testing of both the HTML 5 and the Android version
-
Alberto La Mantia: for suggesting that game clues on sequence attempts should employ not only colors but also other visual elements
-
Kevin MacLeod (incompetech.com): for the excellent soundtrack
-
Salvatore Munaò: for his valuable testing of both the HTML 5 and the Android version
-
Ivano Pagano: for suggesting keyboard input support
-
Carmen Squillaci: for her valuable testing and suggestions on the Android version
-
Paolo Tagliapietra: for his suggestions and infrastructural support for an older major version (Solvenius 2)