home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib31b.dsk / BARRICADE.bas next >
BASIC Source File  |  2023-02-26  |  13KB  |  327 lines

  1. 10  REM **********************
  2. 20  REM *      BARRICADE     *
  3. 30  REM *     BY JIM GANZ    *
  4. 40  REM * COPYRIGHT (C) 1987 *
  5. 50  REM * BY MICROSPARC, INC *
  6. 60  REM * CONCORD, MA  01742 *
  7. 70  REM **********************
  8. 90 EF = 1: ONERR  GOTO 3260
  9. 100  GOTO 130
  10. 110  COLOR= WHITE: CALL DC: CALL FLIP: COLOR= BLACK: CALL DC: RETURN 
  11. 120  COLOR= WHITE: CALL DC: COLOR= C: CALL DB: CALL FLIP: COLOR= BLACK: CALL DC: CALL DB: RETURN 
  12. 130  IF  PEEK(104) < >12  OR  PEEK(3072)  THEN  TEXT : HOME : VTAB 12: PRINT "LOADING BARRICADE": POKE 104,12: POKE 3072,0: PRINT  CHR$(4)"RUNBARRICADE"
  13. 140  REM 
  14. 150  REM   +------------------+
  15. 160  REM   !  INITIALIZATION  |
  16. 170  REM   +------------------+
  17. 180  REM 
  18. 190  TEXT : HOME 
  19. 200  DATA 173,48,192,136,208,5,206,1,3,240,9,202,208,245,174,0,3,76,2,3,96
  20. 210  RESTORE : FOR X = 770 TO 790
  21. 220  READ Y: POKE X,Y: NEXT 
  22. 230 CLAW = 24578:FLIP = 24596
  23. 240 DC = 24982:DB = 24934
  24. 250 BC = 6:XP = 24576:YP = 24577
  25. 260 WHITE = 15:BLACK = 0
  26. 270 PTCH = 768:DUR = 769:TNE = 770
  27. 280 KB =  -16384:CB =  -16368
  28. 290 CH = 24714:S$ =  CHR$(32)
  29. 300 C(1) = 4:C(2) = 12:C(3) = 14
  30. 310 P1 =  -16300:NUM = 28
  31. 320 X =  RND( - PEEK(78) - PEEK(79) *256)
  32. 330  PRINT  CHR$(4)"BLOADCLAW"
  33. 340 EF = 2: POKE XP,31: POKE YP,8
  34. 350  GOSUB 1840
  35. 360  GOSUB 1530
  36. 370 P =  INT(2 * RND(1)) +1
  37. 380  IF P$(2) = "APPLE"  THEN P = 1
  38. 390  VTAB 22 +P: HTAB 12 - LEN(P$(P)): INVERSE 
  39. 400  PRINT P$(P);: NORMAL 
  40. 410  REM 
  41. 420  REM +---------------------+
  42. 430  REM ! DROP A RANDOM BLOCK !
  43. 440  REM +---------------------+
  44. 450  REM 
  45. 460 G =  RND(1)
  46. 470 B = 1: IF G <.85  THEN 580
  47. 480 X =  INT(7 * RND(1)) *4 +1
  48. 490  COLOR= C(3):Y = 2
  49. 500  FOR A = 0 TO 2: HLIN X,X +2 AT A +2: NEXT 
  50. 510  COLOR= BLACK: HLIN X,X +2 AT Y -1
  51. 520  COLOR= C(3): HLIN X,X +2 AT Y +2
  52. 530  POKE PTCH,X *6: POKE DUR,2: CALL TNE
  53. 540  IF ( SCRN( X,Y +3)  OR  SCRN( X +2,Y +3))  AND   NOT  SCRN( X +1,Y +3)  THEN 570
  54. 550 B =   NOT  SCRN( X +1,Y +3)
  55. 560 Y = Y +1: GOTO 510
  56. 570 NUM = NUM +B
  57. 580  IF P = 2  AND P$(2) = "APPLE"  THEN  GOSUB 2400: GOTO 690
  58. 590  REM 
  59. 600  REM  +-------------------+
  60. 610  REM  !   INPUT ROUTINE   !
  61. 620  REM  +-------------------+
  62. 630  REM 
  63. 640  CALL FLIP
  64. 650  COLOR= BLACK: CALL DC
  65. 660  POKE P1,0
  66. 670  IF I$ = "K"  OR I$ =  CHR$(107)  THEN 860
  67. 680  CALL CLAW
  68. 690 C =  PEEK(BC)
  69. 700 X =  PEEK(XP) +1
  70. 710 Y =  PEEK(YP) +2
  71. 720  FOR A = Y TO 17
  72. 730  COLOR= BLACK: HLIN X,X +2 AT A
  73. 740  COLOR= C: HLIN X,X +2 AT A +3
  74. 750  POKE PTCH,A *6: POKE DUR,2: CALL TNE
  75. 760  NEXT : COLOR= BLACK
  76. 770  FOR A = 18 TO 20
  77. 780  HLIN X,X +2 AT A: NEXT 
  78. 790  POKE PTCH,255: POKE DUR,7: CALL TNE
  79. 800 NUM = NUM -1: GOTO 1060
  80. 810  REM 
  81. 820  REM  +------------------+
  82. 830  REM  !  KEYBOARD INPUT  !
  83. 840  REM  +------------------+
  84. 850  REM 
  85. 860  POKE CB,0
  86. 870  POKE 24903,96
  87. 880  POKE BC,0
  88. 890 X =  PEEK(XP):Y =  PEEK(YP):K =  PEEK(KB)
  89. 900  IF K = 141  THEN  GOSUB 970
  90. 910 Y = Y -(Y >1) *(K = 201) +(Y <35) *(K = 205)
  91. 920 X = X -(X >0) *(K = 202) +(X <31) *(K = 203)
  92. 930  COLOR= BLACK: CALL DC
  93. 940  CALL DB -31 *  NOT  PEEK(BC)
  94. 950  POKE XP,X: POKE YP,Y
  95. 960  CALL CH: GOTO 890
  96. 970  IF  PEEK(XP) <29  OR   NOT  PEEK(BC)  THEN  RETURN 
  97. 980  POP : POKE 24903,173
  98. 990  POKE CB,0: POKE P1,0
  99. 1000  GOTO 690
  100. 1010  REM 
  101. 1020  REM  +------------------+
  102. 1030  REM  !   SCORE BLOCK    !
  103. 1040  REM  +------------------+
  104. 1050  REM 
  105. 1060 SC = 10 *(C = C(1)) -10 *(C = C(2)) + INT(2 * RND(1)) *(C = C(3))
  106. 1070  IF SC <0  OR SC >1  THEN 1090
  107. 1080 SC =  INT(5 * RND(1) +1) *10 *  NOT SC + INT(5 * RND(1) +1) *( -10) *SC
  108. 1090 P(P) = P(P) +SC
  109. 1100  FLASH : VTAB 23: HTAB 32
  110. 1110  IF SC >0  THEN  PRINT " +";
  111. 1120  IF SC <0  THEN  PRINT " -";
  112. 1130  PRINT  ABS(SC)S$: NORMAL 
  113. 1140  COLOR= C -2 *(C = 14  AND SC <0) -10 *(C = 14  AND SC >0)
  114. 1150  FOR X = 29 TO 37: VLIN 21,35 AT X: NEXT 
  115. 1160 T = 100 *(SC >0): POKE PTCH,T: FOR X = 1 TO 6: POKE DUR,50: CALL TNE: NEXT 
  116. 1170  COLOR= 15: FOR X = 29 TO 37: VLIN 21,35 AT X: NEXT 
  117. 1180  VTAB 23: HTAB 32: PRINT  SPC( 8)
  118. 1190  HTAB 20: IF P(1) <0  THEN  PRINT "-";
  119. 1200  IF   NOT P(1)  THEN  PRINT S$;
  120. 1210  IF P(1) >0  THEN  PRINT "+";
  121. 1220  PRINT  ABS(P(1)) SPC( 3): PRINT 
  122. 1230  HTAB 20: IF P(2) <0  THEN  PRINT "-";
  123. 1240  IF   NOT P(2)  THEN  PRINT S$;
  124. 1250  IF P(2) >0  THEN  PRINT "+";
  125. 1260  PRINT  ABS(P(2)) SPC( 3)
  126. 1270  IF   NOT NUM  THEN 1360
  127. 1280  VTAB 22 +P: HTAB 12 - LEN(P$(P)): PRINT P$(P);
  128. 1290 P = (P = 2) +2 *(P = 1)
  129. 1300  GOTO 390
  130. 1310  REM 
  131. 1320  REM  +-----------------+
  132. 1330  REM  !   END OF GAME   !
  133. 1340  REM  +-----------------+
  134. 1350  REM 
  135. 1360  CALL  -912: CALL  -912
  136. 1370  VTAB 22: HTAB 29: FLASH : PRINT " GAME OVER ": NORMAL 
  137. 1380  PRINT " GAME OVER ": NORMAL 
  138. 1390  CALL  -198: CALL  -198
  139. 1400  VTAB 23: IF P(1) < >P(2)  THEN  PRINT "THE WINNER IS ";
  140. 1410  IF P(1) >P(2)  THEN  PRINT P$(1)"!"
  141. 1420  IF P(2) >P(1)  THEN  PRINT P$(2)"!"
  142. 1430  IF P(1) = P(2)  THEN  PRINT "A TIE GAME..."
  143. 1440  INPUT "--DO YOU WISH TO PLAY AGAIN? ";YN$
  144. 1450 YN$ =  LEFT$(YN$,1): IF YN$ < >"Y"  AND YN$ < >"N"  AND YN$ < > CHR$(121)  AND YN$ < > CHR$(110)  THEN 1440
  145. 1460  IF YN$ = "N"  OR YN$ =  CHR$(110)  THEN  TEXT : HOME : POKE 104,8: POKE 103,1: POKE 2048,0: NEW : REM RESET POINTERS
  146. 1470  RUN 
  147. 1480  REM 
  148. 1490  REM   +-----------------+
  149. 1500  REM   !   DRAW SCREEN   !
  150. 1510  REM   +-----------------+
  151. 1520  REM 
  152. 1530  HOME : GR 
  153. 1540  COLOR= 13: HLIN 0,39 AT 0
  154. 1550  HLIN 0,1 AT 35: FOR X = 3 TO 29  STEP 4: HLIN X,X +2 AT 35: NEXT : HLIN 38,39 AT 35
  155. 1560  HLIN 0,39 AT 36
  156. 1570  FOR Y = 37 TO 39: HLIN 0,24 AT Y: NEXT 
  157. 1580  COLOR= 15
  158. 1590  FOR X = 29 TO 37: VLIN 21,35 AT X: NEXT 
  159. 1600 X = 0
  160. 1610 K = 6:M = 34: FOR G = 0 TO 6: FOR T = 0 TO K
  161. 1620 C = C( INT(2 * RND(1)) +1)
  162. 1630 X = X +4: IF   NOT  INT(30 * RND(1))  THEN C = C(3)
  163. 1640  COLOR= C: FOR Y = 0 TO 2: HLIN X -3,X -1 AT M -Y: NEXT 
  164. 1650  POKE PTCH,X *4: POKE DUR,4: CALL TNE
  165. 1660  NEXT 
  166. 1670 K = K -1:M = M -3:X1 = X1 +2:X = X1
  167. 1680  NEXT 
  168. 1690  VTAB 21
  169. 1700  HTAB 10: PRINT "SCOREBOARD";
  170. 1710  HTAB 27: PRINT "+10  -10  ???"
  171. 1720  HTAB 10: PRINT "----------": REM 10 -'S
  172. 1730  COLOR= C(1): HLIN 26,28 AT 38: HLIN 26,28 AT 39
  173. 1740  COLOR= C(2): HLIN 31,33 AT 38: HLIN 31,33 AT 39
  174. 1750  COLOR= C(3): HLIN 36,38 AT 38: HLIN 36,38 AT 39
  175. 1760  VTAB 23: HTAB 12 - LEN(P$(1)): PRINT P$(1)".......  0": REM 7 PERIODS
  176. 1770  HTAB 12 - LEN(P$(2)): PRINT P$(2)".......  0";: REM 7 PERIODS
  177. 1780  CALL FLIP: POKE P1,0: RETURN 
  178. 1790  REM 
  179. 1800  REM  +------------------+
  180. 1810  REM  !   INTRODUCTION   !
  181. 1820  REM  +------------------+
  182. 1830  REM 
  183. 1840  INVERSE 
  184. 1850  HTAB 24: PRINT  SPC( 3): FOR X = 1 TO 3: HTAB 25: PRINT S$: NEXT 
  185. 1860  HTAB 23: PRINT  SPC( 5): PRINT : HTAB 23: PRINT S$;: HTAB 27: PRINT S$
  186. 1870  VTAB 13: FOR X = 1 TO 2: HTAB 32: PRINT S$;: HTAB 36: PRINT S$: NEXT 
  187. 1880  HTAB 32: PRINT  SPC( 5): PRINT 
  188. 1890 HT = 15:T =  -1: VTAB 4
  189. 1900  FOR X = 1 TO 6
  190. 1910 T = T +2:HT = HT -2
  191. 1920  HTAB HT: NORMAL : FOR M = 1 TO T: PRINT "//";: NEXT : PRINT 
  192. 1930  HTAB HT: FOR M = 1 TO T: INVERSE : PRINT S$;: NORMAL : PRINT "/";: NEXT 
  193. 1940  PRINT : NEXT : INVERSE 
  194. 1950  VTAB 7: HTAB 26: PRINT  SPC( 11): PRINT : HTAB 26: PRINT " BARRICADE ": HTAB 26: PRINT  SPC( 11): PRINT 
  195. 1960  VTAB 18: HTAB 2: PRINT "COPYRIGHT (C) 1987 BY MICROSPARC, INC": NORMAL 
  196. 1970  FOR X = 2 TO 39: VTAB 17: HTAB X: PRINT "-": PRINT : HTAB 41 -X: PRINT "-": NEXT 
  197. 1980  VTAB 11: HTAB 26: PRINT "BY JIM GANZ"
  198. 1990  POKE 34,19
  199. 2000  VTAB 21: HTAB 3: INPUT "WOULD YOU LIKE INSTRUCTIONS (Y/N)? ";YN$
  200. 2010 YN$ =  LEFT$(YN$,1)
  201. 2020  IF YN$ < >"Y"  AND YN$ < >"N"  AND YN$ < > CHR$(110)  AND YN$ < > CHR$(121)  THEN 2000
  202. 2030  IF YN$ = "N"  OR YN$ =  CHR$(110)  THEN  HOME : PRINT : GOTO 2260
  203. 2040  TEXT : HOME 
  204. 2050  PRINT "'BARRICADE' IS A GAME BOTH OF LUCK AND": PRINT 
  205. 2060  PRINT "STRATEGY. PLAYERS TAKE TURNS REMOVING": PRINT 
  206. 2070  PRINT "COLORED BLOCKS FROM A BARRICADE OF 28": PRINT 
  207. 2080  PRINT "BLOCKS. A CLAW IS MANEUVERED WITH EITHER"
  208. 2090  PRINT "THE HAND CONTROLLER(S) OR THE I,J,K, AND"
  209. 2100  PRINT "M KEYS. WHEN THE CLAW IS POSITIONED": PRINT 
  210. 2110  PRINT "AROUND A COLORED BLOCK, IT WILL AUTOMAT-"
  211. 2120  PRINT "ICALLY 'GRAB' THAT BLOCK. THE BLOCK IS": PRINT 
  212. 2130  PRINT "THEN CARRIED TO THE RIGHT SIDE OF THE": PRINT 
  213. 2140  PRINT "SCREEN AND RELEASED INTO A RECEPTACLE BY"
  214. 2150  PRINT "PRESSING GAME BUTTON (0) OR <RETURN>."
  215. 2160  VTAB 24: HTAB 8: PRINT "PRESS ";: INVERSE : PRINT "RETURN";: NORMAL : INPUT " TO CONTINUE ";YN$: HOME 
  216. 2170  PRINT "SCORING IS BASED UPON COLOR:": PRINT : INVERSE 
  217. 2180  HTAB 4: PRINT  SPC( 19): PRINT 
  218. 2190  HTAB 4: PRINT " DARK GREEN  = +10 "
  219. 2200  HTAB 4: PRINT " MEDIUM GREEN= -10 "
  220. 2210  HTAB 4: PRINT " LIGHT GREEN = ??? "
  221. 2220  HTAB 4: PRINT  SPC( 19): PRINT : PRINT : NORMAL 
  222. 2230  PRINT "WHEN ALL BLOCKS HAVE BEEN RETRIEVED, THE"
  223. 2240  PRINT "PLAYER WITH THE HIGHEST SCORE WINS!"
  224. 2250  VTAB 14
  225. 2260  INPUT "DO YOU WISH (P)ADDLE OR (K)EYBOARD      CONTROLS? ";I$: PRINT : IF I$ < >"P"  AND I$ < >"K"  AND I$ < > CHR$(107)  AND I$ < > CHR$(112)  THEN 2260: REM 6 SPACES
  226. 2270  INPUT "ENTER THE NAME OF PLAYER #1: ";P$(1)
  227. 2280  PRINT 
  228. 2290  PRINT "IF YOU WISH TO PLAY AGAINST THE COMPUTERTHEN ENTER 'APPLE' AS PLAYER #2."
  229. 2300  PRINT 
  230. 2310  INPUT "ENTER THE NAME OF PLAYER #2: ";P$(2)
  231. 2320 P$(1) =  LEFT$(P$(1),8)
  232. 2330 P$(2) =  LEFT$(P$(2),8)
  233. 2340  FOR I = 1 TO 2:XP$ = "": FOR J = 1 TO  LEN(P$(I)):XX =  ASC( MID$ (P$(I),J,1)):XP$ = XP$ + CHR$(XX -32 *(XX >96  AND XX <123)): NEXT J:P$(I) = XP$: NEXT I: TEXT : RETURN 
  234. 2350  REM 
  235. 2360  REM   +------------------+
  236. 2370  REM   !   APPLE'S TURN   !
  237. 2380  REM   +------------------+
  238. 2390  REM 
  239. 2400  VTAB 24: HTAB 31: FLASH : PRINT "THINKING";: NORMAL 
  240. 2410  FOR X = 1 TO 7:VL(X) = 0:AX(X) = 0:AY(X) = 0
  241. 2420  NEXT :NM = 0:FG = 0
  242. 2430  REM FIND TOTAL FREE
  243. 2440  FOR X = 2 TO 26  STEP 2
  244. 2450  IF   NOT  SCRN( X,34)  AND   NOT  SCRN( X,31)  THEN  NEXT 
  245. 2460  FOR Y = 7 TO 36
  246. 2470  COLOR= 9 *(X < >28)
  247. 2480  PLOT X,Y -1: CALL FLIP: COLOR= BLACK: PLOT X,Y -1
  248. 2490  IF  SCRN( X,Y)  THEN 2520
  249. 2500  IF X = 28  THEN 2550
  250. 2510  NEXT : NEXT : GOTO 2550
  251. 2520  IF   NOT  SCRN( X -1,Y -1)  AND   NOT  SCRN( X +1,Y -1)  THEN 2540
  252. 2530 Y = 36: GOTO 2500
  253. 2540 NM = NM +1:AX(NM) = X:AY(NM) = Y:Y = 36: GOTO 2500
  254. 2550  REM EVALUATE EACH BLOCK
  255. 2560  FOR T = 1 TO NM
  256. 2570 X = AX(T):Y = AY(T)
  257. 2580 C =  SCRN( X,Y)
  258. 2590 C1 =  SCRN( X -1,Y +3):C1 = C1 -13 *(C1 = 13)
  259. 2600 C2 =  SCRN( X +1,Y +3):C2 = C2 -13 *(C2 = 13)
  260. 2610 VL(T) = VL(T) +4 *(C = C(1)) +2 *(C = C(3)) -4 *(C = C(2))
  261. 2620  IF X -3 > -1  THEN 2650
  262. 2630 VL(T) = VL(T) +2 *(C = C(1)  AND C2 = C(1)  AND  SCRN( X +3,Y))
  263. 2640  GOTO 2660
  264. 2650 VL(T) = VL(T) +2 *(C = C(1)  AND C2 = C(1)  AND  SCRN( X -3,Y)  AND  SCRN( X +3,Y))
  265. 2660 VL(T) = VL(T) -2 *(C1 < >C(1)  AND C2 = C(1)  AND   NOT  SCRN( X +3,Y))
  266. 2670  IF X = 2  THEN 2690
  267. 2680  IF (C1 = C(1)  AND C2 < >C(1)  AND   NOT  SCRN( X -3,Y))  OR (C1 < >C(1)  AND C2 = C(1)  AND   NOT  SCRN( X +3,Y))  THEN VL(T) = VL(T) -2
  268. 2690 VL(T) = VL(T) +(C = C(2)  AND C1 = C(2)  AND C2 = C(1)  AND  SCRN( X +3,Y))
  269. 2700  IF X -3 > -1  THEN 2720
  270. 2710 VL(T) = VL(T) -2 *(C = C(2)  AND C1 = C(1)  AND C2 = C(2)  AND   NOT  SCRN( X +3,Y)): GOTO 2730
  271. 2720 VL(T) = VL(T) -2 *(C = C(2)  AND C1 = C(1)  AND C2 = C(2)  AND  SCRN( X -3,Y)  AND   NOT  SCRN( X +3,Y))
  272. 2730  IF X = 2  THEN 2760
  273. 2740 VL(T) = VL(T) +2 *(C = C(2)  AND C1 = C(1)  AND C2 = C(2)  AND  SCRN( X -3,Y))
  274. 2750 VL(T) = VL(T) -(C1 = C(1)  AND C2 = C(1)  AND  SCRN( X -3,Y)  AND   NOT  SCRN( X +3,Y))
  275. 2760 VL(T) = VL(T) +2 *(C = C(2)  AND C1 = C(2)  AND C2 = C(1)  AND  SCRN( X +3,Y))
  276. 2770  IF X = 2  THEN 2790
  277. 2780 VL(T) = VL(T) -(C1 = C(1)  AND C2 = C(1)  AND  SCRN( X +3,Y) < >15  AND  SCRN( X +3,Y)  AND   NOT  SCRN( X -3,Y))
  278. 2790 VL(T) = VL(T) -2 *(C = C(2)  AND C1 = C(3)  AND C2 = C(1)  AND  SCRN( X +3,Y))
  279. 2800  IF X = 2  THEN 2830
  280. 2810 VL(T) = VL(T) -2 *(C = C(2)  AND C1 = C(1)  AND C2 = C(3)  AND  SCRN( X -3,Y))
  281. 2820  IF (C1 = C(3)  AND C2 = C(1))  OR (C1 = C(1)  AND C2 = C(3))  AND (  NOT  SCRN( X -3,Y)  AND   NOT  SCRN( X +3,Y))  OR ( SCRN( X -3,Y)  AND  SCRN( X +3,Y))  THEN VL(T) = VL(T) +1
  282. 2830 VL(T) = VL(T) +(C = C(3)  AND P(2) -P(1) >50)
  283. 2840 VL(T) = VL(T) -(C = C(3)  AND P(2) -P(1) <60)
  284. 2850 VL(T) = VL(T) +(C = C(3)  AND P(1) -P(2) >30)
  285. 2860 VL(T) = VL(T) -(C = C(2)  AND C1 = C(2)  AND C2 = C(3)  AND   NOT  SCRN( X +3,Y))
  286. 2870 VL(T) = VL(T) +15 *(C = C(3)  AND NUM <5  AND P(1) -P(2) >10)
  287. 2880 VL(T) = VL(T) +(C = C(3)  AND NUM <10)
  288. 2890  NEXT 
  289. 2900  REM DETERMINE WHICH BLOCK IS "WORTH" THE MOST
  290. 2910  FOR T = 1 TO NM
  291. 2920 VL = VL(T)
  292. 2930  FOR TI = 1 TO NM
  293. 2940  IF VL <VL(TI)  THEN FG = 1
  294. 2950  NEXT 
  295. 2960  IF FG  THEN 2980
  296. 2970 FG = 0:F1 = T
  297. 2980 FG = 0: NEXT 
  298. 2990 AX = AX(F1):AY = AY(F1):C =  SCRN( AX,AY)
  299. 3000  POKE P1,0
  300. 3010  VTAB 24: HTAB 31: PRINT  SPC( 8)
  301. 3020  CALL  -198
  302. 3030 X =  PEEK(XP):OX = X
  303. 3040 Y =  PEEK(YP):OY = Y
  304. 3050  REM MANIPULATE CLAW
  305. 3060  REM MOVE UP
  306. 3070  FOR A = Y TO 3  STEP  -1
  307. 3080  POKE YP,A: GOSUB 110: NEXT 
  308. 3090  REM MOVE LEFT
  309. 3100  FOR A = X TO AX -2  STEP  -1
  310. 3110  POKE XP,A: GOSUB 110: NEXT 
  311. 3120  REM MOVE DOWN
  312. 3130  FOR A = 3 TO AY -2
  313. 3140  POKE YP,A: GOSUB 110: NEXT 
  314. 3150  REM MOVE UP
  315. 3160  FOR A = AY -2 TO 3  STEP  -1
  316. 3170  POKE YP,A: GOSUB 120: NEXT 
  317. 3180  REM MOVE RIGHT
  318. 3190  FOR A =  PEEK(XP) TO OX
  319. 3200  POKE XP,A: GOSUB 120: NEXT 
  320. 3210  REM MOVE DOWN
  321. 3220  FOR A = 3 TO OY
  322. 3230  POKE YP,A: GOSUB 120: NEXT 
  323. 3240  COLOR= WHITE: CALL DC: POKE BC,C: POKE P1,0: RETURN 
  324. 3250  REM  ERROR HANDLER
  325. 3260  HOME : VTAB 12: PRINT "ERROR " PEEK(222)" IN LINE " PEEK(218) +256 * PEEK(219)"."
  326. 3270  VTAB 21: PRINT "<RETURN> TO CONTINUE OR <ESC> TO QUIT";: GET Z$: PRINT : ON Z$ =  CHR$(27) GOTO 3280: ON EF GOTO 100,360
  327. 3280  HOME : END