home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib41b.dsk / LUNAR.LANDER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  5KB  |  140 lines

  1. 10  REM  *************************
  2. 20  REM  * LUNAR LANDER          *
  3. 30  REM  * by Brent Iverson      *
  4. 40  REM  * Copyright (C) 1991 by *
  5. 50  REM  * MindCraft Publ. Corp. *
  6. 60  REM  * Lincoln, MA 01773     *
  7. 70  REM  *************************
  8. 80  REM ---SET UP THE PROGRAM
  9. 90  PRINT  CHR$(4);"BLOAD LANDER.SHAPES,A$1DFC"
  10. 100  POKE 232,252: POKE 233,29
  11. 110  GOSUB 1190: GOSUB 1090: GOSUB 1250
  12. 120  GOTO 220
  13. 130  REM ---AUTOPILOT ROUTINE
  14. 140  IF XV >1  THEN XV = XV -G
  15. 150  IF XV < -1  THEN XV = XV +G
  16. 160  IF YV > -.9  THEN YV = YV -C
  17. 170  IF X >140  THEN XV = XV -G/2
  18. 180  IF X <139  THEN XV = XV +G/2
  19. 190  RETURN 
  20. 200  REM ---MAIN LOOP
  21. 210  REM ---READ THE KEYBOARD
  22. 220 I =  PEEK( -16384): POKE  -16368,0: IF I <127  THEN I = I1
  23. 230 I1 = I:ZZ = 0: IF FU < = 0  THEN I = 150
  24. 240  IF I = 155  AND EF = 1  THEN FU = FU -50:EC = 20:EF = 0:I1 = 0
  25. 250  IF I = 201  THEN YV = YV -C:FU = FU -CH:ZZ = 1
  26. 260  IF I = 202  THEN XV = XV -G:FU = FU -CH:ZZ = 1
  27. 270  IF I = 204  THEN XV = XV +G:FU = FU -CH:ZZ = 1
  28. 280  IF I = 172  THEN YV = YV +C:FU = FU -CH:ZZ = 1
  29. 290  IF I = 141  THEN  GOSUB 140:FU = FU -(2 *CH):ZZ = 1
  30. 300  REM ---INCREMENT VARIABLES
  31. 310 YV = YV +G
  32. 320 X1 = X:Y1 = Y:X = X +XV:Y = Y +YV
  33. 330  REM ---MAKE ENGINE SOUND
  34. 340  IF ZZ  THEN  POKE 6,50: POKE 7,20: CALL 768
  35. 350  REM ---PRINT OUT STATUS
  36. 360  VTAB 21: HTAB 8: PRINT  INT(152 -Y);"      ";: HTAB 33: PRINT  -YV;: CALL  -868
  37. 370  VTAB 23: HTAB 8: PRINT FU;"     ";: HTAB 33: PRINT  INT(XV);: CALL  -868
  38. 380  REM ---IS LANDER POSITION LEGAL?
  39. 390  IF X < = 5  THEN X = 5:XV =  -XV
  40. 400  IF X > = 274  THEN X = 274:XV =  -XV
  41. 410  IF Y < = 4  THEN Y = 4:YV =  -YV
  42. 420  REM ---DRAW THE LANDER
  43. 430  XDRAW SH AT X1,Y1
  44. 440  IF I = 160  THEN  GOSUB 960
  45. 450  XDRAW SH AT X,Y
  46. 460  REM ---DID LANDER DOCK OR LAND?
  47. 470  IF X >125  AND X <155  AND Y < = 9  THEN 810
  48. 480  IF Y > = 152  THEN  GOTO 840
  49. 490  REM ---MOVE THE ALIEN
  50. 500 A1 = A:B1 = B
  51. 510  IF EC >0  THEN EC = EC -1: GOTO 570
  52. 520  IF A >X  THEN A = A -AC
  53. 530  IF A <X  THEN A = A +AC
  54. 540  IF Y <B  THEN B = B -AC
  55. 550  IF Y >B  THEN B = B +AC
  56. 560  REM ---DRAW THE ALIEN
  57. 570  XDRAW 2 AT A1,B1
  58. 580  XDRAW 2 AT A,B
  59. 590  REM ---IS ALIEN CLOSE TO LANDER?
  60. 600  IF (X -A <RA  AND X -A > -RA)  AND (Y -B <RA  AND Y -B > -RA)  THEN 640
  61. 610  GOTO 220
  62. 620  REM ---END OF MAIN LOOP
  63. 630  REM ---ROUTINE TO CRASH LANDER
  64. 640  XDRAW SH AT X,Y: XDRAW 2 AT A,B
  65. 650  POKE 6,255: POKE 7,5
  66. 660  FOR ZZ = 1 TO 8
  67. 670  FOR YY = 0 TO 48  STEP 16
  68. 680  ROT= YY
  69. 690  XDRAW 6 AT X,Y
  70. 700  CALL 768
  71. 710  NEXT 
  72. 720  NEXT 
  73. 730  HOME : VTAB 22: HTAB 17: PRINT "YOU LOSE !": FOR ZZ = 1 TO 1000: NEXT : GOTO 930
  74. 740  REM ---ROUTINE FOR PLAYER WINNING
  75. 750  POKE 7,30
  76. 760  FOR ZZ = 1 TO 40
  77. 770  POKE 6,ZZ: CALL 768
  78. 780  NEXT 
  79. 790  INVERSE : HOME : VTAB 22: HTAB 17: PRINT "YOU WIN!": NORMAL : GOTO 930
  80. 800  REM ---ROUTINE TO CHECK IF PLAYER DOCKED
  81. 810  IF (YV < -1.5  OR X <137  OR X >143  OR FLG = 0)  THEN 640
  82. 820  GOTO 750
  83. 830  REM ---ROUTINE TO CHECK IF PLAYER LANDED
  84. 840  IF YV >1  OR  ABS(XV) >2  OR SH < >1  THEN  GOTO 640
  85. 850  VTAB 22: HTAB 10: PRINT "LANDING ACCOMPLISHED";: POKE 7,30: FOR ZZ = 1 TO 60  STEP 2: POKE 6,ZZ: CALL 768: POKE 6,ZZ +100: CALL 768: NEXT : VTAB 22: HTAB 10: PRINT "                     ";
  86. 860 XV = 0
  87. 870 FLG = 1:YV =  -4:SH = 3
  88. 880  XDRAW 1 AT X,Y
  89. 890  XDRAW SH AT X,Y -4: XDRAW 4 AT X,Y -1:Y = Y -4
  90. 900 I = 201
  91. 910  GOTO 250
  92. 920  REM ---ROUTINE TO SEE IF PLAYER WANTS TO PLAY AGAIN
  93. 930  VTAB 24: HTAB 5: PRINT "Would you like to play again?";: GOSUB 1030: IF I < >206  THEN 110
  94. 940  TEXT : HOME : NORMAL : POKE 216,0: POKE  -16368,0: END 
  95. 950  REM ---HYPERSPACE ROUTINE
  96. 960  IF  RND(1) <.20  THEN  XDRAW SH AT X,Y: GOTO 640
  97. 970 X =  RND(1) *250 +10:Y =  RND(1) *140 +10
  98. 980  POKE  -16368,0
  99. 990  POKE 7,20: FOR ZZ = 40 TO 1  STEP  -1: POKE 6,ZZ:: CALL 768: NEXT 
  100. 1000 FU = FU -50:I1 = 0
  101. 1010  RETURN 
  102. 1020  REM ---ROUTINE USED TO CHECK IF A KEY HAS BEEN PRESSED
  103. 1030  POKE  -16368,0
  104. 1040 I =  PEEK( -16384)
  105. 1050  IF I < = 127  THEN 1040
  106. 1060  HOME 
  107. 1070  RETURN 
  108. 1080  REM --------TITLES
  109. 1090  RESTORE : TEXT : HOME : NORMAL : VTAB 4: HTAB 14: INVERSE : PRINT "LUNAR LANDER"
  110. 1100  NORMAL : VTAB 6: HTAB (12): PRINT "by Brent Iverson": VTAB 10: HTAB 9: PRINT "Copyright (C) 1990 by": VTAB 11: HTAB 9: PRINT "MindCraft Publ. Corp."
  111. 1110 : VTAB 20: PRINT  SPC( 6)"<PRESS ANY KEY TO CONTINUE>":
  112. 1120  GOSUB 1030
  113. 1130  HOME 
  114. 1140  POKE  -16368,0
  115. 1150 : VTAB 4: PRINT "DIFFICULTY LEVEL (1=EASY, 2=HARD): ";: GET A$
  116. 1160 AC =  ASC(A$) -48: IF AC <1  OR AC >2  THEN 1130
  117. 1170  RETURN 
  118. 1180  REM ---POKE IN SOUND ROUTINE
  119. 1190  FOR ZZ = 768 TO 781: READ YY: POKE ZZ,YY: NEXT 
  120. 1200  DATA   166,7,164,6,173,48,192
  121. 1210  DATA   136,208,253,202,208,245,96
  122. 1220  REM 
  123. 1230  RETURN 
  124. 1240  REM ---SET UP HI-RES SCREEN, INITIALIZE VARIABLES, ETC.
  125. 1250  HGR : HCOLOR= 1
  126. 1260 X = 140:Y = 11:A =  RND(1) *279:B = 159:YV = 2
  127. 1270 XV = 0:YV = 0
  128. 1280  ROT= 0: SCALE= 1
  129. 1290 C = .5:G = .25:RA = 10:FLG = 0:FU = 500:CH = 1:SH = 1:I1 = 0
  130. 1300 EF = 1:EC = 0
  131. 1310  HPLOT 0,159 TO 279,159
  132. 1320  FOR ZZ = 1 TO 100: HCOLOR=  RND(1) *7: HPLOT  RND(1) *279, RND(1) *159: NEXT 
  133. 1330  HCOLOR= 3
  134. 1340 X1 = X:Y1 = Y: XDRAW SH AT X1,Y1
  135. 1350  DRAW 5 AT 140,0
  136. 1360  XDRAW 2 AT A,B
  137. 1370  VTAB 21: HTAB 1: PRINT "HEIGHT:"; SPC( 9);"VERTICAL VEL.  :";
  138. 1380  VTAB 23: HTAB 1: PRINT "FUEL  :"; SPC( 9);"HORIZONTAL VEL.:";
  139. 1390  POKE  -16368,0
  140. 1400  RETURN