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

  1. 0  HIMEM: 35399
  2. 2  REM  *    SCRAMBLE          *
  3. 3  REM  *  BY DONALD MILLER MD *
  4. 4  REM  *  COPYRIGHT (C) 1982  *
  5. 5  REM  *  BY MICRO-SPARC INC  *
  6. 6  REM  *  LINCOLN, MA. 01773  *
  7. 10  GOTO 420
  8. 20 SN = I
  9. 30  FOR Y = 0 TO YP -SY  STEP SY: FOR X = 0 TO XP -SX  STEP SX: XDRAW SH(SN,D) AT P(SN,0) +X *Z,P(SN,1) +Y *Z:SO =  PEEK(S) + PEEK(S): DRAW SH(SN,D) AT P(SN,0) +(SX +X) *Z,P(SN,1) +(SY +Y) *Z: NEXT : NEXT 
  10. 40 T(0) = BL(0):T(1) = BL(1):BL(0) = P(SN,0):BL(1) = P(SN,1):P(SN,0) = T(0):P(SN,1) = T(1)
  11. 50 NM = NM +1: VTAB 21: HTAB 15: PRINT "   "
  12. 70  VTAB 21: HTAB 24: INVERSE : PRINT "# OF MOVES": NORMAL : VTAB 21: HTAB 35: PRINT NM
  13. 75  POKE 33,23
  14. 80  VTAB 21: HTAB 6: INVERSE : INPUT " MOVE -> ";AN$: NORMAL 
  15. 85  POKE 33,39
  16. 90  IF  LEN(AN$) <1  OR  LEN(AN$) >2  THEN  PRINT B$;: GOTO 70
  17. 100  IF  ASC(AN$) = 90  THEN  TEXT : HOME : END 
  18. 105  IF  ASC(AN$) = 73  THEN  GOSUB 700: POKE  -16297,0: POKE  -16301,0: POKE  -16304,0: HOME : GOTO 70
  19. 110  IF  ASC(AN$) = 81  THEN  HGR : TEXT : HOME : GOTO 510
  20. 120  IF  LEN(AN$) = 2  AND  LEFT$(AN$,1) = "B"  THEN DR$ =  RIGHT$(AN$,1): GOTO 280
  21. 130 SN =  VAL(AN$)
  22. 150  IF SN >NS  THEN  PRINT B$;: GOTO 70
  23. 170  IF BL(1) = P(SN,1)  AND BL(0) -P(SN,0) = XD  THEN XP = XD:YP = 0:SX = XX:SY = 0:Z = 1: GOTO 30
  24. 200  IF BL(1) = P(SN,1)  AND P(SN,0) -BL(0) = XD  THEN XP = XD:YP = 0:SX = XX:SY = 0:Z =  -1: GOTO 30
  25. 230  IF BL(0) = P(SN,0)  AND P(SN,1) -BL(1) = YD  THEN XP = 0:YP = YD:SY = YY:SX = 0:Z =  -1: GOTO 30
  26. 260  IF BL(0) = P(SN,0)  AND BL(1) -P(SN,1) = YD  THEN XP = 0:YP = YD:SY = YY:SX = 0:Z = 1: GOTO 30
  27. 270  PRINT B$;: GOTO 70
  28. 280  FOR I = F *D +W TO NS
  29. 281  ON DR$ = "L" GOTO 330
  30. 282  ON DR$ = "U" GOTO 360
  31. 283  ON DR$ = "D" GOTO 390
  32. 300  IF BL(1) = P(I,1)  AND BL(0) -P(I,0) = XD  THEN XP = XD:YP = 0:SX = XX:SY = 0:Z = 1: GOTO 20
  33. 310  GOTO 400
  34. 330  IF BL(1) = P(I,1)  AND P(I,0) -BL(0) = XD  THEN XP = XD:YP = 0:SX = XX:SY = 0:Z =  -1: GOTO 20
  35. 340  GOTO 400
  36. 360  IF BL(0) = P(I,0)  AND P(I,1) -BL(1) = YD  THEN YP = YD:XP = 0:SY = YY:SX = 0:Z =  -1: GOTO 20
  37. 370  GOTO 400
  38. 390  IF BL(0) = P(I,0)  AND BL(1) -P(I,1) = YD  THEN XP = 0:YP = YD:SY = YY:SX = 0:Z = 1: GOTO 20
  39. 400  NEXT 
  40. 410  PRINT B$;: GOTO 70
  41. 420 W = 1:NS = 15:SY = 0:SX = 0:XS = 110:XE = 158:YS = 50:YE = 89:XD = 16:YD = 13:XP = XD:YP = YD
  42. 430 F = 5:BN = 16:XX = 2:YY = 1.625:S =  -16336:D$ =  CHR$(4):B$ =  CHR$(7)
  43. 440  DIM P(BN,W),X(BN),Y(BN),BL(W),N(NS),T(W),S(BN,W),SH(NS,3)
  44. 450  HGR : TEXT : HOME 
  45. 460  VTAB 6: HTAB 12: INVERSE : PRINT "*** SCRAMBLE ***": VTAB 10: HTAB 19: NORMAL : PRINT "BY": VTAB 14: HTAB 9: PRINT "DONALD W MILLER JR MD": VTAB 16: HTAB 15: PRINT "SEPT, 1981"
  46. 470  POKE 232,72: POKE 233,138
  47. 480  PRINT D$"BLOAD TILES,A$8A48"
  48. 490 I = 0
  49. 500  FOR X = XS TO XE  STEP XD: FOR Y = YS TO YE  STEP YD:I = I +W:X(I) = X:Y(I) = Y: NEXT : NEXT 
  50. 510 BL(0) = 158:BL(1) = 89
  51. 520  FOR N = W TO NS:N(N) = N: NEXT 
  52. 530  FOR I = W TO NS:A =  INT( RND(W) *NS +W):B =  INT( RND(W) *NS +W):T = N(A):N(A) = N(B):N(B) = T: NEXT 
  53. 535  HOME : VTAB 9: HTAB 1: PRINT "DO YOU NEED INSTRUCTIONS ? (Y/N) ";: GET AN$: IF AN$ = "Y"  THEN  GOSUB 700
  54. 540  HOME : VTAB 6: PRINT "WHAT LEVEL OF DIFFICULTY ? ": PRINT : PRINT : PRINT "   1. CHILD'S PLAY": PRINT : PRINT "   2. MODERATELY DIFFICULT": PRINT : PRINT "   3. FOR VERY PATIENT PEOPLE ONLY !"
  55. 560  VTAB 6: HTAB 28: GET D$:D =  VAL(D$): IF D <1  OR D >3  THEN 560
  56. 570  HOME 
  57. 580  FOR I = W TO NS: IF I >F *D  THEN SH(I,D) = BN: GOTO 600
  58. 590 SH(I,D) = I
  59. 600  NEXT 
  60. 610  HGR : SCALE= 1: ROT= 0: HCOLOR= 3
  61. 620 I = 1
  62. 630  FOR X = 5 TO 257  STEP 18:S(I,0) = X:S(I,1) = 20: DRAW SH(I,D) AT X,20:SO =  PEEK(S) + PEEK(S):I = I +1: NEXT 
  63. 640  FOR I = 1 TO 1000: NEXT 
  64. 650  FOR I = W TO NS:P(I,0) = X(N(I)):P(I,1) = Y(N(I)): XDRAW SH(I,D) AT S(I,0),S(I,1): DRAW SH(I,D) AT P(I,0),P(I,1):SO =  PEEK(S) + PEEK(S) + PEEK(S) + PEEK(S): FOR N = 1 TO 50: NEXT : NEXT 
  65. 660  HCOLOR= 1: HPLOT 105,47 TO 175,47 TO 175,102 TO 105,102 TO 105,47: HPLOT 103,46 TO 177,46 TO 177,103 TO 103,103 TO 103,46: HCOLOR= 3
  66. 670  PRINT B$;:NM = 0: GOTO 70
  67. 700  TEXT : HOME : INVERSE : VTAB 1: HTAB 14: PRINT "INSTRUCTIONS": NORMAL 
  68. 702  VTAB 4: HTAB 1: PRINT "1. TO MOVE A NUMBERED TILE, SIMPLY         ENTER THE TILE NUMBER AND PRESS         <RETURN>"
  69. 704  PRINT : PRINT "2. TO MOVE A BLANK TILE, ENTER 'B'..       PLUS.... THE DIRECTION THE BLANK        SHOULD MOVE  ('U' FOR UP, 'D' FOR       DOWN, 'R' FOR RIGHT, AND 'L' FOR        LEFT) AND THEN PRESS <RETURN>"
  70. 706  PRINT : PRINT "3. TO START A NEW PUZZLE, ENTER 'Q'        AND <RETURN>": PRINT : PRINT "4. TO EXIT THE PROGRAM, ENTER 'Z' AND      <RETURN>": PRINT : PRINT "5. TO SEE THESE INSTRUCTIONS, ENTER        'I' AND <RETURN> ANYTIME"
  71. 712  PRINT : PRINT : HTAB 6: PRINT "(PRESS ANY KEY TO CONTINUE)";: GET AN$: RETURN