home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib12.dsk / APPLETRATION.bas < prev    next >
BASIC Source File  |  2023-02-26  |  7KB  |  186 lines

  1. 10  REM  **********************
  2. 11  REM  * APPLETRATION       *
  3. 12  REM  * BY ROB SMYTHE      *
  4. 13  REM  * COPYRIGHT (C) 1982 *
  5. 14  REM  * BY MICRO-SPARC INC *
  6. 15  REM  * LINCOLN, MA. 01773 *
  7. 16  REM  **********************
  8. 17  IF  PEEK(768) + PEEK(769) =  PEEK(770)  THEN 20: REM  INITIALIZE HRCG ON FIRST RUN
  9. 18  GOSUB 10000
  10. 19  POKE 768,1: POKE 769,2: POKE 770,3: REM  SPECIFIC GARBAGE POKED WHERE LINE 10 CAN DETECT IT AND SKIP INITIALIZING AND PICTURE-LOADING ROUTINES
  11. 20  PRINT  CHR$(16); CHR$(11)
  12. 30  HGR : POKE  -16302,0
  13. 40 KB =  -16384: REM  KEYPRESS
  14. 50 G$ =  CHR$(7): REM  BELL
  15. 70  GOSUB 61000: REM  INITIALIZE HRCG CURSOR CONTROLS
  16. 80  DIM SH$(8),SPOT(16)
  17. 97 :
  18. 98  REM  CREATE SHAPE ARRAY
  19. 99 :
  20. 100  FOR I = 1 TO 8:J = 9 *I
  21. 110 SH$(I) = CB$ + CHR$(J +45) + CHR$(J +46) + CHR$(J +47) +CC$ + CHR$(J +48) + CHR$(J +49) + CHR$(J +50) +CC$ + CHR$(J +51) + CHR$(J +52) + CHR$(J +53) +CD$
  22. 115 SH$(I) = CA$ +"1" +SH$(I) +CA$ +"0"
  23. 120  NEXT 
  24. 130 SH$(0) = CB$ +"   " +CC$ +"   " +CC$ +"   " +CD$
  25. 140  GOTO 1000
  26. 147 :
  27. 148  REM  GAME BOARD OUTLINE
  28. 149 :
  29. 150  VTAB 4: FOR I = 1 TO 17: HTAB 12: PRINT CI$"                 "CN$: NEXT 
  30. 160  HCOLOR= 6: FOR I = 0 TO 3
  31. 170  HPLOT 77 +I,24 +I TO 195 -I,24 +I TO 195 -I,160 -I TO 77 +I,160 -I TO 77 +I,24 +I
  32. 180  NEXT 
  33. 190  HPLOT 76,24 TO 76,160: HPLOT 196,24 TO 196,160: HPLOT 75,24 TO 75,160: HPLOT 197,24 TO 197,160
  34. 200  RETURN 
  35. 497 :
  36. 498  REM  DRAW CLOSED DOOR DR
  37. 499 :
  38. 500  HCOLOR= 5: HTAB 1: VTAB 1: PRINT 
  39. 505  ON DR GOTO 510,515,520,525,530,535,540,545,550,555,560,565,570,575,580,585
  40. 510 X = 14:Y = 6:A$ = "A": GOTO 590
  41. 515 X = 18:Y = 6:A$ = "B": GOTO 590
  42. 520 X = 22:Y = 6:A$ = "C": GOTO 590
  43. 525 X = 26:Y = 6:A$ = "D": GOTO 590
  44. 530 X = 14:Y = 10:A$ = "E": GOTO 590
  45. 535 X = 18:Y = 10:A$ = "F": GOTO 590
  46. 540 X = 22:Y = 10:A$ = "G": GOTO 590
  47. 545 X = 26:Y = 10:A$ = "H": GOTO 590
  48. 550 X = 14:Y = 14:A$ = "I": GOTO 590
  49. 555 X = 18:Y = 14:A$ = "J": GOTO 590
  50. 560 X = 22:Y = 14:A$ = "K": GOTO 590
  51. 565 X = 26:Y = 14:A$ = "L": GOTO 590
  52. 570 X = 14:Y = 18:A$ = "M": GOTO 590
  53. 575 X = 18:Y = 18:A$ = "N": GOTO 590
  54. 580 X = 22:Y = 18:A$ = "O": GOTO 590
  55. 585 X = 26:Y = 18:A$ = "P": GOTO 590
  56. 590  FOR I = 0 TO 23
  57. 591 A = (X -2) *7:B = (X +1) *7 -1:C = (Y -2) *8:
  58. 592  HPLOT A,C +I TO B,C +I
  59. 593  NEXT 
  60. 595  HTAB X: VTAB Y: PRINT CK$A$: RETURN 
  61. 597 :
  62. 598  REM  PRINT SHAPE A$ IN OPEN DOOR DR
  63. 599 :
  64. 600 A$ = SH$(SPOT(DR))
  65. 605  ON DR GOTO 610,615,620,625,630,635,640,645,650,655,660,665,670,675,680,685
  66. 610  HTAB 13: VTAB 5: PRINT A$: RETURN 
  67. 615  HTAB 17: VTAB 5: PRINT A$: RETURN 
  68. 620  HTAB 21: VTAB 5: PRINT A$: RETURN 
  69. 625  HTAB 25: VTAB 5: PRINT A$: RETURN 
  70. 630  HTAB 13: VTAB 9: PRINT A$: RETURN 
  71. 635  HTAB 17: VTAB 9: PRINT A$: RETURN 
  72. 640  HTAB 21: VTAB 9: PRINT A$: RETURN 
  73. 645  HTAB 25: VTAB 9: PRINT A$: RETURN 
  74. 650  HTAB 13: VTAB 13: PRINT A$: RETURN 
  75. 655  HTAB 17: VTAB 13: PRINT A$: RETURN 
  76. 660  HTAB 21: VTAB 13: PRINT A$: RETURN 
  77. 665  HTAB 25: VTAB 13: PRINT A$: RETURN 
  78. 670  HTAB 13: VTAB 17: PRINT A$: RETURN 
  79. 675  HTAB 17: VTAB 17: PRINT A$: RETURN 
  80. 680  HTAB 21: VTAB 17: PRINT A$: RETURN 
  81. 685  HTAB 25: VTAB 17: PRINT A$: RETURN 
  82. 995 :
  83. 996  REM  *** MAIN PROGRAM ***
  84. 997 :
  85. 998  REM  CREATE PATTERN
  86. 999 :
  87. 1000  FOR I = 1 TO 8:SPOT(I) = I:SPOT(I +8) = I: NEXT 
  88. 1010  FOR I = 1 TO 16:X =  INT( RND(1) *16 +1)
  89. 1020 A = SPOT(I):SPOT(I) = SPOT(X):SPOT(X) = A
  90. 1030  NEXT I
  91. 1040  PRINT CP$CK$: VTAB 5: INPUT "PLAYER'S NAME: ";N1$
  92. 1045  VTAB 15: PRINT "("CS$"JUST "CK$"RETURN"CL$" IF A ONE PERSON GAME)"
  93. 1050  VTAB 10: PRINT CK$;: INPUT "OTHER PLAYER'S NAME: ";N2$
  94. 1060 NUM = 1: IF N2$ < >""  THEN NUM = 2
  95. 1070  PRINT CP$: VTAB 3: PRINT N1$;: HTAB 31: PRINT N2$
  96. 1080  GOSUB 150: REM  DRAW GAME BOARD
  97. 1085  GOTO 1110: REM  PUT A REM IN FRONT, OR DELETE, IF YOU WISH TO SEE ANSWERS FIRST
  98. 1090  FOR DR = 1 TO 16: GOSUB 600: NEXT 
  99. 1100  VTAB 20: GET A$
  100. 1110  FOR DR = 1 TO 16: GOSUB 500: NEXT 
  101. 1117 :
  102. 1118  REM  START OF GAME
  103. 1119 :
  104. 1120 SC(1) = 0:SC(2) = 0:PLAYER = 1
  105. 1130 PLAYER = 1: IF NUM = 1  THEN 1205
  106. 1140 X =  RND(1): IF X <.5  THEN PLAYER = 2
  107. 1200  GOSUB 1500: REM  ERASE TEXT
  108. 1205  VTAB 8: HTAB 1 +30 *(PLAYER = 2): PRINT "DOOR 1: ";
  109. 1210  GET A$:D1 =  ASC(A$) -64: REM  CONVERT DOOR'S LETTER TO NUMBER
  110. 1217 :
  111. 1218  REM  CHECK IF VALID ENTRY
  112. 1219 :
  113. 1220  IF D1 <0  OR D1 >16  THEN  PRINT G$: GOTO 1205
  114. 1230  IF SPOT(D1) = 0  THEN  PRINT G$: GOTO 1205
  115. 1237 :
  116. 1238  REM  ENTRY ALLOWED
  117. 1239 :
  118. 1240  PRINT A$;:DR = D1: GOSUB 600: REM  OPEN DOOR
  119. 1247 :
  120. 1248  REM  GET AND CHECK SECOND PICK
  121. 1249 :
  122. 1250  VTAB 11: HTAB 1 +30 *(PLAYER = 2): PRINT "DOOR 2: ";
  123. 1260  GET A$:D2 =  ASC(A$) -64
  124. 1270  IF D2 <0  OR D2 >16  OR D2 = D1  THEN  PRINT G$: GOTO 1250
  125. 1280  IF SPOT(D2) = 0  THEN  PRINT G$: GOTO 1250
  126. 1290  PRINT A$:DR = D2: GOSUB 600
  127. 1310  IF SPOT(D1) < >SPOT(D2)  THEN 1380
  128. 1317 :
  129. 1318  REM  IT'S A MATCH
  130. 1319 :
  131. 1320  PRINT G$G$G$: FOR I = 1 TO 2000: NEXT 
  132. 1330 SC(PLAYER) = SC(PLAYER) +1: VTAB 17: HTAB 1 +30 *(PLAYER = 2): PRINT SC(PLAYER)" PAIR";: IF SC(PLAYER) >1  THEN  PRINT "S";
  133. 1340  PRINT : FOR I = 1 TO 1000: NEXT 
  134. 1347 :
  135. 1348  REM  REMOVE PICTURE FROM EACH SPOT
  136. 1349 :
  137. 1350 SPOT(D1) = 0:SPOT(D2) = 0:DR = D1: GOSUB 600:DR = D2: GOSUB 600
  138. 1360  IF SC(1) +SC(2) = 8  THEN 2000: REM  2000 IF GAME OVER
  139. 1370  GOTO 1200: REM  NEXT TURN
  140. 1377 :
  141. 1378  REM  IT'S NOT A MATCH
  142. 1379 :
  143. 1380  FOR I = 1 TO 3000: NEXT 
  144. 1390 DR = D1: GOSUB 500:DR = D2: GOSUB 500: REM  CLOSE THE DOORS
  145. 1400  IF NUM = 1  THEN 1200
  146. 1410 PLAYER = 3 -PLAYER: GOTO 1200: REM  SWITCH PLAYERS
  147. 1497 :
  148. 1498  REM  ERASE PREVIOUS PICKS
  149. 1499 :
  150. 1500  VTAB 8: HTAB 1: PRINT "         ";: HTAB 31: PRINT "         "
  151. 1510  VTAB 11: HTAB 1: PRINT "         ";: HTAB 31: PRINT "         ": RETURN 
  152. 1997 :
  153. 1998  REM  POSTMORTEM
  154. 1999 :
  155. 2000  GOSUB 1500
  156. 2010  HTAB 16: VTAB 22: PRINT "GAME OVER"
  157. 2020  POKE  -16368,0: END 
  158. 9997 :
  159. 9998  REM  INITIALIZE HRCG
  160. 9999 :
  161. 10000  ONERR  GOTO 10130
  162. 10010  TEXT : HOME : HGR :ADRS = 0
  163. 10020  PRINT  CHR$(4);"BLOAD RBOOT": CALL 520
  164. 10030 ADRS =  USR(0),"HRCG"
  165. 10040  POKE 216,0
  166. 10050  IF ADRS <0  THEN ADRS = ADRS +65536
  167. 10060 CS = ADRS -768: HIMEM: CS
  168. 10070 D$ =  CHR$(4)
  169. 10080  PRINT D$;"BLOAD CONC.SET,A";CS
  170. 10090 CH =  INT(CS/256):CL = CS -CH *256
  171. 10100  POKE ADRS +7,CL: POKE ADRS +8,CH: CALL ADRS +3
  172. 10110  RETURN 
  173. 10130  TEXT 
  174. 10140  PRINT "ERROR IN RLOAD OR RBOOT"
  175. 10150  POKE 216,0
  176. 10160  STOP 
  177. 60997 :
  178. 60998  REM  CURSOR CONTROL VARIABLES
  179. 60999 :
  180. 61000 CA$ =  CHR$(1):CB$ =  CHR$(2):CC$ =  CHR$(3):CD$ =  CHR$(4):CE$ =  CHR$(5):CF$ =  CHR$(6):CI$ =  CHR$(9):CK$ =  CHR$(11):CL$ =  CHR$(12):CN$ =  CHR$(14):CO$ =  CHR$(15):CP$ =  CHR$(16):CS$ =  CHR$(19):CT$ =  CHR$(20)
  181. 61010 CV$ =  CHR$(22):CW$ =  CHR$(23):CY$ =  CHR$(25):CZ$ =  CHR$(26)
  182. 61020 P1$ = CO$ +CA$:P2$ = CO$ +CB$:PT$ = CO$ +CT$:PN$ = CO$ +CP$
  183. 61030  PRINT CP$CK$"(JUNIOR) CONCENTRATION"
  184. 61040  HCOLOR= 5: HPLOT 0,9 TO 153,9
  185. 61050  VTAB 10: PRINT CS$"BY "CS$"ROB "CS$"SMYTHE"
  186. 61060  FOR I = 1 TO 3000: NEXT : RETURN