!***************************************************************************!
!                                                                           !
!                                HORSES.BAS                                 !
!                      Bet on the horses at the track.                      !
!                                                                           !
!***************************************************************************!
!Copyright (C) 1986 by Centauri.  All Rights Reserved.
!(512) 631-9141
!Written by: Scot Brinkley
!
!Edit History:
!1.0 01-Mar-83 created. /SB

       PROGRAM HORSES,1.0

       RANDOMIZE
BEGIN:
       MAP1 REPLY,S,1
       MAP1 CHANGES,S,1
       MAP1 HYPHEN,S,80
       MAP1 CRITTER1,S,4,"~/\'"
       MAP1 CRITTER2,S,4,"~>>'"
       MAP1 CRITTER'SPACE,S,4,"    "
       MAP1 JOBNAM,S,6

       MAP1 HOSS(5),S,1
       MAP1 PLACED(5),F
       MAP1 TABLE(5,2),F
        TABLE(1,1) = 1 : TABLE(1,2) = 0
        TABLE(2,1) = 1 : TABLE(2,2) = 0
        TABLE(3,1) = 1 : TABLE(3,2) = 0
        TABLE(4,1) = 1 : TABLE(4,2) = 0
        TABLE(5,1) = 1 : TABLE(5,2) = 0

       MAP1 STALL(5),S,20
        STALL(1)   = "#1  ED'S FOLLEY     "
        STALL(2)   = "#2  MARY'S CHOICE   "
        STALL(3)   = "#3  LAGGING LAURIE  "
        STALL(4)   = "#4  EAGER ELAINE    "
        STALL(5)   = "#5  ANEVA'S SONG    "

       ?TAB(-1,0);TAB(-1,29);
       FOR CCSI = 1 TO 20
        ?TAB(12,20);" C E N T A U R I   S T A K E S"
        FOR CCSII = 1 TO 800 : NEXT CCSII
        ?TAB(12,20);"C E N T A U R I   S T A K E S "
       NEXT CCSI
        ?TAB(12,20);"C E N T A U R I   S T A K E S "
        ?TAB(14,20);"      by  Scot Brinkley       "
       FOR CCSIII = 1 TO 10000 : NEXT CCSIII

       ?TAB(-1,0);TAB(-1,28);
       REPLY   = " "
       ?TAB(10,10);"DO YOU PREFER TO ENTER HORSES NAMES, YOURSELF <Y/N> :";:INPUT REPLY
       IF UCS(REPLY[1,1]) <> "Y" GOTO AROUND5
RENAME:
       CHANGES = " "
       ?TAB(12,20);"ENTER NAME OF HORSE #1 : ";:INPUT STALL(1) : STALL(1) = "#1  " + STALL(1)
       ?TAB(13,20);"ENTER NAME OF HORSE #2 : ";:INPUT STALL(2) : STALL(2) = "#2  " + STALL(2)
       ?TAB(14,20);"ENTER NAME OF HORSE #3 : ";:INPUT STALL(3) : STALL(3) = "#3  " + STALL(3)
       ?TAB(15,20);"ENTER NAME OF HORSE #4 : ";:INPUT STALL(4) : STALL(4) = "#4  " + STALL(4)
       ?TAB(16,20);"ENTER NAME OF HORSE #5 : ";:INPUT STALL(5) : STALL(5) = "#5  " + STALL(5)
       ?TAB(22,1);"ANY CHANGE ";:INPUT CHANGES
       IF UCS(CHANGES[1,1]) = "Y" GOTO RENAME
AROUND5:
       ?TAB(-1,0);TAB(-1,29);

ODDS'CAL:
       FOR HOSS = 1 TO 5
     REHOSS:
        ODDS = INT(RND(HOSS)*100)
        IF ODDS <1 OR ODDS >20 GOTO REHOSS
        TABLE(HOSS,2) = ODDS
       NEXT HOSS


       FOR X = 1 TO 10
        HYPHEN = HYPHEN + "--------"
       NEXT X

       XCALL JOBNAM,JOBNAM
       XCALL STRIP,JOBNAM
       LOOKUP JOBNAM+".RAC",FOUND
       IF FOUND CALL OLD'MONEY
       IF WINNINGS=0 WINNINGS = 100

BEGIN1:
       IF WINNINGS < -200 CALL BIT'THE'BIG'ONE : NO = 99 : GOTO BYE'BYE
       COUNTER = COUNTER + 1
       RUNS   = 0
       PLACES = 0
       SWITCH = 0
       CALL GROUND
       IF COUNTER = 1 THEN CALL CROWD : CALL SHOW'BAL
       CALL HORSES
       CALL BETS
       GOTO RACE
!       GOTO END
LOOP1:

     GROUND:
       FOR X = 3 TO 18 STEP 3
        ?TAB(X,1);HYPHEN[1,78]
       NEXT X
       FOR ME = 1 TO 5
        TABLE(ME,1) = 1
        HOSS(ME)    = "0"
        PLACED(ME)  = 0
       NEXT ME
     RETURN

     HORSES:
       S = 1
       FOR H = 5 TO 17 STEP 3
        ?TAB(H,1);SPACE(80);
        ?TAB(H,1);CRITTER1;
        IF TABLE(S,2) < 1 THEN TABLE(S,2) = 1
        IF TABLE(S,2) >20 THEN TABLE(S,2) = 20
        ?TAB(H-1,1);STALL(S);" ODDS : ";TABLE(S,2);" TO 1";
        S = S + 1
       NEXT H
     RETURN

     CROWD:
       FOR A = 1 TO 50
     RERAND:
        R=INT(RND(A)*100) !: ?TAB(1,60);"ROW = ";R;
        C=INT(RND(A)*100) !: ?TAB(2,60);"COL = ";C;
        IF R < 1 OR R > 2 GOTO RERAND
        IF C < 1 OR C > 78 GOTO RERAND
        IF A/30 = INT(A/30) THEN ?TAB(R,C);"~o";: GOTO BYE'CRD
        IF A/20 = INT(A/20) THEN ?TAB(R,C);"\o/";: GOTO BYE'CRD
        IF A/10 = INT(A/10) THEN ?TAB(R,C);"o|";: GOTO BYE'CRD
        ?TAB(R,C);"o";
     BYE'CRD:
       NEXT A
     RETURN

     BETS:
       BET = 0
       ?TAB(19,1);SPACE(78)
       ?TAB(19,1);"(Enter 99 to exit)";TAB(-1,28);
       ?TAB(21,1);"PLACE YOUR BETS :    1)  HORSE #";:INPUT NO
     BYE'BYE:
       IF NO = 99 CALL EXIT
       IF NO < 1 OR NO > 5 GOTO BETS
       FOR PLACET = 4 TO 16 STEP 3
        ?TAB(PLACET,4);SPACE(50);
        FOR X = 1 TO 800 : NEXT X      !Delay loop.
       NEXT PLACET
       ?TAB(19,1);SPACE(20)
     REODD:
       ODDS = TABLE(NO,2)
       IF ODDS <2 THEN ODDS = 2
       IF ODDS >20 THEN ODDS = 20
       IF ODDS = 2 : GOTO AFTER
       ?TAB(21,48);"ODDS ON HORSE #";NO;" ARE ";ODDS;"-TO-1";
       GOTO WAYAFTER
     AFTER:
       ?TAB(21,48);"ODDS ON HORSE #";NO;" ARE EVEN.";
     WAYAFTER:
       ?TAB(22,1);SPACE(80)
       ?TAB(22,1);"                     2)  WAGER $";:INPUT BET
       ?TAB(23,1);SPACE(35)
       IF BET <= 0 GOTO BETS
       IF BET > WINNINGS AND WINNINGS > 0 CALL BAD'WAGER : GOTO BETS
       PAYOFF = (BET*ODDS)
       ?TAB(22,48);"PAYOFF : ";PAYOFF USING "$#,###,###,###,###.##";
       ?TAB(-1,29);
     RETURN

     RACE:
       RUNS   = RUNS + 1
     OVER:
        HORSE = INT(RND(RUNS)*100)
        IF HORSE <1 OR HORSE >5 GOTO OVER
        SWITCH = 1
        FOR TIMES = 1 TO 5
         IF HOSS(TIMES) = "0" THEN SWITCH = 0
        NEXT TIMES
        IF SWITCH = 1 GOTO END
        IF HOSS(HORSE) = "1" GOTO OVER
        IF (RUNS/2) = INT(RUNS/2) THEN ?TAB((HORSE*3)+2,TABLE(HORSE,1)+4);CRITTER1;: GOTO BYE
        ?TAB((HORSE*3)+2,TABLE(HORSE,1)+4);CRITTER2;
     BYE:
        ?TAB((HORSE*3)+2,TABLE(HORSE,1));CRITTER'SPACE;
        TABLE(HORSE,1) = TABLE(HORSE,1) + 1
        IF TABLE(HORSE,1) > 72 THEN HOSS(HORSE) = "1" : PLACES = PLACES + 1 :  PLACED(HORSE) = PLACES
        IF PLACED(HORSE) = 1 THEN ?TAB(5+(HORSE*3)-3,30);"WIN";: WINNER = HORSE
        IF PLACED(HORSE) = 2 THEN ?TAB(5+(HORSE*3)-3,29);"PLACE";: PLACER = HORSE
        IF PLACED(HORSE) = 3 THEN ?TAB(5+(HORSE*3)-3,30);"SHOW";: SHOWER = HORSE
        IF PLACED(HORSE) = 4 THEN LOSSER1 = HORSE
        IF PLACED(HORSE) = 5 THEN LOSSER2 = HORSE
       GOTO RACE
END:
       FOR SHOW = 1 TO 5
        IF PLACED(SHOW) = 1 THEN TABLE(SHOW,2) = (TABLE(SHOW,2)-5)
        IF PLACED(SHOW) = 2 THEN TABLE(SHOW,2) = (TABLE(SHOW,2)-2)
        IF PLACED(SHOW) = 3 THEN TABLE(SHOW,2) = (TABLE(SHOW,2)-0)
        IF PLACED(SHOW) = 4 THEN TABLE(SHOW,2) = (TABLE(SHOW,2)+2)
        IF PLACED(SHOW) = 5 THEN TABLE(SHOW,2) = (TABLE(SHOW,2)+5)
       NEXT SHOW
       IF WINNER = NO THEN ?TAB(19,30);"YOU'RE A WINNER !!!" : WINNINGS = ((WINNINGS + PAYOFF) - BET)
       IF PLACER = NO THEN ?TAB(19,30);"YOU PLACED !!!     " : WINNINGS = ((WINNINGS + (PAYOFF*.30)) - BET)
       IF SHOWER = NO THEN ?TAB(19,30);"YOU SHOWED !!!     " : WINNINGS = ((WINNINGS + (PAYOFF*.10)) - BET)
       IF NO <> WINNER AND NO <> PLACER AND NO <> SHOWER THEN WINNINGS = (WINNINGS - BET)
       IF WINNINGS < 0 GOTO GO'TO1
       ?TAB(23,1);SPACE(80);
       ?TAB(23,1);"WINNINGS ARE : $";WINNINGS USING "#,###,###,###.##"
       GOTO GO'TO2
GO'TO1:
       ?TAB(23,1);"LOSSES ARE   : $";WINNINGS USING "#,###,###,###.##"
GO'TO2:
       ?TAB(-1,28);
       ?TAB(23,65);"CR TO CONTINUE";:INPUT LINE, A$
       ?TAB(23,50);SPACE(31);
       ?TAB(21,48);SPACE(33);
       ?TAB(22,1);SPACE(10);
       ?TAB(22,48);SPACE(33);
       ?TAB(21,34);SPACE(2);
       ?TAB(5,29);SPACE(10);
       ?TAB(8,29);SPACE(10);
       ?TAB(11,29);SPACE(10);
       ?TAB(14,29);SPACE(10);
       ?TAB(17,29);SPACE(10);
       GOTO BEGIN1
BIT'THE'BIG'ONE:
       ?TAB(18,1);SPACE(80);
       ?TAB(19,1);SPACE(80);
       ?TAB(20,1);SPACE(80);
       ?TAB(21,1);SPACE(80);
       ?TAB(22,1);SPACE(80);
       ?TAB(23,1);SPACE(75);
       ?TAB(20,20);"YOU BIT IT - NO MORE CREDIT  (AL WILL BE LOOKING FOR YOU!)"
       ?TAB(22,20);"   LOSSES : ";WINNINGS USING "$ #,###.##"
       FOR DELAY = 1 TO 15000 : NEXT DELAY
       RETURN
BAD'WAGER:
       ?TAB(19,30);"CAN'T BET MORE THAN YOU HAVE !"
       CALL SHOW'BAL
       FOR DELAY = 1 TO 15000 : NEXT DELAY
       ?TAB(19,20);SPACE(50)
       RETURN
SHOW'BAL:
       ?TAB(23,1);SPACE(80);
       ?TAB(23,1);"HOLDINGS ARE : $";WINNINGS USING " #,###,###,###.##"
       ?TAB(22,1);
       RETURN
OLD'MONEY:
       IF WINNINGS=100 RETURN
       OPEN #1,JOBNAM+".RAC",INPUT
       INPUT LINE #1,WINNINGS
       CLOSE #1
       RETURN
EXIT:
       ?TAB(24,1);TAB(-1,10);TAB(-1,28);
       ?TAB(24,79);TAB(-1,33);TAB(24,1);TAB(-1,32);
       IF WINNINGS>1000 &
       ?"----------*-------   CHICKEN!  --------*-------";
       IF WINNINGS<0 &
       ?"<<<<<<<<<   YOU'RE IN BIG TROUBLE NOW!!!!  >>>>>>>>>";
       IF WINNINGS=0 &
       ?"*******  THE BANK WILL OFFER CREDIT IF YOU WANT TO PLAY AGAIN. ****";
       IF WINNINGS<1000 AND WINNINGS>0 &
       ?"^^^^^   SORRY, CAN'T TAKE YOUR WINNINGS WITH YOU!  ^^^^";
       ?CHR(7);
       FOR DELAY = 1 TO 10000 : NEXT DELAY
       OPEN #1,JOBNAM+".RAC",OUTPUT
       PRINT #1,WINNINGS
       CLOSE #1
       END