Just a Silly Little ZX81 Landing Game
Try to land on the randomly moving platform. It can be easy, or impossible.
Funny enough Lander, Octobers 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 lets dig deeper.
Whats 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 heyit is the 80s. We werent fair then.
All kidding aside, Lander isnt much of a game. You either land, or not. Thats it. No score is saved, and no tracking of successes or failures. In a way, its boring. But, it is fun in its 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<br/> 180 IF Y1=10 THEN GOTO 200<br/> 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 didnt around to programming until 1984. Because, by then, I was using much more elegant code like this:
130 FOR Y1=1 TO 10<br/> 190 NEXT Y1
Two lines that do the same job as three. Sadly, this isnt the only example. I brute forced the platform animation using a variable as well. Now, Ill give myself a little slack here. I wasnt 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, youd need a minor tweak to the print routineyou'd have to add one to the array index. A better, more obvious solution.
When RND isnt RND.
Another area of concern is my use of the variable RND. Since I was typing in this program from a listing, it wasnt 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 ZX81s 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)<br/> 290 LET RND=RND-(RND=0)
If you can, youre doing better than I did. I completely messed these up. As a side note, this is a GOSUB
routine. Im not sure why. Although pleased I used some flow management, it isnt 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 isnt 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 didnt 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 isnt 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.