!*************************** AMUS Program Label ******************************
! Filename: YATZEE.BAS                                      Date: 08/05/91
! Category: GAME         Hash Code: 772-303-323-766 RUN  Version: 1.0(101)
! Initials: ULTR/US      Name: DAVID PALLMANN
! Company: ULTRASOFT CORPORATION                   Telephone #: 5163484848
! Related Files: YATZEE.SBR
! Min. Op. Sys.: AMOSL 1.3B/AMOS32 1.0         Expertise Level: BEG
! Special: Needs Put YATZEE.SBR in BAS:, load into memory for faster execut.
! Description: Alpha version of the popular dice game YAHTZEE
!*****************************************************************************

!****************************************************************************
!*                                                                          *
!*                                "YAHTZEE"                                 *
!*                    Computer Version of the Dice Game                     *
!*                                                                          *
!****************************************************************************
!David Pallmann, UltraSoft Corporation
!
!Requires YATZEE.SBR

       PROGRAM YATZEE, 1.0(101)

       MAP1 BOTTOM,F,6
       MAP1 CHAR,S,1
       MAP1 COL,F,6
       MAP1 DIR,F,6
       MAP1 FLAG(6),F,6
       MAP1 INDEX,F,6
       MAP1 I,F,6
       MAP1 J,F,6
       MAP1 KEY,B,2
       MAP1 MOVES,F,6
       MAP1 NAME,S,30
       MAP1 ROLL(6),F,6
       MAP1 ROLLS,F,6
       MAP1 ROW,F,6
       MAP1 SCORE,F,6
       MAP1 SCORE(13),F,6
       MAP1 STRING,S,7
       MAP1 TOP,F,6
       MAP1 HIGH'SCORE,F,6
       MAP1 HIGH'NAME,S,30

LOAD'SCORE:
       LOOKUP "YATZEE.DAT", I
       IF I=0 THEN GOTO INIT
       OPEN #1, "YATZEE.DAT", INPUT
       INPUT #1, HIGH'SCORE, HIGH'NAME
       CLOSE #1

INIT:   RANDOMIZE

NEW'GAME:
       FOR I = 1 TO 13
               SCORE(I) = -1
               NEXT I
       MOVES = 0

SCREEN: PRINT TAB(-1,0); TAB(-1,29);
       CALL BACKGROUND
       IF HIGH'SCORE=0 THEN GOTO MOVE
       PRINT TAB(-1,11); TAB(24,1); "High score of"; HIGH'SCORE; "by "; HIGH'NAME; TAB(-1,12);

MOVE:   IF MOVES=13 THEN GOTO END'GAME
       MOVES = MOVES+1

FIRST'ROLL:
       ROLLS = 1
       PRINT TAB(6,62); SPACE(16);
       PRINT TAB(8,62); SPACE(16);
       PRINT TAB(10,62); SPACE(16);
       CALL CLEAR'INSTRUCTIONS
       ROW = 6
       FOR I = 1 TO 5 : FLAG(I) = 1 : NEXT I
       CALL GET'ROLL
       CALL SORT
       PRINT TAB(-1,12);
       FOR I = 1 TO 5
               PRINT TAB(ROW,I*3+61); STR(ROLL(I));
               NEXT I
FR2:    PRINT TAB(16,59); "Enter Y or N for";
       PRINT TAB(17,59); "each die. If you";
       PRINT TAB(18,59); "do not wish to";
       PRINT TAB(19,59); "roll again, press";
       PRINT TAB(20,59); "Q.";

       ROW = 8
       PRINT TAB(-1,11);
       FOR I = 1 TO 5
               FLAG(I) = 0
               PRINT TAB(ROW,I*3+62); TAB(-1,31);
               PRINT TAB(ROW,I*3+60); TAB(-1,30); STR(ROLL(I)); TAB(-1,31);
               PRINT TAB(ROW,I*3+61);
FR2A:           XCALL YATZEE, CHAR
               CHAR = UCS(CHAR)
               IF CHAR="N" OR CHAR=" " THEN GOTO FR3
               IF CHAR="Y" OR CHAR="R" THEN GOTO FR2B
               IF CHAR="Q" OR CHAR=CHR(27) OR CHAR=CHR(11) OR CHAR=CHR(10) &
                       THEN I = 5 : GOTO FR4
               PRINT CHR(7);
               GOTO FR2A
FR2B:           PRINT TAB(-1,12);
               PRINT TAB(ROW,I*3+60); " "; STR(ROLL(I)); " ";
               PRINT TAB(-1,11);
               FLAG(I) = 1
               GOTO FR4
FR3:            PRINT TAB(ROW,I*3+60); " "; STR(ROLL(I)); " ";
FR4:            NEXT I
       IF CHAR="Q" OR CHAR=CHR(27) OR CHAR=CHR(11) OR CHAR=CHR(10) THEN GOTO SELECT
       IF FLAG(1)=FLAG(2) AND FLAG(2)=FLAG(3) AND FLAG(3)=FLAG(4) AND &
               FLAG(4)=FLAG(5) AND FLAG(1)=0 THEN GOTO SELECT

SECOND'ROLL:
       ROLLS = 2
       CALL CLEAR'INSTRUCTIONS
       ROW = 8
       CALL GET'ROLL
       PRINT TAB(-1,12);
       FOR I = 1 TO 5
               PRINT TAB(ROW,I*3+61); STR(ROLL(I));
               NEXT I
SR2:    PRINT TAB(16,59); "Enter Y or N for";
       PRINT TAB(17,59); "each die. If you";
       PRINT TAB(18,59); "do not wish to";
       PRINT TAB(19,59); "roll again, press";
       PRINT TAB(20,59); "Q.";

       ROW = 10
       PRINT TAB(-1,11);
       FOR I = 1 TO 5
               FLAG(I) = 0
               PRINT TAB(ROW,I*3+62); TAB(-1,31);
               PRINT TAB(ROW,I*3+60); TAB(-1,30); STR(ROLL(I)); TAB(-1,31);
               PRINT TAB(ROW,I*3+61);
SR2A:           XCALL YATZEE, CHAR
               CHAR = UCS(CHAR)
               IF CHAR="N" OR CHAR=" " THEN GOTO SR3
               IF CHAR="Y" OR CHAR="R" THEN GOTO SR2B
               IF CHAR="Q" OR CHAR=CHR(27) OR CHAR=CHR(11) OR CHAR=CHR(10) &
                       THEN I = 5 : GOTO FR4
               PRINT CHR(7);
               GOTO SR2A
SR2B:           PRINT TAB(-1,12);
               PRINT TAB(ROW,I*3+60); " "; STR(ROLL(I)); " ";
               PRINT TAB(-1,11);
               FLAG(I) = 1
               GOTO SR4
SR3:            PRINT TAB(ROW,I*3+60); " "; STR(ROLL(I)); " ";
SR4:            NEXT I
       IF CHAR="Q" OR CHAR=CHR(27) OR CHAR=CHR(11) OR CHAR=CHR(10) THEN GOTO SELECT
       IF FLAG(1)=FLAG(2) AND FLAG(2)=FLAG(3) AND FLAG(3)=FLAG(4) AND &
               FLAG(4)=FLAG(5) AND FLAG(1)=0 THEN GOTO SELECT

THIRD'ROLL:
       ROLLS = 3
       CALL GET'ROLL
       PRINT TAB(-1,12);
       FOR I = 1 TO 5
               PRINT TAB(ROW,I*3+61); STR(ROLL(I));
               NEXT I

SELECT: PRINT TAB(-1,29); TAB(-1,12);
       CALL CLEAR'INSTRUCTIONS
       PRINT TAB(16,59); "Use ARROW KEYS to";
       PRINT TAB(17,59); "to select scoring";
       PRINT TAB(18,59); "you wish to apply";
       PRINT TAB(19,59); "this roll to.";
       PRINT TAB(21,59); "Press SPACE BAR";
       PRINT TAB(22,59); "to post score.";

       ROW = 4
       COL = 14
       INDEX = 1
       DIR = 1

MARK:   IF SCORE(INDEX)<>-1 AND DIR=0 THEN GOTO UP
       IF SCORE(INDEX)<>-1 THEN GOTO DOWN
       CALL GET'SCORE
       PRINT TAB(ROW,COL+6); TAB(-1,33); TAB(ROW,COL); TAB(-1,32);
       PRINT USING "#####", SCORE;
       PRINT TAB(-1,33);

GET:    XCALL YATZEE, CHAR
       CHAR = UCS(CHAR)
       IF CHAR=CHR(11) THEN GOTO UP
       IF CHAR=CHR(10) OR CHAR=CHR(13) THEN GOTO DOWN
       IF CHAR=" " OR CHAR="Y" THEN GOTO RECORD
       IF CHAR="Q" OR CHAR=CHR(27) THEN GOTO QUIT
       IF (CHAR="R" OR CHAR=CHR(8) OR CHAR=CHR(12)) AND ROLLS=1 THEN GOTO BACK'1
       IF (CHAR="R" OR CHAR=CHR(8) OR CHAR=CHR(12)) AND ROLLS=2 THEN GOTO BACK'2
       PRINT CHR(7);
       GOTO GET

BACK'1: PRINT TAB(ROW,COL); SPACE(7);
       CALL CLEAR'INSTRUCTIONS
       GOTO FR2

BACK'2: PRINT TAB(ROW,COL); SPACE(7);
       CALL CLEAR'INSTRUCTIONS
       GOTO SR2

UP:     DIR = 0
       IF SCORE(INDEX)=-1 THEN PRINT TAB(ROW,COL); SPACE(7);
       IF INDEX=1 THEN INDEX = 13 : ROW = 16 : COL = 45 : GOTO MARK
       INDEX = INDEX-1
       ROW = ROW-2
       IF INDEX<>6 THEN GOTO MARK
       ROW = 14 : COL = 14
       GOTO MARK

DOWN:   DIR = 1
       IF SCORE(INDEX)=-1 THEN PRINT TAB(ROW,COL); SPACE(7);
       IF INDEX=13 THEN INDEX = 1 : ROW = 4 : COL = 14 : GOTO MARK
       INDEX = INDEX+1
       ROW = ROW+2
       IF INDEX<>7 THEN GOTO MARK
       ROW = 4 : COL = 45
       GOTO MARK

RECORD: SCORE(INDEX) = SCORE

SHOW'SCORE:
       PRINT TAB(ROW,COL);
       PRINT USING "###### ", SCORE(INDEX);

       TOP = 0

       FOR I = 1 TO 6
               IF SCORE(I)<>-1 THEN TOP = TOP+SCORE(I)
               NEXT I

       PRINT TAB(16,14);
       PRINT USING "######"; TOP;

       IF TOP>=63 THEN TOP = TOP+35 : PRINT TAB(18,14); "    35";

       PRINT TAB(20,14);
       PRINT USING "######"; TOP;

       PRINT TAB(20,45);
       PRINT USING "######"; TOP;

       BOTTOM = 0

       FOR I = 7 TO 13
               IF SCORE(I)<>-1 THEN BOTTOM = BOTTOM+SCORE(I)
               NEXT I

       PRINT TAB(18,45);
       PRINT USING "######"; BOTTOM;

       PRINT TAB(20,45);
       PRINT USING "######"; TOP;

       PRINT TAB(22,45);
       PRINT USING "######"; TOP+BOTTOM;

       CALL CLEAR'INSTRUCTIONS
       GOTO MOVE

END'GAME:
       LOOKUP "YATZEE.DAT", I
       IF I=0 THEN GOTO NEW'HIGH'SCORE
       OPEN #1, "YATZEE.DAT", INPUT
       INPUT #1, HIGH'SCORE, HIGH'NAME
       CLOSE #1
       IF (TOP+BOTTOM)<=HIGH'SCORE THEN GOTO ANOTHER

NEW'HIGH'SCORE:
       PRINT TAB(24,1); "New high score!  Please enter your name: ";
       XCALL YATZEE, 24, 42, "*", 1, 30, "F", NAME, KEY
       ON KEY GOTO ANOTHER
       HIGH'SCORE = TOP+BOTTOM
       HIGH'NAME = NAME
       OPEN #1, "YATZEE.DAT", OUTPUT
       PRINT #1, STR(TOP+BOTTOM);
       PRINT #1, ","; CHR(34); NAME; CHR(34)
       CLOSE #1

ANOTHER:
       PRINT TAB(24,1); "Would you like to play again? "; TAB(-1,9); TAB(-1,28);
A1:     XCALL YATZEE, CHAR
       CHAR = UCS(CHAR)
       IF CHAR="Y" OR CHAR=" " OR CHAR=CHR(13) THEN GOTO NEW'GAME
       IF CHAR<>"N" AND CHAR<>"Q" AND CHAR<>CHR(27) THEN GOTO A1
!       GOTO QUIT

QUIT:   PRINT TAB(-1,28); TAB(-1,12); TAB(-1,0);
       END

!**********
!*  SORT  *
!**********
!Function:      Sort rolls into ascending order

SORT:   I = 1
S1:     IF I=5 THEN RETURN
       IF ROLL(I+1)>=ROLL(I) THEN GOTO S2
       J = ROLL(I)
       ROLL(I) = ROLL(I+1)
       ROLL(I+1) = J
       IF I=1 THEN GOTO S1
       I = I-1
       GOTO S1
S2:     I = I+1
       GOTO S1

!************************
!*  CLEAR'INSTRUCTIONS  *
!************************
!Clear instruction box text from screen

CLEAR'INSTRUCTIONS:
       FOR ROW = 16 TO 22
               PRINT TAB(ROW,59); SPACE(19);
               NEXT ROW
       RETURN

!**************
!*  GET'ROLL  *
!**************
!Function:      (Re-)roll 1-5 dice based on FLAG(1) through FLAG(5)

GET'ROLL:
       FOR I = 1 TO 5
               IF FLAG(I)=0 THEN GOTO GR1
               ROLL(I) = INT(RND(0)*6)+1
               FLAG(I) = 0
GR1:            NEXT I
       RETURN

!***************
!*  GET'SCORE  *
!***************
!Function:      Calculate score, return in SCORE

GET'SCORE:
       SCORE = 0
       ON INDEX GOTO SCORE'1, SCORE'2, SCORE'3, SCORE'4, SCORE'5, SCORE'6, &
       SCORE'3K, SCORE'4K, SCORE'FH, SCORE'SS, SCORE'LS, SCORE'Y, SCORE'C
       END

SCORE'1:
       FOR I = 1 TO 5
               IF ROLL(I)=1 THEN SCORE = SCORE+1
               NEXT I
       GOTO GS'RTN

SCORE'2:
       FOR I = 1 TO 5
               IF ROLL(I)=2 THEN SCORE = SCORE+2
               NEXT I
       GOTO GS'RTN

SCORE'3:
       FOR I = 1 TO 5
               IF ROLL(I)=3 THEN SCORE = SCORE+3
               NEXT I
       GOTO GS'RTN

SCORE'4:
       FOR I = 1 TO 5
               IF ROLL(I)=4 THEN SCORE = SCORE+4
               NEXT I
       GOTO GS'RTN

SCORE'5:
       FOR I = 1 TO 5
               IF ROLL(I)=5 THEN SCORE = SCORE+5
               NEXT I
       GOTO GS'RTN

SCORE'6:
       FOR I = 1 TO 5
               IF ROLL(I)=6 THEN SCORE = SCORE+6
               NEXT I
       GOTO GS'RTN

SCORE'3K:
       CALL SORT
       IF ROLL(1)=ROLL(2) AND ROLL(2)=ROLL(3) THEN GOTO SCORE'C
       IF ROLL(2)=ROLL(3) AND ROLL(3)=ROLL(4) THEN GOTO SCORE'C
       IF ROLL(3)=ROLL(4) AND ROLL(4)=ROLL(5) THEN GOTO SCORE'C
       GOTO GS'RTN

SCORE'4K:
       CALL SORT
       IF ROLL(1)=ROLL(2) AND ROLL(2)=ROLL(3) AND ROLL(3)=ROLL(4) THEN GOTO SCORE'C
       IF ROLL(2)=ROLL(3) AND ROLL(3)=ROLL(4) AND ROLL(4)=ROLL(5) THEN GOTO SCORE'C
       GOTO GS'RTN

SCORE'FH:
       CALL SORT
       IF ROLL(1)=ROLL(2) AND ROLL(3)=ROLL(4) AND ROLL(4)=ROLL(5) AND ROLL(1)<>ROLL(5) THEN SCORE = 25 : GOTO GS'RTN
       IF ROLL(4)=ROLL(5) AND ROLL(1)=ROLL(2) AND ROLL(2)=ROLL(3) AND ROLL(1)<>ROLL(5) THEN SCORE = 25 : GOTO GS'RTN
       GOTO GS'RTN

SCORE'SS:
       CALL SORT

       STRING = ""
       FOR I = 1 TO 5
               STRING = STRING+STR(ROLL(I))
               NEXT I

       STRING = " "+STRING+" "
       FOR I = 1 TO 6
SS1:            J = INSTR(1,STRING,STR(I)+STR(I))
               IF J=0 THEN GOTO SS2
               STRING = STRING[1,J-1]+STRING[J+1,LEN(STRING)]
               GOTO SS1
SS2:            NEXT I

       STRING = STRING[2,LEN(STRING)-1]
       IF INSTR(1,STRING,"1234")>0 THEN SCORE = 30 : GOTO GS'RTN
       IF INSTR(1,STRING,"2345")>0 THEN SCORE = 30 : GOTO GS'RTN
       IF INSTR(1,STRING,"3456")>0 THEN SCORE = 30 : GOTO GS'RTN
       GOTO GS'RTN

SCORE'LS:
       CALL SORT
       STRING = ""
       FOR I = 1 TO 5
               STRING = STRING+STR(ROLL(I))
               NEXT I
       IF STRING = "12345" THEN SCORE = 40 : GOTO GS'RTN
       IF STRING = "23456" THEN SCORE = 40 : GOTO GS'RTN
       GOTO GS'RTN

SCORE'Y:
       IF ROLL(1)=ROLL(2) AND ROLL(2)=ROLL(3) AND ROLL(3)=ROLL(4) AND &
               ROLL(4)=ROLL(5) THEN SCORE = 50
       GOTO GS'RTN

SCORE'C:
       SCORE = ROLL(1)+ROLL(2)+ROLL(3)+ROLL(4)+ROLL(5)

GS'RTN: RETURN

!****************
!*  BACKGROUND  *
!****************
!Display background screen

BACKGROUND:
       PRINT TAB(-1,29); TAB(-1,24); TAB(-1,12); TAB(-1,0); TAB(1,47);
       PRINT TAB(-1,11); TAB(-1,23); TAB(-1,33); TAB(-1,33); TAB(-1,12);
       PRINT TAB(1,31); TAB(-1,11); TAB(-1,32); TAB(-1,12); TAB(-1,24);
       PRINT " Y A H T Z E E ";
       PRINT TAB(-1,11); TAB(-1,23); TAB(-1,33); TAB(-1,33); TAB(-1,12);
       PRINT TAB(3,1); TAB(-1,38); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,42); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,39); TAB(3,24); TAB(-1,24);
       PRINT "  ";
       PRINT TAB(-1,23); TAB(-1,38); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,42); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,39); TAB(3,57); TAB(-1,38);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,39); TAB(4,1); TAB(-1,47); TAB(-1,24);
       PRINT " 1s";
       PRINT TAB(4,12); TAB(-1,23); TAB(-1,47); TAB(4,21); TAB(-1,47);
       PRINT TAB(4,26); TAB(-1,47); TAB(4,28); TAB(-1,24);
       PRINT "3 of a kind";
       PRINT TAB(4,41);
       PRINT "T";
       PRINT TAB(4,43); TAB(-1,23); TAB(-1,47); TAB(4,52); TAB(-1,47);
       PRINT TAB(4,57); TAB(-1,47); TAB(-1,24);
       PRINT "     DICE ROLLS     ";
       PRINT TAB(-1,23); TAB(-1,47); TAB(5,1); TAB(-1,44); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,48);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,43); TAB(5,26);
       PRINT TAB(-1,44); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,48); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,43); TAB(5,57); TAB(-1,47); TAB(5,78);
       PRINT TAB(-1,47); TAB(6,1); TAB(-1,47); TAB(-1,24);
       PRINT " 2s";
       PRINT TAB(6,12); TAB(-1,23); TAB(-1,47); TAB(6,21); TAB(-1,47);
       PRINT TAB(6,26); TAB(-1,47); TAB(6,28); TAB(-1,24);
       PRINT "4 of a kind";
       PRINT TAB(6,41);
       PRINT "T";
       PRINT TAB(6,43); TAB(-1,23); TAB(-1,47); TAB(6,52); TAB(-1,47);
       PRINT TAB(6,57); TAB(-1,47); TAB(6,59); TAB(-1,24);
       PRINT "1st";
       PRINT TAB(6,78); TAB(-1,23); TAB(-1,47); TAB(7,1); TAB(-1,44);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,48); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,43);
       PRINT TAB(7,26); TAB(-1,44); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,48); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,43); TAB(7,57); TAB(-1,47);
       PRINT TAB(7,59); TAB(-1,24);
       PRINT "   ";
       PRINT TAB(7,78); TAB(-1,23); TAB(-1,47); TAB(8,1); TAB(-1,47);
       PRINT TAB(-1,24);
       PRINT " 3s";
       PRINT TAB(8,12); TAB(-1,23); TAB(-1,47); TAB(8,21); TAB(-1,47);
       PRINT TAB(8,26); TAB(-1,47); TAB(8,28); TAB(-1,24);
       PRINT "Full House";
       PRINT TAB(8,40);
       PRINT "25";
       PRINT TAB(8,43); TAB(-1,23); TAB(-1,47); TAB(8,52); TAB(-1,47);
       PRINT TAB(8,57); TAB(-1,47); TAB(8,59); TAB(-1,24);
       PRINT "2nd";
       PRINT TAB(8,78); TAB(-1,23); TAB(-1,47); TAB(9,1); TAB(-1,44);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,48); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,43);
       PRINT TAB(9,26); TAB(-1,44); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,48); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,43); TAB(9,57); TAB(-1,47);
       PRINT TAB(9,78); TAB(-1,47); TAB(10,1); TAB(-1,47); TAB(-1,24);
       PRINT " 4s";
       PRINT TAB(10,12); TAB(-1,23); TAB(-1,47); TAB(10,21); TAB(-1,47);
       PRINT TAB(10,26); TAB(-1,47); TAB(10,28); TAB(-1,24);
       PRINT "Small Stra. 30";
       PRINT TAB(10,43); TAB(-1,23); TAB(-1,47); TAB(10,52); TAB(-1,47);
       PRINT TAB(10,57); TAB(-1,47); TAB(10,59); TAB(-1,24);
       PRINT "3rd";
       PRINT TAB(10,78); TAB(-1,23); TAB(-1,47); TAB(11,1); TAB(-1,44);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,48); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,43);
       PRINT TAB(11,26); TAB
(-1,44); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,48); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,43); TAB(11,57); TAB(-1,40);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,41); TAB(12,1); TAB(-1,47); TAB(-1,24);
       PRINT " 5s";
       PRINT TAB(12,12); TAB(-1,23); TAB(-1,47); TAB(12,21); TAB(-1,47);
       PRINT TAB(12,26); TAB(-1,47); TAB(12,28); TAB(-1,24);
       PRINT "Large Stra. 40";
       PRINT TAB(12,43); TAB(-1,23); TAB(-1,47); TAB(12,52); TAB(-1,47);
       PRINT TAB(13,1); TAB(-1,44); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,48); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,43); TAB(13,26); TAB(-1,44); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,48); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,43);
       PRINT TAB(13,57); TAB(-1,38); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,39); TAB(14,1); TAB(-1,47);
       PRINT TAB(-1,24);
       PRINT " 6s";
       PRINT TAB(14,12); TAB(-1,23); TAB(-1,47); TAB(14,21); TAB(-1,47);
       PRINT TAB(14,26); TAB(-1,47); TAB(14,28); TAB(-1,24);
       PRINT "Yahtzee";
       PRINT TAB(14,40);
       PRINT "50";
       PRINT TAB(14,43); TAB(-1,23); TAB(-1,47); TAB(14,52); TAB(-1,47);
       PRINT TAB(14,57); TAB(-1,47); TAB(-1,24);
       PRINT "    INSTRUCTIONS    ";
       PRINT TAB(-1,23); TAB(-1,47); TAB(15,1); TAB(-1,44); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,48);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,43); TAB(15,26);
       PRINT TAB(-1,44); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,48); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,43); TAB(15,57); TAB(-1,47); TAB(15,78);
       PRINT TAB(-1,47); TAB(16,1); TAB(-1,47); TAB(-1,24);
       PRINT " subtotal";
       PRINT TAB(16,12); TAB(-1,23); TAB(-1,47); TAB(16,21); TAB(-1,47);
       PRINT TAB(16,26); TAB(-1,47); TAB(16,28); TAB(-1,24);
       PRINT "Chance";
       PRINT TAB(16,41);
       PRINT "T";
       PRINT TAB(16,43); TAB(-1,23); TAB(-1,47); TAB(16,52); TAB(-1,47);
       PRINT TAB(16,57); TAB(-1,47); TAB(16,78); TAB(-1,47); TAB(17,1);
       PRINT TAB(-1,44); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,48); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,43); TAB(17,26); TAB(-1,44); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,48);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,43); TAB(17,57);
       PRINT TAB(-1,47); TAB(17,78); TAB(-1,47); TAB(18,1); TAB(-1,47);
       PRINT TAB(-1,24);
       PRINT " +35 (63) ";
       PRINT TAB(-1,23); TAB(-1,47); TAB(18,21); TAB(-1,47); TAB(18,26);
       PRINT TAB(-1,47); TAB(18,28); TAB(-1,24);
       PRINT "BOTTOM";
       PRINT TAB(18,43); TAB(-1,23); TAB(-1,47); TAB(18,52); TAB(-1,47);
       PRINT TAB(18,57); TAB(-1,47); TAB(18,78); TAB(-1,47); TAB(19,1);
       PRINT TAB(-1,44); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,48); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,43); TAB(19,26); TAB(-1,44); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,48);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,43); TAB(19,57);
       PRINT TAB(-1,47); TAB(19,78); TAB(-1,47); TAB(20,1); TAB(-1,47);
       PRINT TAB(-1,24);
       PRINT " TOP      ";
       PRINT TAB(-1,23); TAB(-1,47); TAB(-1,24);
       PRINT "     ";
       PRINT TAB(20,21); TAB(-1,23); TAB(-1,47); TAB(20,24); TAB(-1,24);
       PRINT "  ";
       PRINT TAB(-1,23); TAB(-1,47); TAB(-1,24);
       PRINT " TOP";
       PRINT TAB(20,43); TAB(-1,23); TAB(-1,47); TAB(20,52); TAB(-1,47);
       PRINT TAB(20,57); TAB(-1,47); TAB(20,78); TAB(-1,47); TAB(21,1);
       PRINT TAB(-1,44); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,48); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,43); TAB(21,26); TAB(-1,44); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,48);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,43); TAB(21,57);
       PRINT TAB(-1,47); TAB(21,78); TAB(-1,47); TAB(22,1); TAB(-1,47);
       PRINT TAB(-1,24);
       PRINT "          ";
       PRINT TAB(-1,23); TAB(-1,47); TAB(-1,24);
       PRINT "     ";
       PRINT TAB(22,21); TAB(-1,23); TAB(-1,47); TAB(22,24); TAB(-1,24);
       PRINT "  ";
       PRINT TAB(-1,23); TAB(-1,47); TAB(-1,24);
       PRINT " SCORE";
       PRINT TAB(22,43); TAB(-1,23); TAB(-1,47); TAB(22,52); TAB(-1,47);
       PRINT TAB(22,57); TAB(-1,47); TAB(22,78); TAB(-1,47); TAB(23,1);
       PRINT TAB(-1,40); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,45); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,41); TAB(23,24); TAB(-1,24);
       PRINT "  ";
       PRINT TAB(-1,23); TAB(-1,40); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,45); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,41); TAB(23,57); TAB(-1,40);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46); TAB(-1,46);
       PRINT TAB(-1,41); TAB(-1,28); TAB(-1,24);
       RETURN