home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload
/
ShartewareOverload.cdr
/
games
/
darts.zip
/
DARTS.BAS
next >
Wrap
BASIC Source File
|
1987-02-16
|
31KB
|
987 lines
' $LINESIZE:132
DARTS:
DIM PLAYER$(18),SCORE(18,20),NR.TURNS(18),NR.HITS(18),TEAM(18)
DIM STATUS$(20),TOTAL(10)
MASK1$="&'S DARTS SCORED ##.##% OF THE TIME."
MASK2$="& AVERAGED ##.# POINTS PER DART."
MASK3$="& AVERAGED #.# RUNS PER INNING."
MASK4$="YOU HIT #.## TARGETS PER TURN."
MASK5$="YOU AVERAGED ##.# DARTS FOR EACH TARGET."
MASK6$="YOUR AVERAGE FOR TODAY IS ###.##"
MASK7$="YOUR TOTAL FOR THIS ROUND IS ###.##"
MASK8$="YOUR TOTAL FOR ROUND ## WAS ###.##"
MASK9$="&'S CURRENT SCORE IS ##/51"
MASKA1$="┌────"
MASKA2$="┬───"
MASKB1$="│\ \│"
MASKB2$=" ! │"
MASKC1$="├────"
MASKC2$="┼───"
MASKD1$="└────"
MASKD2$="┴───"
MASKE$=" NR. STATUS NR. STATUS"
MASKF$=" ##: \ \ ##: \ \"
MASKG$=" AND BULLS ARE: \ \"
' "....V....1....V....2....V....3....V....4"
' PRINT MASKS USED IN BASEBALL & SHOVE YA' A PENNY
MASKH$=" ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐"
MASKI$=" │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │"
MASKJ$="┌──┼───┼───┼───┼───┼───┼───┼───┼───┼───┤"
MASKK$="│_##│ # │ # │ # │ # │ # │ # │ # │ # │ # │"
MASKL$="├──┼───┼───┼───┼───┼───┼───┼───┼───┼───┤"
MASKM$="└──┴───┴───┴───┴───┴───┴───┴───┴───┴───┘"
' PRINT MASKS USED IN DOUBLE-DOWN
MASKN$=" ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐"
MASKO$=" │ 1 │ 1 │ D │ 1 │ 1 │ T │ 1 │ 2 │ B │"
MASKP$=" │ 5 │ 6 │ O │ 7 │ 8 │ R │ 9 │ 0 │ U │"
MASKQ$="┌──┼───┼───┼───┼───┼───┼───┼───┼───┼───┤"
MASKR$="│_##│###│###│###│###│###│###│###│###│###│"
MASKS$="├──┼───┼───┼───┼───┼───┼───┼───┼───┼───┤"
MASKT$="└──┴───┴───┴───┴───┴───┴───┴───┴───┴───┘"
' PRINT MASK USED IN SHOVE YA' A PENNY
MASKU$="│_##│ ! │ ! │ ! │ ! │ ! │ ! │ ! │ ! │ ! │"
'
' $PAGE
'
WIDTH 40
MAIN.MENU:
CLS
PRINT
PRINT "BOB'S SCOREKEEPER FOR DARTS"
PRINT
PRINT " 1. PLAY SOLITAIR"
PRINT " 2. PLAY RANDOM SOL."
PRINT " 3. PRACTICE"
PRINT " 4. PLAY 301"
PRINT " 5. PLAY CRICKET"
PRINT " 6. PLAY BASEBALL"
PRINT " 7. PLAY FIVES"
PRINT " 8. PLAY SHUTOUT"
PRINT " 9. PLAY KILLER"
PRINT "10. PLAY DOUBLE-DOWN"
PRINT "11. PLAY SHOVE YA' A PENNY"
PRINT
PRINT "99. EXIT PROGRAM"
PRINT
INPUT "ENTER YOUR SELECTION: ",SEL
ON SEL GOTO START.SOLITAIR, _
START.RANDOM, _
START.PRACTICE, _
START.301, _
START.CRICKET, _
START.BASEBALL, _
START.FIVES, _
START.SHUTOUT, _
START.KILLER, _
START.DBLDOWN, _
START.PENNY
IF SEL=99 THEN WIDTH 80: END
BEEP
GOTO MAIN.MENU
'
'------------------------------------------------------------------
'
' $PAGE
'
START.SOLITAIR:
STATUS$(1)="BEHIND": STATUS$(2)="RIGHT ON ": STATUS$(3)="AHEAD"
SCORE=0
TOTAL=0
NUMBER=1
'
PRINT
INPUT "ENTER YOUR GOAL (0-3) ",GOAL
IF GOAL < 0 OR GOAL > 3 THEN BEEP: GOTO START.SOLITAIR
PRINT
'
ENTER.SOL.HITS:
INPUT "HOW MANY HITS? ",HITS
PRINT
IF HITS > 3 THEN BEEP: GOTO ENTER.SOL.HITS
NUMBER=NUMBER+HITS
TOTAL=TOTAL+1
SCORE=SCORE+HITS-GOAL
IF NUMBER > 20 THEN GOTO END.SOLITAIR
PRINT "YOU ARE ";STATUS$(SGN(SCORE)+2);
IF SCORE <> 0 THEN PRINT " BY";ABS(SCORE) ELSE PRINT
PRINT
PRINT NUMBER;"IS THE NEXT TARGET."
PRINT
GOTO ENTER.SOL.HITS
'
END.SOLITAIR:
PRINT "YOU WERE ";STATUS$(SGN(SCORE)+2);
IF SCORE <> 0 THEN PRINT " BY";ABS(SCORE);
PRINT "AT THE END."
PRINT
PRINT USING MASK4$;NUMBER/TOTAL
PRINT
INPUT "ANOTHER GAME? (Y/N) ",ANS$
IF ANS$="Y" OR ANS$="y" THEN GOTO START.SOLITAIR
GOTO MAIN.MENU
'
'------------------------------------------------------------------
'
' $PAGE
'
START.RANDOM:
STATUS$(1)="BEHIND": STATUS$(2)="RIGHT ON ": STATUS$(3)="AHEAD"
SCORE=0
TOTAL=0
LAST.TARGET=99
'
PRINT
INPUT "ENTER YOUR GOAL (DARTS-PER-TARGET) ",GOAL
PRINT
'
FOR ROUND=1 TO 20
SELECT.TARGET:
RANDOMIZE TIMER
TARGET=INT(RND*20)
IF TARGET=LAST.TARGET THEN GOTO SELECT.TARGET
LAST.TARGET=TARGET
IF TARGET=0 THEN TARGET$=" A BULL" ELSE TARGET$=STR$(TARGET)
PRINT "YOUR TARGET IS NOW";TARGET$
ENTER.RANDOM:
PRINT
INPUT "HOW MANY DARTS DID IT TAKE? ",SHOTS$
IF SHOTS$="" THEN BEEP: _
PRINT "YOU MUST ENTER A NUMBER!": _
GOTO ENTER.RANDOM
NUMBER=0
FOR COL=1 TO LEN(SHOTS$)
IF MID$(SHOTS$,COL,1)="0" THEN _
NUMBER=NUMBER+3 _
ELSE COL=LEN(SHOTS$)
NEXT COL
NUMBER=NUMBER+VAL(SHOTS$)
SCORE=SCORE+GOAL-NUMBER
TOTAL=TOTAL+NUMBER
PRINT
PRINT "YOU ARE ";STATUS$(SGN(SCORE)+2);
IF SCORE <> 0 THEN PRINT " BY";ABS(SCORE) ELSE PRINT
PRINT
NEXT ROUND
'
END.RANDOM:
PRINT
PRINT USING MASK5$;TOTAL/20
PRINT
INPUT "ANOTHER GAME? (Y/N) ",ANS$
IF ANS$="Y" OR ANS$="y" THEN GOTO START.RANDOM
GOTO MAIN.MENU
'
'------------------------------------------------------------------
'
' $PAGE
'
START.PRACTICE:
FOR ROUND=1 TO 10
FOR DART=1 TO 5
SCORE(ROUND,DART)=0
NEXT DART
TOTAL(ROUND)=0
NEXT ROUND
'
FOR ROUND=1 TO 10
PRINT
PRINT "ROUND";ROUND
FOR DART=1 TO 5
INPUT "HOW MANY POINTS DID YOU SCORE? ",SCORE(ROUND,DART)
NEXT DART
FOR DART=1 TO 5
TOTAL(ROUND)=TOTAL(ROUND)+SCORE(ROUND,DART)
NEXT DART
PRINT USING MASK7$;TOTAL(ROUND)
NEXT ROUND
'
PRINT
TOTAL=0
FOR ROUND=1 TO 10
PRINT USING MASK8$;ROUND,TOTAL(ROUND)
TOTAL=TOTAL+TOTAL(ROUND)
NEXT ROUND
'
PRINT
PRINT USING MASK6$;TOTAL/10
PRINT
INPUT "PRESS RETURN FOR MAIN MENU...",RET$
GOTO MAIN.MENU
'
'------------------------------------------------------------------
'
' $PAGE
'
START.301:
GOSUB GET.NAMES
FOR PLAYER=1 TO 18
SCORE(PLAYER,0)=301
NEXT PLAYER
TURN=0
NEW.ROUND:
TURN=TURN+1
FOR PLAYER=1 TO NR.PLAYERS
GOSUB CHECK.FOR.TEAM
PRINT TEAM$;", YOU NEED";SCORE(TEAM,0);
IF SCORE(TEAM,0) < 41 _
AND SCORE(TEAM,0)/2 = INT(SCORE(TEAM,0)/2) THEN _
PRINT " ( DOUBLE";SCORE(TEAM,0)/2;")" _
ELSE _
PRINT
NEXT PLAYER
PRINT
FOR PLAYER=1 TO 18
IF PLAYER$(PLAYER)="" THEN GOTO NEXT.301.PLAYER
GOSUB CHECK.FOR.TEAM
PRINT PLAYER$(PLAYER);
INPUT ", HOW MANY DID YOU GET? ",HITS
IF SCORE(TEAM,0)<HITS THEN _
PRINT PLAYER$(PLAYER);" BUSTS!": HITS=0
SCORE(TEAM,0)=SCORE(TEAM,0)-HITS
NR.HITS(PLAYER)=NR.HITS(PLAYER)+HITS
NR.TURNS(PLAYER)=NR.TURNS(PLAYER)+3
IF SCORE(TEAM,0)=0 THEN GOTO END.301
PRINT PLAYER$(PLAYER);", YOUR NEW SCORE IS";SCORE(TEAM,0)
PRINT
NEXT.301.PLAYER:
NEXT PLAYER
GOTO NEW.ROUND
'
END.301:
PRINT
PRINT TEAM$;" WINS THE GAME IN";TURN;"TURNS!"
PRINT
FOR PLAYER=1 TO 18
IF PLAYER$(PLAYER)<>"" AND NR.HITS(PLAYER)<>0 THEN _
PRINT USING MASK2$; _
PLAYER$(PLAYER);NR.HITS(PLAYER)/NR.TURNS(PLAYER)
NEXT PLAYER
PRINT
INPUT "ANOTHER GAME? (Y/N) ",ANS$
IF ANS$="Y" OR ANS$="y" THEN GOTO START.301
GOTO MAIN.MENU
'
'------------------------------------------------------------------
'
' $PAGE
'
START.CRICKET:
GOSUB GET.NAMES
FOR PLAYER=1 TO 18
SCORE(PLAYER,0)=0
FOR NUMBER=15 TO 20
SCORE(PLAYER,NUMBER)=0
NEXT NUMBER
NEXT PLAYER
MASKA$=MASKA1$
MASKC$=MASKC1$
MASKD$=MASKD1$
FOR PLAYER=1 TO NR.PLAYERS
MASKA$=MASKA$+MASKA2$
MASKC$=MASKC$+MASKC2$
MASKD$=MASKD$+MASKD2$
NEXT PLAYER
MASKA$=MASKA$+"┐"
MASKC$=MASKC$+"┤"
MASKD$=MASKD$+"┘"
PADDING=(40-LEN(MASKA$))\2
MASKA$=STRING$(PADDING," ")+MASKA$
MASKB$=STRING$(PADDING," ")+MASKB1$
MASKC$=STRING$(PADDING," ")+MASKC$
MASKD$=STRING$(PADDING," ")+MASKD$
NEW.ROUND.CRICKET:
FOR PLAYER=1 TO 18
IF PLAYER$(PLAYER)="" THEN GOTO NEXT.CRICKET.PLAYER
GOSUB CHECK.FOR.TEAM
GOSUB DISPLAY.CRICKET.BOARD
PRINT PLAYER$(PLAYER);", ";
LINE INPUT "WHAT DID YOU SHOOT? ",SHOTS$
NR.TURNS(PLAYER)=NR.TURNS(PLAYER)+3
PRINT
IF SHOTS$="" THEN GOTO NEXT.CRICKET.PLAYER
GET.NEXT.CRICKET.SHOT:
COL=INSTR(SHOTS$,",")
IF COL=0 THEN SHOT$=SHOTS$: GOTO ADD.TO.CRICKET
SHOT$=LEFT$(SHOTS$,COL-1)
SHOTS$=MID$(SHOTS$,COL+1)
ADD.TO.CRICKET:
IF LEFT$(SHOT$,1)="D" THEN HITS=2: SHOT$=MID$(SHOT$,2) _
ELSE _
IF LEFT$(SHOT$,1)="T" THEN HITS=3: SHOT$=MID$(SHOT$,2) _
ELSE HITS=1
NUMBER=VAL(SHOT$)
IF NUMBER > 14 AND NUMBER < 21 OR SHOT$="B" THEN _
GOTO VALID.CRICKET.SHOT
BEEP
PRINT "'";SHOT$;"' HAS BEEN DISCARDED, WHAT"
INPUT "SHOULD IT HAVE BEEN? ",SHOT$
PRINT
IF SHOT$="" THEN GOTO CHECK.CRICKET.COL
GOTO ADD.TO.CRICKET
'
VALID.CRICKET.SHOT:
SCORE(TEAM,NUMBER)=SCORE(TEAM,NUMBER)+HITS
IF SCORE(TEAM,NUMBER)>3 THEN SCORE(TEAM,NUMBER)=3
NR.HITS(PLAYER)=NR.HITS(PLAYER)+1
'
CHECK.CRICKET.COL:
IF COL <> 0 THEN GOTO GET.NEXT.CRICKET.SHOT
SCORE=0
FOR NUMBER=15 TO 20
SCORE=SCORE+SCORE(TEAM,NUMBER)
NEXT NUMBER
IF SCORE+SCORE(TEAM,0)=21 THEN GOTO END.CRICKET
NEXT.CRICKET.PLAYER:
NEXT PLAYER
GOTO NEW.ROUND.CRICKET
'
END.CRICKET:
GOSUB DISPLAY.CRICKET.BOARD
IF INSTR(TEAM$,"&")=0 THEN WIN$="S" ELSE WIN$=""
PRINT
PRINT TEAM$;" WIN";WIN$;" THE GAME!"
PRINT
FOR PLAYER=1 TO 18
IF PLAYER$(PLAYER)<>"" AND NR.HITS(PLAYER)<>0 THEN _
PRINT USING MASK1$;PLAYER$(PLAYER); _
(NR.HITS(PLAYER)/NR.TURNS(PLAYER))*100
NEXT PLAYER
PRINT
INPUT "ANOTHER GAME? (Y/N) ",ANS$
IF ANS$="Y" OR ANS$="y" THEN GOTO START.CRICKET
GOTO MAIN.MENU
'
DISPLAY.CRICKET.BOARD:
CLS
PRINT
FOR PLAYER2=1 TO NR.PLAYERS
GOSUB CHECK.FOR.TEAM2
PRINT USING "_## IS &";PLAYER2;TEAM2$
NEXT PLAYER2
PRINT STRING$(PADDING+6," ");
FOR PLAYER2=1 TO NR.PLAYERS
PRINT PLAYER2;" ";
NEXT PLAYER2
PRINT MASKA$
FOR NUMBER=20 TO 15 STEP -1
PRINT USING MASKB$;STR$(NUMBER);
FOR PLAYER2=1 TO NR.PLAYERS
PRINT USING MASKB2$; _
MID$(" /X0",SCORE(PLAYER2,NUMBER)+1,1);
NEXT PLAYER2
PRINT
PRINT MASKC$
NEXT NUMBER
PRINT USING MASKB$;"BULL";
FOR PLAYER2=1 TO NR.PLAYERS
PRINT USING MASKB2$;MID$(" /X0",SCORE(PLAYER2,0)+1,1);
NEXT PLAYER2
PRINT
PRINT MASKD$
RETURN
'
'------------------------------------------------------------------
'
' $PAGE
'
START.BASEBALL:
HIGH.SCORE=0
GOSUB GET.NAMES
FOR INNING=1 TO 9
FOR PLAYER=1 TO NR.PLAYERS
SCORE(PLAYER,INNING)=0
NEXT PLAYER
NEXT INNING
FOR INNING=1 TO 9
GOSUB DISPLAY.BASEBALL.BOARD
PRINT
FOR PLAYER=1 TO NR.PLAYERS
PRINT PLAYER$(PLAYER);", YOU NOW HAVE";NR.HITS(PLAYER)
PRINT PLAYER$(PLAYER);
INPUT ", HOW MANY RUNS DID YOU GET? ",HITS
NR.TURNS(PLAYER)=NR.TURNS(PLAYER)+3
NR.HITS(PLAYER)=NR.HITS(PLAYER)+HITS
SCORE(PLAYER,INNING)=HITS
IF NR.HITS(PLAYER) > HIGH.SCORE THEN _
HIGH.PLAYER=PLAYER: HIGH.SCORE=NR.HITS(PLAYER)
PRINT
NEXT PLAYER
NEXT INNING
'
END.BASEBALL:
GOSUB DISPLAY.BASEBALL.BOARD
PRINT
PRINT PLAYER$(HIGH.PLAYER);" WINS THE GAME!"
PRINT
FOR PLAYER=1 TO NR.PLAYERS
PRINT USING MASK3$;PLAYER$(PLAYER);NR.HITS(PLAYER)/9
NEXT PLAYER
PRINT
INPUT "ANOTHER GAME? (Y/N) ",ANS$
IF ANS$="Y" OR ANS$="y" THEN GOTO START.BASEBALL
GOTO MAIN.MENU
'
DISPLAY.BASEBALL.BOARD:
CLS
PRINT "INNING:";INNING
PRINT
FOR PLAYER2=1 TO NR.PLAYERS
GOSUB CHECK.FOR.TEAM2
PRINT USING "_## IS &";PLAYER2;TEAM2$
NEXT PLAYER2
PRINT
PRINT MASKH$
PRINT MASKI$
PRINT MASKJ$
FOR PLAYER2=1 TO NR.PLAYERS
PRINT USING MASKK$;PLAYER2;SCORE(PLAYER2,1); _
SCORE(PLAYER2,2);SCORE(PLAYER2,3); _
SCORE(PLAYER2,4);SCORE(PLAYER2,5); _
SCORE(PLAYER2,6);SCORE(PLAYER2,7); _
SCORE(PLAYER2,8);SCORE(PLAYER2,9)
IF PLAYER2=NR.PLAYERS THEN _
PRINT MASKM$ ELSE PRINT MASKL$
NEXT PLAYER2
RETURN
'
'------------------------------------------------------------------
'
' $PAGE
'
START.FIVES:
GOSUB GET.NAMES
PLAY.FIVES:
CLS
PRINT
FOR PLAYER=1 TO NR.PLAYERS
GOSUB CHECK.FOR.TEAM
PRINT USING MASK9$;TEAM$;NR.HITS(PLAYER)
NEXT PLAYER
PRINT
FOR PLAYER=1 TO NR.PLAYERS
IF NR.HITS(PLAYER) > 38 THEN _
PRINT PLAYER$(PLAYER);", YOU NEED"; _
(51-NR.HITS(PLAYER))*5;" POINTS."
PRINT PLAYER$(PLAYER);
INPUT ", HOW MANY POINTS DID YOU GET? ",SCORE
NR.TURNS(PLAYER)=NR.TURNS(PLAYER)+3
IF (SCORE MOD 5) <> 0 THEN _
PRINT "THAT IS NOT A MULTIPLE OF 5! NO SCORE.": _
GOTO NO.FIVES
IF NR.HITS(PLAYER)+(SCORE/5) > 51 THEN _
PRINT "THATS TOO MANY!": GOTO NO.FIVES
NR.HITS(PLAYER)=NR.HITS(PLAYER)+(SCORE/5)
IF NR.HITS(PLAYER)=51 THEN GOTO END.FIVES
NO.FIVES:
PRINT PLAYER$(PLAYER);", YOU NOW HAVE";NR.HITS(PLAYER)
PRINT
NEXT PLAYER
GOTO PLAY.FIVES
'
END.FIVES:
PRINT
PRINT PLAYER$(PLAYER);" WINS THE GAME!"
PRINT
FOR PLAYER=1 TO NR.PLAYERS
PRINT USING MASK2$;PLAYER$(PLAYER); _
(NR.HITS(PLAYER)*5)/NR.TURNS(PLAYER)
NEXT PLAYER
PRINT
INPUT "ANOTHER GAME? (Y/N) ",ANS$
IF ANS$="Y" OR ANS$="y" THEN GOTO START.FIVES
GOTO MAIN.MENU
'
'------------------------------------------------------------------
'
' $PAGE
'
START.SHUTOUT:
PRINT
PRINT "'STOPPER(S)' GO FIRST,"
PRINT "'SCORER(S)' GO NEXT."
GOSUB GET.NAMES
FOR PLAYER=1 TO 18
STATUS$(0)="OPEN"
SCORE(PLAYER,0)=0
FOR NUMBER=1 TO 20
STATUS$(NUMBER)="OPEN"
NEXT NUMBER
NEXT PLAYER
NEW.ROUND.SHUTOUT:
FOR PLAYER=1 TO 18
IF PLAYER$(PLAYER)="" THEN GOTO NEXT.SHUTOUT.PLAYER
GOSUB CHECK.FOR.TEAM
CLS
PRINT " THE CURRENT STANDINGS ARE:"
PRINT MASKE$
FOR NUMBER=1 TO 10
PRINT USING MASKF$;NUMBER,STATUS$(NUMBER), _
NUMBER+10,STATUS$(NUMBER+10)
NEXT NUMBER
PRINT USING MASKG$;STATUS$(0)
PRINT
IF INSTR(TEAM$,"&")=0 THEN HAVE$=" HAS" ELSE HAVE$=" HAVE"
IF (PLAYER MOD 2)=1 THEN _
PRINT TEAM$;HAVE$;NR.HITS(TEAM);"SHUTOUTS." _
ELSE _
PRINT TEAM$;HAVE$;NR.HITS(TEAM);"POINTS."
PRINT
PRINT PLAYER$(PLAYER);", ";
LINE INPUT "WHAT DID YOU SHOOT? ",SHOTS$
NR.TURNS(PLAYER)=NR.TURNS(PLAYER)+3
PRINT
IF SHOTS$="" THEN GOTO NEXT.SHUTOUT.PLAYER
GET.NEXT.SHUTOUT.SHOT:
COL=INSTR(SHOTS$,",")
IF COL=0 THEN SHOT$=SHOTS$: GOTO ADD.TO.SHUTOUT
SHOT$=LEFT$(SHOTS$,COL-1)
SHOTS$=MID$(SHOTS$,COL+1)
ADD.TO.SHUTOUT:
IF LEFT$(SHOT$,1)="D" THEN HITS=2: SHOT$=MID$(SHOT$,2) _
ELSE _
IF LEFT$(SHOT$,1)="T" THEN HITS=3: SHOT$=MID$(SHOT$,2) _
ELSE HITS=1
NUMBER=VAL(SHOT$)
IF NUMBER > 0 AND NUMBER < 21 OR SHOT$="B" THEN _
GOTO VALID.SHUTOUT.SHOT
BEEP
PRINT "'";SHOT$;"' HAS BEEN DISCARDED, WHAT"
INPUT "SHOULD IT HAVE BEEN? ",SHOT$
PRINT
IF SHOT$="" THEN GOTO CHECK.SHUTOUT.COL
GOTO ADD.TO.SHUTOUT
'
VALID.SHUTOUT.SHOT:
IF (PLAYER MOD 2)=1 THEN STATUS$(NUMBER)="CLOSED": _
NR.HITS(TEAM)=NR.HITS(TEAM)+1: _
SCORE(PLAYER,0)=SCORE(PLAYER,0)+1: _
GOTO CHECK.SHUTOUT.COL
IF STATUS$(NUMBER)="CLOSED" THEN _
GOTO CHECK.SHUTOUT.COL
IF NUMBER=0 THEN NUMBER=25
NR.HITS(TEAM)=NR.HITS(TEAM)+NUMBER*HITS
SCORE(PLAYER,0)=SCORE(PLAYER,0)+NUMBER*HITS
CHECK.SHUTOUT.COL:
IF COL <> 0 THEN GOTO GET.NEXT.SHUTOUT.SHOT
FOR NUMBER=0 TO 20
IF STATUS$(NUMBER)="OPEN" THEN GOTO NEXT.SHUTOUT.PLAYER
NEXT NUMBER
GOTO END.SHUTOUT
NEXT.SHUTOUT.PLAYER:
NEXT PLAYER
GOTO NEW.ROUND.SHUTOUT
'
END.SHUTOUT:
IF INSTR(TEAM$,"&")=0 THEN HAVE$=" HAS" ELSE HAVE$=" HAVE"
PRINT
PRINT TEAM$;HAVE$;" CLOSED THE BOARD!"
PRINT
FOR PLAYER=1 TO 18
TEAM=PLAYER: IF TEAM > NR.PLAYERS THEN TEAM=TEAM-NR.PLAYERS
IF PLAYER$(PLAYER)<>"" THEN _
IF (PLAYER MOD 2)=1 THEN _
PRINT USING MASK1$;PLAYER$(PLAYER); _
(SCORE(PLAYER,0)/NR.TURNS(PLAYER))*100 _
ELSE _
PRINT USING MASK2$;PLAYER$(PLAYER); _
SCORE(PLAYER,0)/(NR.TURNS(PLAYER)/3)
NEXT PLAYER
PRINT
INPUT "ANOTHER GAME? (Y/N) ",ANS$
IF ANS$="Y" OR ANS$="y" THEN GOTO START.SHUTOUT
GOTO MAIN.MENU
'
'------------------------------------------------------------------
'
' $PAGE
'
START.KILLER:
GOSUB GET.NAMES
PRINT "ENTER THE NUMBER OF LIVES"
INPUT "FOR EACH PLAYER/TEAM: ",NR.LIVES
PRINT
FOR PLAYER=1 TO 18
SCORE(PLAYER,0)=0
FOR NUMBER=1 TO 20
SCORE(PLAYER,NUMBER)=NR.LIVES
NEXT NUMBER
NEXT PLAYER
SHOOT.KILLER.TARGETS:
FOR PLAYER=1 TO NR.PLAYERS
GOSUB CHECK.FOR.TEAM
PRINT TEAM$;", ";
INPUT "WHAT IS YOUR TARGET? ",TARGET
PRINT
SCORE(TEAM,0)=TARGET
NEXT PLAYER
NEW.ROUND.KILLER:
FOR PLAYER=1 TO 18
IF PLAYER$(PLAYER)="" THEN GOTO NEXT.KILLER.PLAYER
GOSUB CHECK.FOR.TEAM
TARGET=SCORE(TEAM,0)
IF SCORE(TEAM,TARGET)=0 THEN GOTO NEXT.KILLER.PLAYER
PRINT
FOR PLAYER2=1 TO NR.PLAYERS
GOSUB CHECK.FOR.TEAM2
NUMBER=SCORE(TEAM2,0)
IF SCORE(TEAM2,NUMBER)=0 THEN _
GOTO DISPLAY.NEXT.KILLER.PLAYER2
IF INSTR(TEAM2$,"&")=0 THEN HAVE$=" HAS" ELSE HAVE$=" HAVE"
IF SCORE(TEAM2,NUMBER)=1 THEN _
ONLY$=" ONLY": LIVES$="LIFE" _
ELSE ONLY$="": LIVES$="LIVES"
PRINT TEAM2$;" (";NUMBER;")"; _
HAVE$;ONLY$;SCORE(TEAM2,NUMBER);LIVES$;" LEFT."
DISPLAY.NEXT.KILLER.PLAYER2:
NEXT PLAYER2
PRINT
PRINT PLAYER$(PLAYER);", ";
LINE INPUT "WHAT DID YOU SHOOT? ",SHOTS$
NR.TURNS(PLAYER)=NR.TURNS(PLAYER)+3
PRINT
IF SHOTS$="" THEN GOTO NEXT.KILLER.PLAYER
GET.NEXT.KILLER.SHOT:
COL=INSTR(SHOTS$,",")
IF COL=0 THEN SHOT$=SHOTS$: GOTO ADD.TO.KILLER
SHOT$=LEFT$(SHOTS$,COL-1)
SHOTS$=MID$(SHOTS$,COL+1)
ADD.TO.KILLER:
IF LEFT$(SHOT$,1)="D" THEN HITS=2: SHOT$=MID$(SHOT$,2) _
ELSE _
IF LEFT$(SHOT$,1)="T" THEN HITS=3: SHOT$=MID$(SHOT$,2) _
ELSE HITS=1
NUMBER=VAL(SHOT$)
IF NUMBER > 0 AND NUMBER < 21 OR SHOT$="B" THEN _
GOTO VALID.KILLER.SHOT
BEEP
PRINT "'";SHOT$;"' HAS BEEN DISCARDED, WHAT"
INPUT "SHOULD IT HAVE BEEN? ",SHOT$
PRINT
IF SHOT$="" THEN GOTO CHECK.KILLER.COL
GOTO ADD.TO.KILLER
'
VALID.KILLER.SHOT:
FOR PLAYER2=1 TO NR.PLAYERS
IF SCORE(PLAYER2,0) <> NUMBER THEN GOTO NEXT.KILLER.PLAYER2
SCORE(PLAYER2,NUMBER)=SCORE(PLAYER2,NUMBER)-HITS
IF SCORE(PLAYER2,NUMBER)<0 THEN SCORE(PLAYER2,NUMBER)=0
NR.HITS(PLAYER)=NR.HITS(PLAYER)+1
NEXT.KILLER.PLAYER2:
NEXT PLAYER2
CHECK.KILLER.COL:
IF COL <> 0 THEN GOTO GET.NEXT.KILLER.SHOT
SCORE=0
FOR PLAYER2=1 TO NR.PLAYERS
NUMBER=SCORE(PLAYER2,0)
SCORE=SCORE+SCORE(PLAYER2,NUMBER)
NEXT PLAYER2
FOR PLAYER2=1 TO NR.PLAYERS
NUMBER=SCORE(PLAYER2,0)
IF SCORE(PLAYER2,NUMBER)=SCORE THEN _
PLAYER=PLAYER2: GOSUB CHECK.FOR.TEAM: _
GOTO END.KILLER
NEXT PLAYER2
NEXT.KILLER.PLAYER:
NEXT PLAYER
GOTO NEW.ROUND.KILLER
'
END.KILLER:
IF INSTR(TEAM$,"&")=0 THEN WIN$="S" ELSE WIN$=""
PRINT
PRINT TEAM$;" WIN";WIN$;" THE GAME!"
PRINT
FOR PLAYER=1 TO 18
IF PLAYER$(PLAYER)<>"" AND NR.TURNS(PLAYER)<>0 THEN _
PRINT USING MASK1$;PLAYER$(PLAYER); _
(NR.HITS(PLAYER)/NR.TURNS(PLAYER))*100
NEXT PLAYER
PRINT
INPUT "ANOTHER GAME? (Y/N) ",ANS$
IF ANS$="Y" OR ANS$="y" THEN GOTO START.KILLER
GOTO MAIN.MENU
'
'------------------------------------------------------------------
'
' $PAGE
'
START.DBLDOWN:
RESTORE
DATA "15's","16's","ANY DOUBLES","17's","18's"
DATA "ANY TRIPLES","19's","20's","BULLS"
'
PRINT
GOSUB GET.NAMES
FOR PLAYER=1 TO 18
NR.HITS(PLAYER)=40
FOR NUMBER=0 TO 9
SCORE(PLAYER,NUMBER)=0
NEXT NUMBER
NEXT PLAYER
NEW.ROUND.DBLDOWN:
FOR ROUND=1 TO 9
READ TARGET$
FOR PLAYER=1 TO 18
IF PLAYER$(PLAYER)="" THEN GOTO NEXT.DBLDOWN.PLAYER
GOSUB DISPLAY.DBLDOWN.BOARD
GOSUB CHECK.FOR.TEAM
PRINT
IF INSTR(TEAM$,"&")=0 THEN HAVE$=" HAS" ELSE HAVE$=" HAVE"
PRINT TEAM$;HAVE$;NR.HITS(TEAM);"POINTS."
PRINT PLAYER$(PLAYER);", ";
LINE INPUT "WHAT DID YOU SHOOT? ",SHOTS$
NR.TURNS(PLAYER)=NR.TURNS(PLAYER)+3
PRINT
IF SHOTS$ <> "" THEN GOTO GET.NEXT.DBLDOWN.SHOT
'
HITS=NR.HITS(TEAM)/2
NR.HITS(TEAM)=NR.HITS(TEAM)\2
IF HITS <> NR.HITS(TEAM) THEN _
NR.HITS(TEAM)=NR.HITS(TEAM)+1
SCORE(PLAYER,ROUND)=NR.HITS(TEAM)
GOTO NEXT.DBLDOWN.PLAYER
'
GET.NEXT.DBLDOWN.SHOT:
COL=INSTR(SHOTS$,",")
IF COL=0 THEN SHOT$=SHOTS$: GOTO ADD.TO.DBLDOWN
SHOT$=LEFT$(SHOTS$,COL-1)
SHOTS$=MID$(SHOTS$,COL+1)
ADD.TO.DBLDOWN:
IF LEFT$(SHOT$,1)="D" THEN HITS=2: SHOT$=MID$(SHOT$,2) _
ELSE _
IF LEFT$(SHOT$,1)="T" THEN HITS=3: SHOT$=MID$(SHOT$,2) _
ELSE HITS=1
NUMBER=VAL(SHOT$)
IF NUMBER > 0 AND NUMBER < 21 OR SHOT$="B" THEN _
GOTO VALID.DBLDOWN.SHOT
BEEP
PRINT "'";SHOT$;"' HAS BEEN DISCARDED, WHAT"
INPUT "SHOULD IT HAVE BEEN? ",SHOT$
PRINT
IF SHOT$="" THEN GOTO CHECK.DBLDOWN.COL
GOTO ADD.TO.DBLDOWN
'
VALID.DBLDOWN.SHOT:
IF ROUND=3 AND HITS=2 THEN GOTO SCORE.DBLDOWN
IF ROUND=6 AND HITS=3 THEN GOTO SCORE.DBLDOWN
IF ROUND=9 AND NUMBER=0 THEN GOTO SCORE.DBLDOWN
IF NUMBER=VAL(TARGET$) THEN GOTO SCORE.DBLDOWN
GOTO CHECK.DBLDOWN.COL
SCORE.DBLDOWN:
IF NUMBER=0 THEN NUMBER=25
NR.HITS(TEAM)=NR.HITS(TEAM)+NUMBER*HITS
SCORE(TEAM,ROUND)=NR.HITS(TEAM)
SCORE(PLAYER,0)=SCORE(PLAYER,0)+1
CHECK.DBLDOWN.COL:
IF COL <> 0 THEN GOTO GET.NEXT.DBLDOWN.SHOT
NEXT.DBLDOWN.PLAYER:
NEXT PLAYER
NEXT ROUND
'
END.DBLDOWN:
GOSUB DISPLAY.DBLDOWN.BOARD
PRINT
FOR PLAYER=1 TO 18
TEAM=PLAYER: IF TEAM > NR.PLAYERS THEN TEAM=TEAM-NR.PLAYERS
IF PLAYER$(PLAYER)<>"" THEN _
PRINT USING MASK1$;PLAYER$(PLAYER); _
(SCORE(PLAYER,0)/NR.TURNS(PLAYER))*100
NEXT PLAYER
PRINT
INPUT "ANOTHER GAME? (Y/N) ",ANS$
IF ANS$="Y" OR ANS$="y" THEN GOTO START.DBLDOWN
GOTO MAIN.MENU
'
DISPLAY.DBLDOWN.BOARD:
CLS
PRINT "THE CURRENT TARGETS ARE ";TARGET$
PRINT
FOR PLAYER2=1 TO NR.PLAYERS
GOSUB CHECK.FOR.TEAM2
PRINT USING "_## IS &";PLAYER2;TEAM2$
NEXT PLAYER2
PRINT
PRINT MASKN$
PRINT MASKO$
PRINT MASKP$
PRINT MASKQ$
FOR PLAYER2=1 TO NR.PLAYERS
PRINT USING MASKR$;PLAYER2;SCORE(PLAYER2,1); _
SCORE(PLAYER2,2);SCORE(PLAYER2,3); _
SCORE(PLAYER2,4);SCORE(PLAYER2,5); _
SCORE(PLAYER2,6);SCORE(PLAYER2,7); _
SCORE(PLAYER2,8);SCORE(PLAYER2,9)
IF PLAYER2=NR.PLAYERS THEN _
PRINT MASKT$ ELSE PRINT MASKS$
NEXT PLAYER2
RETURN
'
'------------------------------------------------------------------
'
' $PAGE
'
START.PENNY:
GOSUB GET.NAMES
FOR PLAYER=1 TO 18
FOR NUMBER=0 TO 9
SCORE(PLAYER,NUMBER)=0
NEXT NUMBER
NEXT PLAYER
NEW.ROUND.PENNY:
FOR PLAYER=1 TO 18
IF PLAYER$(PLAYER)="" THEN GOTO NEXT.PENNY.PLAYER
GOSUB CHECK.FOR.TEAM
GOSUB DISPLAY.PENNY.BOARD
PRINT
PRINT PLAYER$(PLAYER);", ";
LINE INPUT "WHAT DID YOU SHOOT? ",SHOTS$
NR.TURNS(PLAYER)=NR.TURNS(PLAYER)+3
PRINT
IF SHOTS$="" THEN GOTO NEXT.PENNY.PLAYER
GET.NEXT.PENNY.SHOT:
COL=INSTR(SHOTS$,",")
IF COL=0 THEN SHOT$=SHOTS$: GOTO ADD.TO.PENNY
SHOT$=LEFT$(SHOTS$,COL-1)
SHOTS$=MID$(SHOTS$,COL+1)
ADD.TO.PENNY:
IF LEFT$(SHOT$,1)="D" THEN HITS=2: SHOT$=MID$(SHOT$,2) _
ELSE _
IF LEFT$(SHOT$,1)="T" THEN HITS=3: SHOT$=MID$(SHOT$,2) _
ELSE HITS=1
NUMBER=VAL(SHOT$)
IF NUMBER > 0 AND NUMBER < 10 THEN _
GOTO VALID.PENNY.SHOT
BEEP
PRINT "'";SHOT$;"' HAS BEEN DISCARDED, WHAT"
INPUT "SHOULD IT HAVE BEEN? ",SHOT$
PRINT
IF SHOT$="" THEN GOTO CHECK.PENNY.COL
GOTO ADD.TO.PENNY
'
VALID.PENNY.SHOT:
START=TEAM
NEXT.PENNY.LOOP:
FOR PLAYER2=START TO NR.PLAYERS
IF SCORE(PLAYER2,NUMBER) < 3 THEN _
SCORE(PLAYER2,NUMBER)=SCORE(PLAYER2,NUMBER)+HITS: _
HITS=0
IF SCORE(PLAYER2,NUMBER) > 3 THEN _
HITS=SCORE(PLAYER2,NUMBER)-3: _
SCORE(PLAYER2,NUMBER)=3
IF HITS=0 THEN _
NR.HITS(PLAYER)=NR.HITS(PLAYER)+1: _
GOTO CHECK.PENNY.COL
NEXT.PENNY.PLAYER2:
NEXT PLAYER2
IF START <> 1 THEN _
START=1: GOTO NEXT.PENNY.LOOP
CHECK.PENNY.COL:
IF COL <> 0 THEN GOTO GET.NEXT.PENNY.SHOT
SCORE=0
FOR NUMBER=1 TO 9
SCORE=SCORE+SCORE(TEAM,NUMBER)
NEXT NUMBER
IF SCORE+SCORE(TEAM,0)=27 THEN GOTO END.PENNY
NEXT.PENNY.PLAYER:
NEXT PLAYER
GOTO NEW.ROUND.PENNY
'
END.PENNY:
GOSUB DISPLAY.PENNY.BOARD
IF INSTR(TEAM$,"&")=0 THEN WIN$="S" ELSE WIN$=""
PRINT
PRINT TEAM$;" WIN";WIN$;" THE GAME!"
PRINT
FOR PLAYER=1 TO 18
IF PLAYER$(PLAYER)<>"" THEN _
PRINT USING MASK1$;PLAYER$(PLAYER); _
(NR.HITS(PLAYER)/NR.TURNS(PLAYER))*100
NEXT PLAYER
PRINT
INPUT "ANOTHER GAME? (Y/N) ",ANS$
IF ANS$="Y" OR ANS$="y" THEN GOTO START.PENNY
GOTO MAIN.MENU
'
DISPLAY.PENNY.BOARD:
CLS
PRINT
FOR PLAYER2=1 TO NR.PLAYERS
GOSUB CHECK.FOR.TEAM2
PRINT USING "_## IS &";PLAYER2;TEAM2$
NEXT PLAYER2
PRINT
PRINT MASKH$
PRINT MASKI$
PRINT MASKJ$
FOR PLAYER2=1 TO NR.PLAYERS
PRINT USING MASKU$;PLAYER2; _
MID$(" /X0",SCORE(PLAYER2,1)+1,1); _
MID$(" /X0",SCORE(PLAYER2,2)+1,1); _
MID$(" /X0",SCORE(PLAYER2,3)+1,1); _
MID$(" /X0",SCORE(PLAYER2,4)+1,1); _
MID$(" /X0",SCORE(PLAYER2,5)+1,1); _
MID$(" /X0",SCORE(PLAYER2,6)+1,1); _
MID$(" /X0",SCORE(PLAYER2,7)+1,1); _
MID$(" /X0",SCORE(PLAYER2,8)+1,1); _
MID$(" /X0",SCORE(PLAYER2,9)+1,1)
IF PLAYER2=NR.PLAYERS THEN _
PRINT MASKM$ ELSE PRINT MASKL$
NEXT PLAYER2
'
RETURN
'------------------------------------------------------------------
'
' $PAGE
'
GET.NAMES:
FOR PLAYER=1 TO 18
PLAYER$(PLAYER)=""
NR.TURNS(PLAYER)=0
NR.HITS(PLAYER)=0
TEAM(PLAYER)=0
NEXT PLAYER
PRINT
INPUT "HOW MANY PLAYERS? ",NR.PLAYERS
PRINT
IF NR.PLAYERS<1 OR NR.PLAYERS>9 THEN GOTO GET.NAMES
FOR PLAYER=1 TO NR.PLAYERS
ENTER.NAME:
PRINT "ENTER PLAYER #";MID$(STR$(PLAYER),2);
INPUT "'S NAME: ",PLAYER$(PLAYER)
IF PLAYER$(PLAYER)="" THEN BEEP: GOTO ENTER.NAME
IF INSTR(PLAYER$(PLAYER)," & ") > 0 THEN GOSUB SPLIT.TEAM
PRINT
NEXT PLAYER
RETURN
'
SPLIT.TEAM:
COL=INSTR(PLAYER$(PLAYER)," & ")
PLAYER$(NR.PLAYERS+PLAYER)=MID$(PLAYER$(PLAYER),COL+3)
PLAYER$(PLAYER)=LEFT$(PLAYER$(PLAYER),COL-1)
TEAM(PLAYER)=1
TEAM(NR.PLAYERS+PLAYER)=1
RETURN
'
CHECK.FOR.TEAM:
TEAM=PLAYER
TEAM$=PLAYER$(PLAYER)
IF TEAM(PLAYER)=0 THEN RETURN
IF PLAYER <= NR.PLAYERS THEN GOTO PLAYER.IS.CAPTAIN
TEAM=PLAYER-NR.PLAYERS
TEAM$=PLAYER$(TEAM)+" & "+PLAYER$(PLAYER)
RETURN
PLAYER.IS.CAPTAIN:
TEAM$=PLAYER$(PLAYER)+" & "+PLAYER$(NR.PLAYERS+PLAYER)
RETURN
'
CHECK.FOR.TEAM2:
TEAM2=PLAYER2
TEAM2$=PLAYER$(PLAYER2)
IF TEAM(PLAYER2)=0 THEN RETURN
IF PLAYER2 <= NR.PLAYERS THEN GOTO PLAYER2.IS.CAPTAIN
TEAM2=PLAYER2-NR.PLAYERS
TEAM2$=PLAYER$(TEAM2)+" & "+PLAYER$(PLAYER2)
RETURN
PLAYER2.IS.CAPTAIN:
TEAM2$=PLAYER$(PLAYER2)+" & "+PLAYER$(NR.PLAYERS+PLAYER2)
RETURN