home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib35b.dsk / FIVER.DICER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  11KB  |  164 lines

  1. 1  REM *********************
  2. 2  REM * FIVER.DICER       *
  3. 3  REM * BY DAVID KALLAS   *
  4. 4  REM * COPYRIGHT  1988   *
  5. 5  REM * MICROSPARC, INC.  *
  6. 6  REM * CONCORD, MA 01742 *
  7. 7  REM *********************
  8. 10  TEXT : HOME : PRINT  CHR$(21): GOTO 130
  9. 20  REM * CENTER TEXT *
  10. 30  HTAB (21 - LEN(X$)/2): PRINT X$: RETURN 
  11. 40  REM * CENTER-OUT WIPE *
  12. 50  FOR X = 1 TO 20: POKE 32,20 -X: POKE 33,2 *X: HOME : NEXT : RETURN 
  13. 60  REM * WAIT FOR KEYPRESS *
  14. 70 X$ = "PRESS RETURN TO CONTINUE"
  15. 80  GOSUB 30: POKE CL,0: WAIT KB,128: RETURN 
  16. 90  REM * GET (Y/N) RESPONSE *
  17. 100  POKE CL,0: GET X$: IF X$ = "Y"  OR X$ = "y"  OR X$ = "N"  OR X$ = "n"  THEN  RETURN 
  18. 110  GOTO 100
  19. 120  REM ** INTRODUCTION **
  20. 130  SPEED= 210: FOR X = 5 TO 25: VTAB 1: HTAB X -4: PRINT " DICER";: HTAB 40 -X: PRINT "FIVER ";: NEXT : SPEED= 255: HTAB 20: PRINT "--": REM MOVING TITLE
  21. 140  VTAB 7:X$ = "A GAME OF LUCK AND SKILL": GOSUB 30:X$ = "IN WHICH YOU MATCH WITS": GOSUB 30:X$ = "WITH YOUR COMPUTER": GOSUB 30
  22. 150  VTAB 12:X$ = "BY DAVID KALLAS": GOSUB 30:X$ = "COPYRIGHT (C) 1988": GOSUB 30:X$ = "MICROSPARC,  INC.": GOSUB 30
  23. 160 KB = 49152: VTAB 23: GOSUB 70: GOTO 1520: REM INIT. VARIABLES
  24. 170  FOR X = 0 TO 12: POKE 1024 +X,32: POKE 1063 -X,32: NEXT : REM DRAW INVERSE LINE AT VTAB 1
  25. 180  POKE 34,1: GOSUB 50:X$ = "PLAY AGAINST COMPUTER?": VTAB 5: GOSUB 30: HTAB 17: PRINT "(Y/N) ";
  26. 190  GOSUB 100: PRINT X$: VTAB 8: IF X$ = "Y"  OR X$ = "y"  THEN  INPUT "ENTER YOUR NAME: ";NM$(1):NM$(0) = "APPLE II":OP = 1: GOTO 210
  27. 200  FOR X = 0 TO 1: PRINT "ENTER NAME OF PLAYER #"X +1;: INPUT ": ";NM$(X): NEXT 
  28. 210  PRINT : PRINT "PLAYER TO GO FIRST? (1 OR 2)": PRINT "1) "NM$(0): PRINT "2) "NM$(1): VTAB  PEEK(37) -2: HTAB 30
  29. 220  GET X$:PL = 0: IF X$ = "1"  THEN PL = 1: GOTO 250
  30. 230  IF X$ < >"2"  THEN 220
  31. 240  REM ** MAIN LOOP **
  32. 250  GOSUB 50:X =  FRE(0):PL =   NOT PL:RD = RD +1: IF RD >26  THEN 1410: REM ONLY 13 ROUNDS PER PLAYER
  33. 260 X$ = NM$(PL) +"'S TURN": VTAB 6: GOSUB 30
  34. 270  FOR X = 0 TO 19: VTAB 3: HTAB X *2 +1: PRINT "+-": VTAB 9: HTAB 39 -X *2: PRINT "-+": NEXT 
  35. 280  VTAB 17: FOR X = 1 TO 6: PRINT "<" CHR$(X +64)"> "SC$(X,PL),"<" CHR$(X +70)"> "SC$(X +6,PL): NEXT : PRINT ,"<M> "SC$(13,PL): VTAB 24: PRINT "PLAYER: "NM$(PL);: REM DRAW SCORECARD
  36. 290  IF PL = 0  AND OP  THEN  VTAB 5: PRINT : CALL  -868:Z = 3: GOSUB 470: GOTO 890: REM COMPUTER'S TURN
  37. 300  REM ** PLAYER'S TURN **
  38. 310  VTAB 6: CALL  -868: VTAB 13: CALL  -868: HTAB 1
  39. 320  GOSUB 470: GOSUB 330: GOSUB 330: GOTO 520: REM ALLOWS FOR 2 RE-ROLLS
  40. 330  VTAB 11:X$ = "ROLL DICE AGAIN?": GOSUB 30: PRINT : HTAB 17: PRINT "(Y/N) ";: GOSUB 100: IF X$ = "N"  OR X$ = "n"  THEN  POP : GOTO 520
  41. 340  REM ** PLAYER RE-ROLL **
  42. 350  VTAB 10: PRINT : PRINT "KEYS 1-5 TOGGLE ";: INVERSE : PRINT "ROLL";: NORMAL : PRINT " / KEEP ": PRINT 
  43. 360  INVERSE : PRINT "INVERSE";: NORMAL : PRINT " #'S INDICATE DICE TO BE ROLLED": PRINT : INVERSE : PRINT "RETURN";: NORMAL : PRINT " RE-ROLLS THE SELECTED DICE"
  44. 370  VTAB 8: FOR X = 0 TO 4: HTAB X *8 +4: PRINT X +1;: NEXT : REM NUMBER THE DICE
  45. 380  POKE CL,0: WAIT KB,128:X =  PEEK(KB) -128: IF X < >13  AND (X <49  OR X >53)  THEN 380: REM ONLY 1,2,3,4,5 OR 'RETURN'
  46. 390  IF X = 13  THEN 410
  47. 400 X = X -49:Y = 1923 +8 *X:X = ( PEEK(Y) <128) *128 +49 +X: POKE Y,X: GOTO 380: REM POKE FLASH/NORMAL TO SCREEN
  48. 410  FOR X = 0 TO 4: IF  PEEK(1923 +8 *X) <128  THEN D(X,0) = 0: REM IF INVERSE THEN RE-ROLL
  49. 420  NEXT : VTAB 7: PRINT : CALL  -868: FOR X = 11 TO 15: VTAB X: CALL  -868: NEXT : REM GET RID OF DIRECTIONS
  50. 430  REM * ERASE UNWANTED DICE *
  51. 440  FOR X = 0 TO 4: IF D(X,0) = 0  THEN  VTAB 5: FOR Y = 1 TO 3: HTAB 8 *X +3: PRINT "   ": NEXT : REM 3 SPACES BETWEEN ""
  52. 450  NEXT 
  53. 460  REM ** ROLL/DRAW/SORT DICE **
  54. 470 SP =  PEEK(241): SPEED= 220: INVERSE : FOR X = 0 TO 4: IF D(X,0) = 0  THEN D(X,0) =  INT( RND(1) *6 +1): FOR Y = 0 TO 9:YY =  PEEK(BZ): NEXT : REM ROLL
  55. 480  POKE 32,X *8 +2: VTAB 5: PRINT DP$(D(X,0)):D(X,1) = D(X,0): NEXT : POKE 32,0: NORMAL : REM DRAW
  56. 490  FOR Y = 0 TO 3: IF D(Y,1) < = D(Y +1,1)  THEN  NEXT : NORMAL : POKE 32,0: POKE 241,SP: RETURN 
  57. 500 X = D(Y,1):D(Y,1) = D(Y +1,1):D(Y +1,1) = X: GOTO 490: REM SORT DICE
  58. 510  REM ** PLAYER'S SCORING **
  59. 520  VTAB 10: PRINT :X$ = "WHICH CATAGORY DO YOU CHOOSE": GOSUB 30: PRINT :X$ = "FOR THIS TURN?": GOSUB 30: PRINT :X$ = "(A-M) ": GOSUB 30
  60. 530  VTAB 15: HTAB 24: GET X$:X =  ASC(X$):X = X -32 *(X >96  AND X <123) -64: IF X <1  OR X >13  THEN 520
  61. 540  IF  RIGHT$(SC$(X,PL),1) < >":"  THEN  VTAB 11:X$ = "CATAGORIES CANNOT BE RE-USED": GOSUB 30: PRINT :X$ = "SELECT ANOTHER": GOSUB 30: GOTO 530
  62. 550 CT = X: REM GET CATAGORY # FOR SCORE-TEST
  63. 560  REM ** SCORING **
  64. 570 SC = 0: IF CT <7  THEN  GOSUB 680: GOTO 590: REM SINGLES COLUMN
  65. 580  ON CT -6 GOSUB 710,710,780,780,780,830,870
  66. 590  IF PL = 0  AND OP = 1  THEN FL(CT) = SC: RETURN : REM FOR COMPUTER'S TURN
  67. 600  REM ** ADD TO SCORECARD **
  68. 610  IF SC <10  THEN SC$(CT,PL) = SC$(CT,PL) +" "
  69. 620 SC$(CT,PL) = SC$(CT,PL) + STR$(SC):T(PL) = T(PL) +SC: REM ADD SCORE TO SCORECARD AND TOTAL
  70. 630  INVERSE : FOR X = 1 TO 2: VTAB 16 +CT -6 *(CT >6): HTAB 5 +16 *(CT >6): PRINT SC$(CT,PL): FOR I = 1 TO 1000: NEXT : REM HIGHLIGHT SELECTION
  71. 640  FOR Y = 11 TO 15: VTAB Y: CALL  -868: NEXT : NORMAL : NEXT : REM RESTORE SELECTION
  72. 650  VTAB 13: GOSUB 70: FOR X = 0 TO 4:D(X,0) = 0: NEXT : REM CLEAR DICE ARRAY
  73. 660  GOTO 250: REM NEXT PLAYER
  74. 670  REM ** SCORING TESTS **
  75. 680  FOR X = 0 TO 4: IF D(X,0) = CT  THEN SC = SC +CT
  76. 690  NEXT : RETURN : REM 1'S TO 6'S
  77. 700  REM  ** LARGE & SMALL RUN **
  78. 710 Y = 3: IF CT = 8  THEN Y = 4: REM SET COUNTER
  79. 720  FOR X = 0 TO 3: IF D(X,1) +1 = D(X +1,1)  THEN Y = Y -1: GOTO 740
  80. 730  IF D(X,1) < >D(X +1,1)  AND (X = 1  OR X = 2)  THEN Y = Y +1: REM NOT IN SEQUENCE
  81. 740  NEXT : IF Y >0  THEN  RETURN : REM  NEITHER RUN
  82. 750 SC = 30: IF CT = 8  THEN SC = 40
  83. 760  RETURN 
  84. 770  REM  ** 3,4,& 5 DICERS **
  85. 780 Y = 25: IF CT <11  THEN Y = 17: IF CT = 9  THEN Y = 11: REM SET COUNTER
  86. 790  FOR X = 0 TO 4: FOR XX = 0 TO 4: IF D(X,0) = D(XX,0)  THEN Y = Y -1
  87. 800  NEXT : NEXT : IF Y <1  THEN SC = (CT -6) *10
  88. 810  RETURN 
  89. 820  REM  ** THREE & TWO **
  90. 830  IF D(0,1) = D(1,1)  AND D(1,1) = D(2,1)  AND D(3,1) = D(4,1)  THEN SC = 40: RETURN 
  91. 840  IF D(4,1) = D(3,1)  AND D(3,1) = D(2,1)  AND D(1,1) = D(0,1)  THEN SC = 40
  92. 850  RETURN 
  93. 860  REM  ** POT LUCK **
  94. 870  FOR X = 0 TO 4:SC = SC +D(X,0): NEXT : RETURN : REM SUM OF DICE
  95. 880  REM ** COMPUTER'S TURN **
  96. 890  SPEED= 220: VTAB 11:X$ = "THINKING": GOSUB 30:Z = Z -1: IF Z = 0  THEN 1280: REM ALLOWS FOR 2 RE-ROLLS
  97. 900  VTAB 12: FOR CT = 7 TO 12: IF FL(CT) = 0  THEN  GOSUB 570
  98. 910  PRINT ".";: NEXT : IF FL(11) >0  THEN CT = 11: GOTO 1380: REM SCORE A 5 DICER
  99. 920  PRINT ".";: IF FL(12) >0  THEN CT = 12: GOTO 1380: REM SCORE A 3&2
  100. 930  PRINT ".";: IF FL(8) <0  AND FL(7) >0  THEN CT = 7: GOTO 1380: REM SCORE SM. RUN IF LG. RUN IS USED
  101. 940  PRINT ".";: IF FL(8) >0  THEN CT = 8: GOTO 1380: REM SCORE A LG. RUN
  102. 950  REM  *POTENTIAL RUN OR DICER *
  103. 960 D = 0:R = 0: FOR X = 0 TO 3: IF D(X,1) +1 = D(X +1,1)  THEN R = R +1: REM RUN??
  104. 970  IF D(X,1) = D(X +1,1)  THEN D = D +1: REM DICER??
  105. 980  PRINT ".";: NEXT : IF R >D  AND (FL(7) = 0  OR FL(8) = 0)  THEN R =  -1: GOTO 1150: REM TRY FOR RUN
  106. 990  REM * GO FOR A DICER *
  107. 1000  FOR X = 1 TO 3: IF D(X,1) < >D(X +1,1)  AND D(X,1) < >D(X -1,1)  THEN D(X,1) = 0
  108. 1010  PRINT ".";: NEXT : IF D(0,1) < >D(1,1)  THEN D(0,1) = 0
  109. 1020  IF D(4,1) < >D(3,1)  THEN D(4,1) = 0: REM FIND NON-PAIRED DICE
  110. 1030  IF FL(12) = 0  THEN 1220: REM GO FOR 3&2
  111. 1040 D = 0: FOR X = 0 TO 4: IF D(X,1) = 0  THEN D = D +1
  112. 1050  PRINT ".";: NEXT : IF D >1  AND (FL(D(2,1)) = 0  OR FL(9) = 0  OR FL(10) = 0  OR FL(11) = 0)  THEN 1220: REM GO FOR SINGLES, 3,4, OR 5 DICER
  113. 1060  IF D >1  THEN 1130: REM CAN'T USE THESE DICE
  114. 1070  IF FL(D(3,1)) = 0  THEN Y = D(3,1): GOTO 1100
  115. 1080  IF FL(D(1,1)) < >0  THEN 1130: REM CAN'T USE THESE
  116. 1090 Y = D(1,1)
  117. 1100  FOR X = 0 TO 4: IF D(X,1) < >Y  THEN D(X,1) = 0
  118. 1110  NEXT : GOTO 1220: REM KEEP ONLY ONE PAIR
  119. 1120  REM * REDO ALL DICE *
  120. 1130  FOR X = 0 TO 4:D(X,0) = 0: PRINT ".";: NEXT : GOTO 1220
  121. 1140  REM ** TRY FOR A RUN **
  122. 1150  FOR X = 0 TO 3: IF D(X,1) = D(X +1,1)  THEN D(X,1) = 0: REM FIND DUPLICATE DICE
  123. 1160  PRINT ".";: NEXT : GOSUB 490: IF D(0,1) = 0  THEN 1190
  124. 1170  IF D(2,1) = 3  THEN D(3,1) = 0:D(4,1) = 0: GOTO 1220: REM ROLLED 12356
  125. 1180  IF D(2,1) = 4  THEN D(0,1) = 0:D(1,1) = 0: GOTO 1220: REM ROLLED 12456  
  126. 1190  IF D(1,1) +1 < >D(2,1)  THEN D(1,1) = 0
  127. 1200  IF D(4,1) -1 < >D(3,1)  THEN D(4,1) = 0
  128. 1210  REM ** SEPARATE KEEPERS/TRASH **
  129. 1220 Y = 0
  130. 1230  FOR X = 0 TO 4: IF D(X,1) = D(Y,0)  THEN D(X,1) = 0: GOTO 1250
  131. 1240  PRINT ".";: NEXT :D(Y,0) = 0
  132. 1250 Y = Y +1: IF Y <5  THEN 1230
  133. 1260  VTAB 11: HTAB 1: CALL  -868: PRINT : CALL  -868: PRINT : CALL  -868: GOSUB 440: GOTO 890: REM RE-ROLL DICE
  134. 1270  REM ** END OF COMPUTER'S TURN **
  135. 1280  FOR CT = 1 TO 13: IF FL(CT) > = 0  THEN  GOSUB 570
  136. 1290  NEXT : FOR CT = 12 TO 7  STEP  -1: IF FL(CT) >0  THEN 1380: REM SEARCH FOR CATAGORY
  137. 1300  NEXT : FOR X = 5 TO 2  STEP  -1: FOR CT = 1 TO 6
  138. 1310  IF FL(CT) = X *CT  THEN 1380: REM TEST SINGLES
  139. 1320  NEXT : NEXT 
  140. 1330  IF FL(13) >15  THEN CT = 13: GOTO 1380: REM TEST POT LUCK
  141. 1340  REM * NO AVAILABLE CATAGORY *
  142. 1350  FOR CT = 1 TO 6: IF FL(CT) >0  THEN 1380: REM USE UP SINGLES FIRST
  143. 1360  NEXT : FOR CT = 11 TO 1  STEP  -1: IF FL(CT) > = 0  THEN 1380: REM BEFORE USING UP THE OTHERS
  144. 1370  NEXT :CT = 13: REM ONLY POT LUCK LEFT
  145. 1380  GOSUB 570: FOR X = 1 TO 13: IF  RIGHT$(SC$(X,0),1) = ":"  THEN FL(X) = 0: REM CLEAR TEMPORARY FLAGS
  146. 1390  NEXT :FL(CT) =  -1: SPEED= 255: GOTO 610: REM NEXT PLAYER'S TURN
  147. 1400  REM ** END OF GAME **
  148. 1410  FOR X = 0 TO 19: POKE 1448 +X, PEEK(1024 +X): POKE 1024 +X,160: POKE 1487 -X, PEEK(1063 -X): POKE 1063 -X,160: NEXT : REM MOVE HEADING TO VTAB 12
  149. 1420  FOR X = 1 TO 6: VTAB 3 +X: PRINT SC$(X,0),SC$(X +6,0): VTAB 15 +X: PRINT SC$(X,1),SC$(X +6,1): NEXT : PRINT ,SC$(13,1): VTAB 10: PRINT ,SC$(13,0): REM DRAW BOTH SCORECARDS
  150. 1430  FOR X = 0 TO 1:X$ = NM$(X) +"'S TOTAL: " + STR$(T(X)): VTAB X *12 +2: GOSUB 30: NEXT 
  151. 1440  VTAB 3: IF T(1) >T(0)  THEN  VTAB 15
  152. 1450  POKE 32,37: POKE 33,3: FLASH : PRINT : PRINT " W  I  N  N  E  R  ! ": REM 1 SPACE ON EACH END; 2 BETWEEN LETTERS
  153. 1460  NORMAL : TEXT 
  154. 1470  VTAB 24: PRINT "PLAY ANOTHER GAME? (Y/N) ";: GOSUB 100: IF X$ = "N"  OR X$ = "n"  THEN  GOSUB 50: END 
  155. 1480  POKE 35,11: HOME : TEXT : VTAB 13: CALL  -958: REM ERASE ALL BUT HEADING
  156. 1490  VTAB 24: FOR X = 1 TO 11: PRINT : NEXT : REM  PUT HEADING BACK AT VTAB 1
  157. 1500  CLEAR 
  158. 1510  REM ** VARIABLES **
  159. 1520 KB = 49152:CL = 49168:BZ = 49200: DIM SC$(13,1),D(4,1),DP$(6),NM$(1),T(1),FL(13)
  160. 1530  FOR X = 1 TO 13: READ SC$(X,0):SC$(X,1) = SC$(X,0): NEXT 
  161. 1540 M$ =  CHR$(13):DP$(1) = "   " +M$ +" O " +M$ +"   ":DP$(2) = "O  " +M$ +"   " +M$ +"  O":DP$(3) = "  O" +M$ +" O " +M$ +"O  ": REM DICE PICTURE STRINGS
  162. 1550 DP$(4) = "O O" +M$ +"   " +M$ +"O O":DP$(5) = "O O" +M$ +" O " +M$ +"O O":DP$(6) = "O O" +M$ +"O O" +M$ +"O O": REM 3 CHARS. BETWEEN ""
  163. 1560  GOTO 170
  164. 1570  DATA "ONES..:","TWOS..:","THREES:","FOURS.:","FIVES.:","SIXES.:","SMALL RUN..:","LARGE RUN..:","THREE DICER:","FOUR DICER.:","FIVER DICER:","THREE & TWO:","POT LUCK...:"