Funny enough Lander, October’s game of the month, came out after my Lander 2 game. Weird, huh? No matter, it is a fast and sometimes difficult, sometimes easy, video game. Go give it a try, then let’s dig deeper.
What’s with that platform?
Lander is a straight forward game where you move your lander back and forth using 5 and 8. As you descend, you need to line up your ship as the platform shifts randomly around. It's not fair, but hey—it is the ’80s. We weren’t fair then.
All kidding aside, Lander isn’t much of a game. You either land, or not. That’s it. No score is saved, and no tracking of successes or failures. In a way, it’s boring. But, it is fun in it’s simplicity. There is nothing hidden here. The fun is in the landing.
That said, it is too easy to let the game play out. The starting positions are the same each game, so the only difference is in how the platform moves. As such, you can land by doing nothing. Of course, that isn't much fun. But the game can be just as brutal, moving the platform at the last second.
Short in length.
Because the Lander is so simple, it is also quite short. But, not quite as simple. There is actually quite a bit of code here for what amounts to a few short movements.
The main loop is eight lines of code, which is actual more than it should be. I pretty much brut forced this code. For example, the program moves the lander by incrementing a variable. Here is the original code:
130 LET Y1=Y1+1
180 IF Y1=10 THEN GOTO 200
190 GOTO 120
Now, looking at this code I wonder about when I wrote this. My guess is this program is based on earlier code that I didn’t around to programming until 1984. Because, by then, I was using much more elegant code like this:
130 FOR Y1=1 TO 10
190 NEXT Y1
Two lines that do the same job as three. Sadly, this isn’t the only example. I brute forced the platform animation using a variable as well. Now, I’ll give myself a little slack here. I wasn’t thinking about boolean operations back in high school. But the
LET I=I-(I=2)+(I=1) could have been simplified to
LET I=NOT I. Plus, you’d need a minor tweak to the print routine—you'd have to add one to the array index. A better, more obvious solution.
When RND isn’t RND.
Another area of concern is my use of the variable RND. Since I was typing in this program from a listing, it wasn’t until I was testing that I noticed that something was amiss. The issue turned out to be my use of the
RND keyword, where I needed to use the variable, and vice versa.
Needless to say, the ZX81’s expanded keywords can be confusing enough without adding in my own challenges. Check out this code as an example. Can you tell which is which?
280 LET RND=INT (RND*2)
290 LET RND=RND-(RND=0)
If you can, you’re doing better than I did. I completely messed these up. As a side note, this is a
GOSUB routine. I’m not sure why. Although pleased I used some flow management, it isn’t needed. In fact, it not only needs to be optimized, but could be added inline to where it is used.
The good of it all.
The code isn’t all bad. The graphics fit the game and it is quite fast. It also does a good job of filling out the white space. The animation of the platform is a nice touch. Plus, the ending text looks good.
Even better, this is one of the few programs where I didn’t need to add a continue routine. Although, I laughed that you can exit the program by pressing N, when exiting with a break would be just as easy.
Of course, adding in some other game play elements would have made it even better. Besides keeping score, it would have been nice to change the distance of the drop to allow for more variation. I could also have made the platform length vary, although that would have made the animation a bit harder. Thinking a bit about it, I could use a splice to add it in.
Another thought I had, given the random nature of the program, was to add in lives. This would make up for an unfair landing. You could even add in bonus lives after so many successes. Hmmm. Maybe I should write a third version.
Summing it up.
In all, Lander isn’t a bad game. It lacks polish, but works as designed. Now, I should go dig through my notes and see if I have an earlier version of this game.
Until next time.