DECLARE SUB already.have.it () DECLARE SUB you.dont.have.a () DECLARE SUB sort.dice () DECLARE SUB first.roll () DECLARE SUB test.for.yatzee () DECLARE SUB which.dice () DECLARE SUB print.score () DECLARE SUB roll.dice () DECLARE SUB print.dice.and.needed.hands () DECLARE SUB desired.hand () DECLARE SUB score.one.thru.six () DECLARE SUB score.small.straight () DECLARE SUB score.large.straight () DECLARE SUB score.full.house () DECLARE SUB score.3.of.a.kind () DECLARE SUB score.4.of.a.kind () DECLARE SUB score.chance () DECLARE SUB delay () DECLARE SUB init () DECLARE SUB greetings () ' Yatzee DIM SHARED score(80), sorted.dice(5), c(5), dice(5) DIM SHARED a$(13), player$(4) COMMON SHARED player, player$(), high, high$ COMMON SHARED c, y, z, sum, f, players, roll init greetings DO FOR cycle = 1 TO 13 y = 0 FOR player = 1 TO players first.roll z = 1 test.for.yatzee IF z = 0 THEN GOTO continue.play END IF FOR roll = 1 TO 2 which.dice z = 1 test.for.yatzee IF z = 0 THEN GOTO continue.play END IF z = 0 NEXT roll continue.play: y = y + 19 NEXT player NEXT cycle print.score LOOP SUB already.have.it LOCATE 15, 1 PRINT player$(player); " You already have your "; a$(f) delay LOCATE 15, 1 PRINT STRING$(60, " ") END SUB SUB delay FOR dlay = 1 TO 1000 NEXT dlay END SUB SUB desired.hand start.over: CLS sum = dice(1) + dice(2) + dice(3) + dice(4) + dice(5) PRINT TAB(20); player$(player); " How would you like them ?" LOCATE 2, 50 IF score(1 + y) = 0 THEN PRINT "1 = One's" ELSE COLOR 0, 15 PRINT "One's ->"; score(1 + y) COLOR 15, 0 END IF LOCATE 3, 1 PRINT "1= "; dice(1) LOCATE 3, 50 IF score(2 + y) = 0 THEN PRINT "2 = Two's" ELSE COLOR 0, 15 PRINT "Two's ->"; score(2 + y) COLOR 15, 0 END IF LOCATE 4, 1 PRINT "2= "; dice(2) LOCATE 4, 50 IF score(3 + y) = 0 THEN PRINT "3 = Three's" ELSE COLOR 0, 15 PRINT "Three's ->"; score(3 + y) COLOR 15, 0 END IF LOCATE 5, 1 PRINT "3= "; dice(3) LOCATE 5, 50 IF score(4 + y) = 0 THEN PRINT "4 = Four's" ELSE COLOR 0, 15 PRINT "Four's ->"; score(4 + y) COLOR 15, 0 END IF LOCATE 6, 1 PRINT "4= "; dice(4) LOCATE 6, 50 IF score(5 + y) = 0 THEN PRINT "5 = Five's" ELSE COLOR 0, 15 PRINT "Five's ->"; score(5 + y) COLOR 15, 0 END IF LOCATE 7, 1 PRINT "5= "; dice(5) LOCATE 7, 50 IF score(6 + y) = 0 THEN PRINT "6 = Six's" ELSE COLOR 0, 15 PRINT "Six's ->"; score(6 + y) COLOR 15, 0 END IF LOCATE 8, 1 PRINT "Total= "; sum LOCATE 8, 50 IF score(7 + y) = 0 THEN PRINT "7 = Small Straight" ELSE COLOR 0, 15 PRINT "Small Straight ->"; score(7 + y) COLOR 15, 0 END IF LOCATE 9, 50 IF score(8 + y) = 0 THEN PRINT "8 = Large Straight" ELSE COLOR 0, 15 PRINT "Large Straight ->"; score(8 + y) COLOR 15, 0 END IF LOCATE 10, 50 IF score(9 + y) = 0 THEN PRINT "9 = Full House" ELSE COLOR 0, 15 PRINT "Full House ->"; score(9 + y) COLOR 15, 0 END IF LOCATE 11, 50 IF score(10 + y) = 0 THEN PRINT "10 = 3 of a Kind" ELSE COLOR 0, 15 PRINT "3 of a Kind ->"; score(10 + y) COLOR 15, 0 END IF LOCATE 12, 50 IF score(11 + y) = 0 THEN PRINT "11 = 4 of a Kind" ELSE COLOR 0, 15 PRINT "4 of a Kind ->"; score(11 + y) COLOR 15, 0 END IF LOCATE 13, 50 IF score(12 + y) = 0 THEN PRINT "12 = Chance" ELSE COLOR 0, 15 PRINT "Chance ->"; score(12 + y) COLOR 15, 0 END IF INPUT f$ f = VAL(f$) SELECT CASE f CASE 0 'Can't use it EXIT SUB CASE 1 TO 6 ' One's thru Six's IF score(f + y) <> 0 THEN already.have.it GOTO start.over END IF FOR c = 1 TO 5 IF dice(c) = f THEN score(f + y) = score(f + y) + f END IF NEXT c IF score(f + y) = 0 THEN PRINT player$(player); " There are no "; a$(f); " in your hand" delay LOCATE 15, 1 PRINT STRING$(60, " ") GOTO start.over END IF CASE 7 'Small Straight IF score(7 + y) <> 0 THEN already.have.it GOTO start.over END IF sort.dice IF sorted.dice(2) = sorted.dice(3) THEN IF sorted.dice(1) = sorted.dice(2) - 1 AND sorted.dice(2) = sorted.dice(4) - 1 AND sorted.dice(4) = sorted.dice(5) - 1 THEN score(7 + y) = 30 EXIT SUB END IF END IF IF sorted.dice(3) = sorted.dice(4) THEN IF sorted.dice(1) = sorted.dice(2) - 1 AND sorted.dice(2) = sorted.dice(3) - 1 AND sorted.dice(3) = sorted.dice(5) - 1 THEN score(7 + y) = 30 EXIT SUB END IF END IF IF sorted.dice(1) = sorted.dice(2) - 1 AND sorted.dice(2) = sorted.dice(3) - 1 AND sorted.dice(3) = sorted.dice(4) - 1 THEN score(7 + y) = 30 EXIT SUB END IF IF sorted.dice(2) = sorted.dice(3) - 1 AND sorted.dice(3) = sorted.dice(4) - 1 AND sorted.dice(4) = sorted.dice(5) - 1 THEN score(7 + y) = 30 EXIT SUB END IF you.dont.have.a GOTO start.over CASE 8 'Large Straight IF score(8 + y) <> 0 THEN already.have.it GOTO start.over END IF sort.dice IF sorted.dice(1) = sorted.dice(2) - 1 AND sorted.dice(2) = sorted.dice(3) - 1 AND sorted.dice(3) = sorted.dice(4) - 1 AND sorted.dice(4) = sorted.dice(5) - 1 THEN score(8 + y) = 40 EXIT SUB ELSE you.dont.have.a GOTO start.over END IF CASE 9 'Full House IF score(9 + y) <> 0 THEN already.have.it GOTO start.over END IF sort.dice IF sorted.dice(1) = sorted.dice(2) AND sorted.dice(2) = sorted.dice(3) AND sorted.dice(4) = sorted.dice(5) THEN score(9 + y) = 25 EXIT SUB END IF IF sorted.dice(1) = sorted.dice(2) AND sorted.dice(3) = sorted.dice(4) AND sorted.dice(4) = sorted.dice(5) THEN score(9 + y) = 25 EXIT SUB END IF you.dont.have.a GOTO start.over CASE 10 '3 of a Kind IF score(10 + y) <> 0 THEN already.have.it GOTO start.over END IF sort.dice IF sorted.dice(1) = sorted.dice(2) AND sorted.dice(2) = sorted.dice(3) THEN score(10 + y) = sum EXIT SUB END IF IF sorted.dice(2) = sorted.dice(3) AND sorted.dice(3) = sorted.dice(4) THEN score(10 + y) = sum EXIT SUB END IF IF sorted.dice(3) = sorted.dice(4) AND sorted.dice(4) = sorted.dice(5) THEN score(10 + y) = sum EXIT SUB END IF CASE 11 '4 of a Kind IF score(11 + y) <> 0 THEN already.have.it GOTO start.over END IF sort.dice IF sorted.dice(1) = sorted.dice(2) AND sorted.dice(2) = sorted.dice(3) AND sorted.dice(3) = sorted.dice(4) THEN score(11 + y) = sum EXIT SUB END IF IF sorted.dice(2) = sorted.dice(3) AND sorted.dice(3) = sorted.dice(4) AND sorted.dice(4) = sorted.dice(5) THEN score(11 + y) = sum EXIT SUB END IF CASE 12 'Chance IF score(12 + y) <> 0 THEN already.have.it GOTO start.over END IF score(12 + y) = sum EXIT SUB CASE ELSE GOTO start.over END SELECT END SUB SUB first.roll FOR m = 1 TO 5 c(m) = 1 NEXT m roll.dice print.dice.and.needed.hands END SUB SUB greetings try.again: x$ = "" CLS PRINT PRINT TAB(25); "Yatzee" PRINT PRINT TAB(26); "By Tybee Evans" PRINT PRINT PRINT TAB(15); "Please enter the number of players ( 1-4 ) "; INPUT x$ IF x$ < "1" OR x$ > "4" THEN GOTO try.again players = VAL(x$) PRINT PRINT FOR player = 1 TO players PRINT "Player # "; player; " Please enter your name "; INPUT player$(player) NEXT player END SUB SUB init COLOR 15, 0 RANDOMIZE TIMER a$(1) = "One's" a$(2) = "Two's" a$(3) = "Three's" a$(4) = "Four's" a$(5) = "Five's" a$(6) = "Six's" a$(7) = "Small Straight" a$(8) = "Large Strait" a$(9) = "Full House" a$(10) = "Three of a Kind" a$(11) = "Four of a Kind" a$(12) = "Chance" END SUB SUB print.dice.and.needed.hands CLS sum = dice(1) + dice(2) + dice(3) + dice(4) + dice(5) PRINT TAB(25); player$(player); " you need" LOCATE 2, 50 IF score(1 + y) = 0 THEN PRINT "One's" ELSE COLOR 0, 15 PRINT "One's ->"; score(1 + y) COLOR 15, 0 END IF LOCATE 3, 1 PRINT "1 = "; dice(1) LOCATE 3, 50 IF score(2 + y) = 0 THEN PRINT "Two's" ELSE COLOR 0, 15 PRINT "Two's ->"; score(2 + y) COLOR 15, 0 END IF LOCATE 4, 1 PRINT "2 = "; dice(2) LOCATE 4, 50 IF score(3 + y) = 0 THEN PRINT "Three's" ELSE COLOR 0, 15 PRINT "Three's ->"; score(3 + y) COLOR 15, 0 END IF LOCATE 5, 1 PRINT "3 = "; dice(3) LOCATE 5, 50 IF score(4 + y) = 0 THEN PRINT "Four's" ELSE COLOR 0, 15 PRINT "Four's ->"; score(4 + y) COLOR 15, 0 END IF LOCATE 6, 1 PRINT "4 = "; dice(4) LOCATE 6, 50 IF score(5 + y) = 0 THEN PRINT "Five's" ELSE COLOR 0, 15 PRINT "Five's ->"; score(5 + y) COLOR 15, 0 END IF LOCATE 7, 1 PRINT "5 = "; dice(5) LOCATE 7, 50 IF score(6 + y) = 0 THEN PRINT "Six's" ELSE COLOR 0, 15 PRINT "Six's ->"; score(6 + y) COLOR 15, 0 END IF LOCATE 8, 1 PRINT "Total= "; sum LOCATE 8, 50 IF score(7 + y) = 0 THEN PRINT "Small Straight" ELSE COLOR 0, 15 PRINT "Small Straight ->"; score(7 + y) COLOR 15, 0 END IF LOCATE 9, 50 IF score(8 + y) = 0 THEN PRINT "Large Straight" ELSE COLOR 0, 15 PRINT "Large Straight ->"; score(8 + y) COLOR 15, 0 END IF LOCATE 10, 1 PRINT "Which dice would you" LOCATE 10, 50 IF score(9 + y) = 0 THEN PRINT "Full House" ELSE COLOR 0, 15 PRINT "Full House ->"; score(9 + y) COLOR 15, 0 END IF LOCATE 11, 1 PRINT " like to roll again" LOCATE 11, 50 IF score(10 + y) = 0 THEN PRINT "3 of a Kind" ELSE COLOR 0, 15 PRINT "3 of a Kind ->"; score(10 + y) COLOR 15, 0 END IF LOCATE 12, 50 IF score(11 + y) = 0 THEN PRINT "4 of a Kind" ELSE COLOR 0, 15 PRINT "4 of a Kind ->"; score(11 + y) COLOR 15, 0 END IF LOCATE 13, 1 PRINT "When your ready to" LOCATE 13, 50 IF score(12 + y) = 0 THEN PRINT "Chance" ELSE COLOR 0, 15 PRINT "Chance ->"; score(12 + y) COLOR 15, 0 END IF LOCATE 14, 1 PRINT " roll them enter 0" LOCATE 14, 50 IF score(13 + y) = 0 THEN PRINT "Yatzee" ELSE COLOR 0, 15 PRINT "Yatzee ->"; score(13 + y) COLOR 15, 0 END IF END SUB SUB print.score y = 0 FOR a = 0 TO 3 score(14 + y) = score(1 + y) + score(2 + y) + score(3 + y) + score(4 + y) + score(5 + y) + score(6 + y) IF score(14 + y) > 63 THEN score(15 + y) = 35 ELSE score(15 + y) = 0 END IF score(16 + y) = score(14 + y) + score(15 + y) score(17 + y) = score(7 + y) + score(8 + y) + score(9 + y) + score(10 + y) + score(11 + y) + score(12 + y) + score(13 + y) score(18 + y) = score(16 + y) + score(17 + y) IF score(18 + y) > high THEN high = score(18 + y) high$ = player$(a + 1) END IF y = y + 19 NEXT a CLS PRINT "High Score = "; high; " by "; high$ LOCATE 3, 20 PRINT "Final scores" LOCATE 5, 20 PRINT "Subtotal + Bonus = Subtotal + Subtotal = Total" y = 0 b = 0 FOR a = 7 TO 10 b = b + 1 IF player$(b) <> "" THEN LOCATE a, 5 PRINT player$(b) LOCATE a, 22 PRINT score(14 + y) LOCATE a, 33 PRINT score(15 + y) LOCATE a, 41 PRINT score(16 + y) LOCATE a, 53 PRINT score(17 + y) LOCATE a, 62 PRINT score(18 + y) END IF y = y + 19 NEXT a play.again: LOCATE 20, 15 INPUT "Would you like to play again "; a$ a$ = LEFT$(a$, 1) SELECT CASE a$ CASE "Y", "y" FOR a = 0 TO 80 score(a) = 0 NEXT a INPUT "Same Players "; a$ a$ = LEFT$(a$, 1) SELECT CASE a$ CASE "Y", "y" EXIT SUB CASE "N", "n" RUN END SELECT CASE "N", "n" END END SELECT END SUB SUB roll.dice FOR m = 1 TO 5 IF c(m) = 1 THEN dice(m) = INT(RND(6) * 6) + 1 c(m) = 0 END IF NEXT m END SUB SUB sort.dice FOR m = 1 TO 5 sorted.dice(m) = dice(m) NEXT m sort.again: ex = 0 IF sorted.dice(1) > sorted.dice(2) THEN SWAP sorted.dice(1), sorted.dice(2) ex = 1 END IF IF sorted.dice(2) > sorted.dice(3) THEN SWAP sorted.dice(2), sorted.dice(3) ex = 1 END IF IF sorted.dice(3) > sorted.dice(4) THEN SWAP sorted.dice(3), sorted.dice(4) ex = 1 END IF IF sorted.dice(4) > sorted.dice(5) THEN SWAP sorted.dice(4), sorted.dice(5) ex = 1 END IF IF ex <> 0 THEN GOTO sort.again END SUB SUB test.for.yatzee IF dice(1) = dice(2) AND dice(2) = dice(3) AND dice(3) = dice(4) AND dice(4) = dice(5) THEN z = 0 score(13 + y) = score(13 + y) + 50 END IF END SUB SUB which.dice z = 0 IF roll = 2 THEN z = 1 input.dice: LOCATE 14, 50 IF score(13 + y) = 0 THEN PRINT "Yatzee" ELSE COLOR 0, 15 PRINT "Yatzee" COLOR 15, 0 END IF INPUT l$ LOCATE 15, 1 PRINT " " IF l$ < "0" OR l$ > "5" THEN GOTO input.dice END IF l = VAL(l$) FOR m = 1 TO 5 IF l = m AND c(m) = 1 THEN c(m) = 0 LOCATE 2 + m, 9 PRINT " "; GOTO input.dice END IF IF l = m THEN c(m) = 1 LOCATE 2 + m, 9 PRINT "<"; GOTO input.dice END IF NEXT m IF l = 0 THEN GOSUB roll.them EXIT SUB END IF EXIT SUB roll.them: roll.dice test.for.yatzee IF z THEN desired.hand ELSE print.dice.and.needed.hands END IF RETURN END SUB SUB you.dont.have.a PRINT player$(player); " You don't have a "; a$(f) delay LOCATE 15, 1 PRINT STRING$(60, " ") END SUB