Program Correction for Space Lander C64

Gazette

Administrator
Staff member
The November edition of Space Lander included the incorrect version of the full program listing which did not work correctly when typed into a real C64. The following is the corrected version of that program:

10 REM SPACE LANDER GAME (C64 BASIC)
20 PRINT CHR$(147)
40 PRINT CHR$(18)SPC(13)"SPACE LANDER"CHR$(146)
50 PRINT CHR$(13)SPC(5)"SPACE=THRUST O=LEFT P=RIGHT"
60 PRINT CHR$(13)SPC(10)"CHOOSE DIFFICULTY:"
70 PRINT CHR$(13)SPC(14)"1: EASY"
80 PRINT CHR$(13)SPC(14)"2: MEDIUM"
90 PRINT CHR$(13)SPC(14)"3: HARD"
100 GET C$ :IF C$ = ""THEN GOTO 100
110 REM TARGET SPEED (SETS DIFFICULTY)
120 IF C$ = "1" THEN TS=0.55
130 IF C$ = "2" THEN TS=0.5
140 IF C$ = "3" THEN TS=0.4
150 IF VAL(C$) <= 0 OR VAL(C$) > 3 THEN GOTO 100
150 PRINT CHR$(147)
160 GY=20 :REM GROUND IS ROW 20
170 GOSUB 570
190 X=20 :Y=1 :S=0.5 :T=0 :F=30 :G=0.15
210 REM STORE OLD VALUES
220 OX=X :OY=Y
230 GET C$ :REM MOVEMENT KEYS
240 IF C$="P" AND X < 39 THEN X=X+1
250 IF C$="O" AND X > 0 THEN X=X-1
260 REM THRUST
270 IF F > 0 AND C$=" " AND T < (G*2) THEN T=T+0.25
280 REM SPEED IS SPEED MINUS THRUST PLUS GRAVITY
290 REM BUT SPEED CAN NOT EXCEED 1
300 S=S-T+G
310 IF S > 1 THEN S=1
320 IF T > (G*2) THEN T=(G*2)
330 IF F > 0 AND T > 0 THEN F=F-1
340 IF T <= 0 THEN T=0
350 IF T > 0 THEN T=T-0.2
360 IF F = 0 THEN T = 0
370 REM HEIGHT IS PREVIOUS HEIGHT PLUS SPEED
380 Y=Y+S
390 IF Y < 1 THEN Y = 1
400 POKE 1031,32
410 PRINT CHR$(19)CHR$(18)"FUEL"CHR$(146)" ";F
420 PRINT CHR$(18)"SPEED"CHR$(146)" "; LEFT$(STR$(S),3);" "
430 PRINT CHR$(18)"THRUST"CHR$(146)" "; LEFT$(STR$(ABS(T)),3);" "
440 REM DETERMINE SUCCESS
450 IF Y >= GY THEN GOTO 610
460 REM OTHERWISE REPEAT
470 GOSUB 500
480 GOTO 210
500 REM ERASE THE SHIP
510 IFOX<>X OR OY<>Y AND INT(Y)<= GY THEN GOSUB 30000
520 REM DRAW THE SHIP
530 POKE 1024+(INT(Y)*40)+X,88
540 IF C$=" " AND Y < (GY) THEN POKE 1024+(INT(Y+1)*40)+X,22
550 RETURN
570 REM DRAW GROUND AND LANDING PAD
580 FOR I=0 TO 39:POKE 1024+GY*40+I,160:NEXT:REM DRAW GROUND
590 RETURN
600 REM SUCCESS OR FAILURE TEST (TS IS TARGET SPEED)
610 PRINT
620 IF S > TS THEN GOSUB 20000
630 IF S <= TS THEN PRINT "TOUCHDOWN!":POKE 1024+(INT(Y)*40)+X,160
10000 PRINT "PLAY AGAIN?"
10010 GET C$ :REM WAIT FOR KEY PRESS
10020 IF C$ = "N" THEN END
10030 IF C$ = "Y" THEN GOTO 20
10040 GOTO 10010
20000 REM CRASH
20010 PRINT "OOF! SLOW DOWN! "
20020 POKE 1024+(INT(Y)*40)+X,42 :POKE 1024+(INT(OY)*40)+X,42
20030 POKE 1024+(INT(Y)*40)+X+1,42 :POKE 1024+(INT(Y)*40)+X-1,42
20040 RETURN
30000 REM ERASE THE SHIP
30010 POKE1024+(INT(OY)*40)+OX,32:POKE1024+(INT(OY+1)*40)+OX,32
30020 RETURN
 

Attachments

Back
Top