C++ would suck for that (and any other language) as Inform6 gives you an object table and a parser for free with lots of object types such as rooms, containers, verbs, cardinal directions... already defined in the standard English library.
And the Z machine games can be run everywhere.
Declaring some room with i6 it's literally four lines of code:
The object name and the internal one, the description upon entering it, a light attribute, and a semicolon.
I recently wrote a text-based adventure game in C, which I then ported to Z80 assembly language. My goal was to write a simple game that could run on a CP/M system.
Using C wasn't too painful, but I agree that using something else would have been more straightforward. I've ended up in a situation where the user can type "USE TORCH", but really they want to type "LIGHT TORCH". So I added that as a synonym, but once you do that in a few different places you end up accidentally supporting commands such as:
LIGHT THE BOOK
READ THE TORCH
They work, but they're utterly bogus from a logical point of view.
That said I'm pleased I managed to get it working at all, and my next step will be writing a third version using an infocom compiler & interpreter.
Object -> "flashlight"
with name 'flashlight' 'torch',
description "It's a battery-powered flashlight, of the sort that switches on and off.",
after [;
SwitchOn: give self light;
SwitchOff: give self ~light;
],
has switchable ~on ~light;
I absolutely agree that the Inform languages are great for creating interactive fiction, hence why I originally linked it.
But I have created text based adventures (usually with some RPG-style combat) in C++ a few times for fun and it can be done in a fairly clean and simple way.
As far as I'm aware, the only modern compiler that supports Z-machine output is Inform 6. Maybe Inform 7 does as well, but that segment of the IF community has basically moved on to the Glulx virtual machine, which Andrew Plotkin created as a 32-bit spiritual successor to the Z-machine.
And the Z machine games can be run everywhere.
Declaring some room with i6 it's literally four lines of code:
The object name and the internal one, the description upon entering it, a light attribute, and a semicolon.