Adding to what others are saying;
I’d be tempted to write my own “mini basic” which could be (fairly) easily ported to various 8 bit systems then write my games in that, so that they could be developed on windows, then ran on the target machines.
The mini basic would not need floating point nor any scientific functions, and instead perhaps have some helpful stuff for these kind of games, eg a 2 word parser.
For cassette tape operation, I’d be less inclined to worry about text compression (although that could be added) and instead make my games out of “levels”, where each, so-called, “level” is a new basic program that loads and plays. This way, you wouldn’t run out of memory on any system. But, of course, the game design would have to be around these levels.
So clearly, you need some continuity across levels, which would be a set of flags/states and some objects. Ideally as few objects as possible crossing “level” boundaries.
To give an example, and to keep things really simple, perhaps each level has a single final “treasure” that you must get. Say there are 4 levels, then there are 4 treasures, and these objects are present in all 4 level parts, but none of the other objects exists outside their own level. Now you can get the 4 treasures in any order.
Or, even simpler, the levels are sequential, so it can be assumed that you have all “treasures” from the all previous levels at each start.
some stuff;
A while back i wrote a mini-basic for embedded hw, and for fun(?) i ported it to the trs-80. I’m planning to check it into github after a cleanup. But that might be a good start candidate (just a few pages of C code & very low memory usage).