10 REM LANDER - a lunar lander game 11 REM (c) BBC 1982 12 REM by Jim Murray 13 REM Version 1.1 / March 1982 14 REM Needs 16K BBC Microcomputer 20 ON ERROR REPORT:GOTO 320 30 MODE 7 50 PROCintro 60 MODE 5 70 VDU 23,240,8,8,28,28,62,62,62,62 80 VDU 23,241,62,62,62,62,62,62,62,62 90 VDU 23,242,62,62,62,127,127,127,93,93 100 VDU 23,243,28,60,30,60,126,108,162,162 110 VDU 23;8202;0;0;0; 120 VDU 19,2,2,0,0,0 130 VDU 28,0,19,11,1 140 @%=&000906 150 *FX 11 1 160 PROClabels 170 PROCmoon 180 PROCinitialise 190 VDU 5 200 X%=960 210 GCOL 0,3 220 REPEAT 230 burn$=INKEY$(0) 240 *FX 15 1 250 IF burn$="" THEN burnrate%=0 ELSE burnrate%=VAL(burn$)*30 260 PROCcalculate 270 PROCdashboard 280 IF Y%>oldY%+4 OR Y%flop THEN PROCcrash ELSE PROCfanfare 320 *FX 12 0 330 *FX 15 1 340 VDU 4:END 350 DEF PROClabels 360 COLOUR 2 370 PRINT TAB(0,4)"secs" 380 PRINT TAB(0,7)"miles" 390 PRINT TAB(0,8)"feet" 400 PRINT TAB(0,11)"speed" 410 PRINT TAB(0,14)"fuel" 420 PRINT TAB(0,17)"burn?" 430 ENDPROC 440 DEF PROCmoon 450 GCOL 0,2 460 LOCAL X 470 FOR X=100 TO 1280 STEP 200 480 MOVE X,0 490 PLOT 85,RND(200)+X,30 500 PLOT 85,RND(200)+100+X,0 510 NEXT X 520 ENDPROC 530 DEF PROCinitialise 540 TIME=0:now=0 550 speed=1 :REM in miles/second 560 height=46:REM in miles 570 Y%=920 580 oldY%=Y% 590 gravity=0.001 600 fuel=16000 610 totalmass=33000 620 burnrate%=0 630 ENDPROC 640 DEF PROCcalculate 650 IF fuel<0 THEN fuel=0:burnrate%=0 660 burntime=(TIME-now)/100 670 now=TIME 680 slower=(burnrate%/totalmass)*2*EXP(burnrate%*burntime/totalmass) 690 height=height-speed*burntime-burntime*burntime/2*(gravity-slower) 700 speed=speed+burntime*(gravity-slower) 710 burnt=burnrate%*burntime 720 totalmass=totalmass-burnt 730 fuel=fuel-burnt 740 IF height<0 THEN height=0 750 Y%=height*20+32 760 ENDPROC 770 DEF PROCdashboard 780 VDU 4 790 COLOUR 2 800 PRINT TAB(5,4)INT(TIME/100) 810 PRINT TAB(5,7)INT(height) 820 PRINT TAB(5,8)(height*5280) MOD 5280 830 PRINT TAB(5,11)INT(speed*3600) 840 PRINT TAB(5,14)INT(fuel) 850 PRINT TAB(5,17)burnrate% 860 VDU 5 870 ENDPROC 880 DEF PROCcrash 890 SOUND 4,-15,100,70 900 FOR X=1 TO 100 910 MOVE 850+RND(200),RND(200) 920 GCOL 0,RND(4) 930 ZX=RND(1280):XC=RND(1079) 940 IF ZX<800 AND XC>400 THEN 930 ELSE DRAW ZX,XC 950 NEXT X 960 ENDPROC 970 DEF PROCfanfare 980 FOR X=1 TO 11 990 READ P,D 1000 IF P=999 THEN L=0 ELSE L=-15 1010 SOUND 1,L,P,D 1020 SOUND 1,0,0,3 1030 NEXT X 1040 DATA97,15,97,5,101,5,101,5,999,5,97,5,101,10,97,2,89,5,81,5,77,10 1050 ENDPROC 1060 DEF PROCburn 1070 GCOL 0,1 1080 MOVE X%,oldY% 1090 IF burnrate%=0 THEN VDU 10,9,127 ELSE VDU 10,243 1100 GCOL 0,3 1110 ENDPROC 1120 DEF PROCrocket 1130 MOVE X%,oldY% 1140 VDU 10,9,127,11,9,127,11,9,127,11,9,127 1150 MOVE X%,Y% 1160 VDU 242,8,11,241,8,11,240 1170 oldY%=Y% 1180 ENDPROC 1190 DEF PROCintro 1200 PRINT TAB(15,10)CHR$(141);"Lander";TAB(15,11)CHR$(141);"Lander" 1210 NOW=INKEY(500) 1220 PRINT''"Land your spaceship on the moon"'"without crashing. To fire the rockets"'"press one of the keys 1-9 and hold"'"it down as long as you want to fire." 1230 PRINT"The higher the number, the faster you"'"burn up fuel."''"Your height in miles and feet, the"'"speed of descent in miles per hour,"'"the rate of the burning and the"'"elapsed time are constantly displayed"'"as you descend." 1240 PRINT'"A successful landing is at less than 60 mph for an easy game, or at"'"15 mph for a difficult one."''"Type E for an easy game, D for a" 1250 INPUT"difficult one...>"qw$ 1260 IF qw$="D" THEN flop=0.004 ELSE flop=0.016 1270 ENDPROC REM In order to make the programme run properly on an Archimedes REM I had to add the following lines, which slow the whole thing down! REM REM 275 *FX19 REM REM 285 *FX19