'===========================================================================
' Subject: WHEEL OF WEALTH PB                 Date: 01-17-96 (10:42)       
'  Author: The ABC Programmer                 Code: PB                     
'  Origin: Check GAMES.ABC For QB Version   Packet: PB.ABC
'===========================================================================
'======================================================
' WHEEL OF WEALTH PB          Programmed by William Yu
' PB 3.x version              Converted: 01-17-96
'
' NOTES:
'   Since PB doesn't support PCOPY, I had to
'   BSAVE/BLOAD the images.  This will affect the game
'   and slow it down considerably.  Call me lazy, but
'   I didn't want to use GET and PUT and create extra
'   SUBs.  Do what you wish to fix it.  It might even
'   patch up the graphics (which may become
'   disoriented because of BSAVE/BLOAD).
'   Also of note, I don't know much about PB, so the
'   variables are (for lack of better words) mangled.
'   Even though the variables are SHARED, they don't
'   quite generate the same value.
'
'   After playing the game, to save disk space
'   goto DOS and type:  DEL Image*.*
'
' * Puzzles are stored in DATA statements
' * Up to 3 players
' * Like TV Game Show WHEEL OF FORTUNE (Without Vanna)
'
' USE WITHIN COMMERCIAL PRODUCTS OR SALE OF THIS PIECE
' OF CODE IS STRICTLY PROHIBITED.  PUBLIC DOMAIN CODE.
'
' WHEEL OF FORTUNE is copyrighted by their respective
' distributors.  Any similarities to the Video Game
' is strictly coincidental.
'======================================================
DEFINT A-Z  ' Define all numerical variables as INTEGER for more speed
'DECLARE SUB BigChar (Word$, XCor%, YCor%, Colr%, Opt)
DECLARE SUB Bonusland ()
DECLARE SUB Drawgrid ()
DECLARE SUB Filterpuzzle (Puzzles$(), P%)
DECLARE SUB Mainprogram (Puzzles$(), P%)
DECLARE SUB Letterinpuzzle (Letter$, Letter)
DECLARE SUB Spinwheel ()
DECLARE SUB Colorcode (Col%)
DECLARE SUB Drawplayers ()
DECLARE SUB Showplayers ()
DECLARE SUB Whoseturn ()
DECLARE SUB Showleader ()

DIM Puzzles$(50), NoRepeat(50), Puzz$(8)

SHARED Puzzles$()          ' Max # of Puzzles
SHARED NoRepeat()          ' Dimension same as Max # of puzzles
SHARED InCase$, InCaseVowel$
SHARED Puzz$()
SHARED Money, InPuzzle, Turn, Rn, Finish, Bonus, Maximum
SHARED PlayerMoney!
SHARED P1Money!, P2Money!, P3Money!
SHARED M1P!, M2P!, M3P!

SHARED Players         ' 1-3 Players (1 Player no score tallied)
SHARED Rounds          ' Number of Rounds per game
                       ' CAN NOT be more than the Maximum # of puzzles
                       '  minus "BLANK" categories because it can not be
                       '  used in the BONUS Round
SHARED False
SHARED True

Players = 3
Rounds = 6
False = 0
True = NOT False

Rn = 1                    ' Round Number
WT = 1                    ' Turn = 1
Turn = WT                 ' Create another variable for swapping later
Finish = False            ' Finished Puzzle?  Nope.
Bonus = False             ' Regular round not bonus round

SCREEN 7, 0, 0, 0         ' EGA 320x200 (16 Colors)  Active Page 0

READ Maximum              ' Read maximum puzzles

FOR I = 1 TO Maximum
  READ Puzzles$(I)        ' Read each puzzle and store in array Puzzles$()
NEXT I

DO
  DrawPlayers             ' CALL DrawPlayers Subroutine
  
  DrawGrid                ' CALL DrawGrid Subroutine
  
  DO
    RANDOMIZE TIMER             ' Randomly select a puzzle
    P = INT(RND * Maximum) + 1
    FOR R = 1 TO Maximum        ' But make sure it's not the same puzzle!
      IF NoRepeat(R) = P THEN Repeat = True: EXIT FOR
    NEXT R
    IF NoRepeat(R) <> P THEN Repeat = False
  LOOP UNTIL Repeat = False
  NoRepeat(Rn) = P
  FilterPuzzle Puzzles$(), P    ' Parse puzzle to readable format
  
  DO
    MainProgram Puzzles$(), P   ' CALL MainProgram (Brunt of the game)
    IF Finish THEN EXIT DO      ' Current round finished
    IF Players > 1 THEN ShowPlayers
  LOOP
  
  Rn = Rn + 1                ' Next Round
  WT = WT + 1                ' Whose Turn
  IF WT = 4 THEN WT = 1      ' Rotate back to the first person
  Turn = WT                  ' Whose turn?
  Finish = False             ' New round, not finished yet
  
  ShowLeader                 ' Show end of round leader
  
LOOP UNTIL Rn > Rounds       ' Continue play until all rounds are finished

IF M1P > M2P THEN Winner = 2 ELSE Winner = 1
IF Winner = 2 AND M2P > M3P THEN Winner = 2
IF Winner = 2 AND M2P < M3P THEN Winner = 3
IF Winner = 1 AND M1P > M3P THEN Winner = 1
IF Winner = 1 AND M1P < M3P THEN Winner = 3

BonusLand                    ' Winner plays Bonus Round

' DATA Format works like so:
'
' First number is the maximum number of puzzles inputted by user,
' increase number if you add more puzzles into the DATA statements
'
' How Puzzles should be inputted (NOT Case sensitive).
'
' 7 lines, each line seperated by "/"
'          and empty line should be inputted with "EMPTY"
'          Maximum of 14 characters per line
' 1st line:  Category (ie. PHRASE/THING/PERSON...etc)
' 2nd line:  Line one   of Puzzle
' 3rd line:    "  two   "    "
' 4th line:    "  three "    "
' 5th line:    "  four  "    "
' 6th line:    "  five  "    "
' 7th line:    "  six   "    "
'*8th line: CLUE for "BLANK"
'
'* Only place 8th line with category "BLANK"
'  Look at the DATA for reference

DATA 10
DATA "PHRASE/EMPTY/ What Goes Up/EMPTY/EMPTY/Must Come Down/EMPTY"
DATA "QUOTE/EMPTY/   Go Ahead/EMPTY/ Make My Day/EMPTY/EMPTY"
DATA "PLACE/EMPTY/   Edmonton/   Alberta/   Canada/EMPTY/EMPTY"
DATA "PERSON/EMPTY/World Figure-/      Skating/  Champions/EMPTY/EMPTY"
DATA "STAR & ROLE/EMPTY/  Jim Carrey/EMPTY/As Ace Ventura/EMPTY/EMPTY"
DATA "BLANK/EMPTY/ ? Alarm/ ? Fighters/ ? Truck/EMPTY/EMPTY/FIRE"
DATA "PHRASE/EMPTY/  What Goes/   Around/ Comes Around/EMPTY/EMPTY"
DATA "BEFORE & AFTER/EMPTY/ Tooth Fairy/EMPTY/  Godmother/EMPTY/EMPTY"
DATA "BLANK/EMPTY/  ? Hornet/  ? Olives/  ? Grass/  ? Beans/EMPTY/GREEN"
DATA "PHRASE/EMPTY/Save The Best/EMPTY/   For Last/EMPTY/EMPTY

SUB Bigchar (Word$, XCor, YCor, Colr, Opt)
  
  ' Subroutine BIGCHAR
  ' Purpose:   Prints the extended (BIG) character on the puzzle grid
  
  PALETTE 8, 0    ' Hide the letter to be read in
  
  COLOR 8         ' Color is hidden
  FOR L = 1 TO LEN(Word$)
    LOCATE 1, 1: PRINT MID$(Word$, L, 1)
    FOR N = 0 TO 7
      FOR M = 0 TO 7
        Colour = POINT(N, M)    ' Grabs the colour of the letter
        IF Colour > 0 THEN      ' if not null, then we plot the coordinates
          IF Opt = 0 THEN
            PSET (XCor + N + (L * 8), YCor + M + M), Colr
            PSET (XCor + N + (L * 8), 1 + YCor + M + M), Colr
          ELSEIF Opt = 1 THEN
            PSET (XCor + N + (L * 9), YCor + M + M + Z), Colr
            PSET (XCor + N + (L * 9), 1 + YCor + M + M + Z), Colr
          ELSEIF Opt = 2 THEN
            PSET (XCor + N + (L * 9), YCor + M + M - Z), Colr
            PSET (XCor + N + (L * 9), 1 + YCor + M + M - Z), Colr
          END IF
        END IF
      NEXT M
    NEXT N
    XCor = XCor + 1
    Z = Z - 2
  NEXT L
  
  LOCATE 1, 1: PRINT " "  ' Clear letter
  PALETTE 8, 8            ' Restore the color to its normal value
  
END SUB

SUB Bonusland
  
  Bonus = True     ' Yes we are in Bonus round
                   ' We need this variable for SUB LetterInPuzzle
  
  DrawGrid
  
  BigChar "BONUS LAND", 100, 2, 12, 0
  
  LINE (0, 199)-(320, 150), 0, BF
  
  Done = False
  DO
    DO
      RANDOMIZE TIMER         ' Randomly select a puzzle
      P = INT(RND * Maximum) + 1
      FOR R = 1 TO Maximum        ' But make sure it's not the same puzzle!
        IF NoRepeat(R) = P THEN Repeat = True: EXIT FOR
      NEXT R
      IF NoRepeat(R) <> P THEN Repeat = False
    LOOP UNTIL Repeat = False
    FilterPuzzle Puzzles$(), P               ' Parse the puzzle
    IF Puzz$(1) <> "BLANK" THEN Done = True  ' Bonus round <> "BLANK"
  LOOP UNTIL Done
  
  ' Like the TV Game Show:
  '
  '   R S T L N   E
  '
  ' Letters automatically selected by computer
  '
  ' You will be prompted to enter 3 other consonants and 1 vowel
  
  InCase$ = "BCDFGHJKMPQVWXYZ"
  InCaseVowel$ = "AIOU"
  COLOR 12: LOCATE 20, 3: PRINT "R S T L N  "; : COLOR 14: PRINT "E"
  Letters$ = "RSTLNE"
  FOR A = 1 TO LEN(Letters$)
    A$ = MID$(Letters$, A, 1)
    LetterInPuzzle A$, 0
  NEXT A
  COLOR 10: LOCATE 22, 1: PRINT "Select 3 Consonants:  ";
  COLOR 12
  C = 0
  Letters$ = ""
  DO
    DO
      A$ = UCASE$(INPUT$(1))
    LOOP UNTIL INSTR(InCase$, A$)
    PRINT A$; " ";
    C = C + 1
    Letters$ = Letters$ + A$
  LOOP UNTIL C = 3
  COLOR 10: LOCATE 23, 1: PRINT "     Select 1 Vowel:  ";
  DO
    A$ = UCASE$(INPUT$(1))
  LOOP UNTIL INSTR(InCaseVowel$, A$)
  COLOR 14: PRINT A$
  Letters$ = Letters$ + A$
  FOR A = 1 TO LEN(Letters$)
    A$ = MID$(Letters$, A, 1)
    LetterInPuzzle A$, 0
  NEXT A
  
  SLEEP 1
  LINE (0, 199)-(320, 150), 0, BF
  COLOR 15
  LOCATE 20, 1: PRINT "SOLVE:"
  Solve$ = ""
  Last = False
  FOR Q = 2 TO 7
    IF Puzz$(Q) <> "EMPTY" THEN
      IF RIGHT$(Puzz$(Q), 1) = "-" THEN Last = True
      IF Last = False THEN
        Solve$ = Solve$ + LTRIM$(Puzz$(Q)) + " "
      ELSE
        Solve$ = Solve$ + LTRIM$(Puzz$(Q))
        Last = False
      END IF
    END IF
  NEXT Q
  Solve$ = RTRIM$(Solve$)
  LOCATE 22, 1
  FOR Q = 1 TO LEN(Solve$)
    COLOR 14
    A = ASC(MID$(Solve$, Q, 1))
    SELECT CASE A
      CASE 45
        COLOR 10
        PRINT "-";
      CASE 32
        PRINT " ";
      CASE ELSE
        PRINT "ù";
    END SELECT
  NEXT Q
  LOCATE 22, 1: COLOR 15: LINE INPUT Answer$
  LINE (0, 0)-(320, 15), 0, BF
  IF UCASE$(Answer$) = UCASE$(Solve$) THEN
    BigChar "CONGRATULATIONS", 80, 2, 12, 0
  ELSE
    BigChar "BETTER LUCK NEXT TIME", 60, 2, 12, 0
  END IF
  AllCase$ = InCase$ + InCaseVowel$
  FOR Q = 1 TO LEN(AllCase$)
    A$ = MID$(AllCase$, Q, 1)
    IF INSTR(UCASE$(Solve$), A$) THEN LetterInPuzzle A$, 0
  NEXT Q
  
END SUB

SUB Colorcode (Col)
  
  ' The color code of the WHEEL
  ' Yellow = Lose Turn
  ' Black  = Bankrupt
  ' Grey   = $5000
  
  SELECT CASE Col
    CASE 1
      Money = 250
    CASE 2
      Money = 150
    CASE 3
      Money = 500
    CASE 4
      Money = 300
    CASE 5
      Money = 750
    CASE 6
      Money = 650
    CASE 7
      Money = 5000
    CASE 8
      Money = -1
    CASE 9
      Money = 1000
    CASE 10
      Money = 200
    CASE 11
      Money = 2500
    CASE 12
      Money = 900
    CASE 13
      Money = 350
    CASE 14
      Money = 0
  END SELECT
  
  LOCATE 25, 18
  IF Money > 0 THEN
    PRINT "$" + LTRIM$(STR$(Money)) + "      ";
  ELSE
    IF Money = -1 THEN PRINT "BANKRUPT   ";
    IF Money = 0 THEN PRINT "LOSE TURN   ";
  END IF
  
END SUB

SUB Drawgrid
  
  CLS
  
  FOR Y = 1 TO 6              ' Draw 6x14 Puzzle grid
    FOR X = 1 TO 14
      LINE (X * 20, Y * 20)-(X * 20 + 20, Y * 20 + 20), 10, B
      LINE (X * 20 + 1, Y * 20 + 1)-(X * 20 + 19, Y * 20 + 19), 2, BF
    NEXT X
  NEXT Y
  
  COLOR 11: LOCATE 20, 5: PRINT "B C D F G H J K L M N P    A E I"
  LOCATE 22, 5: PRINT "Q R S T V W X Y Z QUIT!    O U";
  
  InCase$ = "BCDFGHJKLMNPQRSTVWXYZ"
  InCaseVowel$ = "AEIOU"
  
END SUB

SUB Drawplayers
  
  CLS
  
  CIRCLE (160, 180), 180, 15, 6, 3, 1 / 4
  CIRCLE (160, 160), 180, 15, 6, 3, 1 / 4
  CIRCLE (160, 140), 180, 15, 6, 3, 1 / 4
  
  LINE (113, 116)-(81, 100), 15
  LINE (207, 116)-(239, 100), 15
  LINE (113, 116)-(113, 135), 15
  LINE (207, 116)-(207, 135), 15
  
  PAINT (60, 140), 4, 15: PAINT (60, 120), 12, 15
  PAINT (160, 130), 1, 15: PAINT (160, 110), 9, 15
  PAINT (300, 140), 2, 15: PAINT (300, 120), 10, 15
  
  CIRCLE (40, 75), 65, 15, .3, 3, 1.1
  CIRCLE (280, 75), 65, 15, .3, 2.8, 1.1
  CIRCLE (160, 62), 65, 15, .15, 3
  PAINT (160, 75), 5, 15
  
  CIRCLE (160, 45), 16, 14
  PAINT (160, 45), 14
  LINE (155, 58)-(130, 62), 1
  LINE (165, 58)-(190, 62), 1
  LINE (130, 62)-(125, 95), 1
  LINE (190, 62)-(195, 95), 1
  LINE (125, 95)-(130, 95), 1
  LINE (130, 94)-(190, 94), 1
  LINE (190, 95)-(195, 95), 1
  LINE (155, 59)-(165, 59), 1
  PAINT (160, 80), 1
  
  IF Players > 1 THEN
    CIRCLE (35, 45), 16, 14
    PAINT (35, 45), 14
    LINE (30, 58)-(5, 67), 4
    LINE (40, 58)-(65, 62), 4
    LINE (5, 67)-(5, 115), 4
    LINE (65, 62)-(70, 100), 4
    LINE (70, 99)-(5, 115), 4
    LINE (30, 59)-(40, 59), 4
    PAINT (30, 80), 4
  END IF
  IF Players = 3 THEN
    CIRCLE (285, 45), 16, 14
    PAINT (285, 45), 14
    LINE (290, 58)-(315, 67), 2
    LINE (280, 58)-(265, 62), 2
    LINE (315, 67)-(315, 116), 2
    LINE (265, 62)-(260, 101), 2
    LINE (260, 101)-(315, 115), 2
    LINE (290, 59)-(280, 59), 2
    PAINT (300, 80), 2
  END IF
  CIRCLE (160, 140), 180, 15, 6, 3, 1 / 4
  
  LOCATE 24, 15: COLOR 14: PRINT "Round"; Rn; "of"; Rounds;
  
  IF Players = 1 THEN Turn = 2
  BigChar "$0", 140, 119, 11, 0
  BigChar "$0", 30, 130, 11, 1
  BigChar "$0", 250, 126, 11, 2
  
  SavePicture 1
  
  WhoseTurn
  
END SUB

SUB Filterpuzzle (Puzzles$(), P)
  
  Text$ = Puzzles$(P)
  A = INSTR(Text$, "/")              ' Parse each line
  Y = 25
  N = 0
  DO WHILE A                         ' Repeat until no more WORDS to filter
    N = N + 1
    T$ = UCASE$(LEFT$(Text$, A - 1)) ' Takes the /WORD/ inside backslashes
    Puzz$(N) = T$                    ' First word represents the category
    IF T$ <> "EMPTY" AND N > 1 THEN  ' Therefore we skip first word
      X = 22
      FOR I = 1 TO LEN(T$)
        IF MID$(T$, I, 1) <> " " THEN PAINT (X, Y), 15, 10
        B = ASC(MID$(T$, I, 1))
        SELECT CASE B
          CASE 38     ' & sign
            PAINT (X, Y), 14, 10
            BigChar CHR$(B), X - 3, Y - 1, 0, 0
          CASE 39     ' Apostrophe
            PAINT (X, Y), 14, 10
            BigChar CHR$(B), X - 3, Y - 1, 0, 0
          CASE 45     ' - sign
            PAINT (X, Y), 14, 10
            BigChar CHR$(B), X - 3, Y - 1, 0, 0
          CASE 63     ' ? sign
            PAINT (X, Y), 14, 10
            BigChar CHR$(B), X - 3, Y - 1, 0, 0
        END SELECT
        X = X + 20
      NEXT I
    END IF
    Text$ = MID$(Text$, A + 1, LEN(Text$))
    A = INSTR(Text$, "/")
    IF N > 1 THEN Y = Y + 20
  LOOP
  N = N + 1
  Puzz$(N) = Text$         ' Last word to be stored
  IF Text$ <> "EMPTY" AND N <> 8 THEN
    X = 22
    FOR I = 1 TO LEN(Text$)
      IF MID$(Text$, I, 1) <> " " THEN PAINT (X, Y), 15, 10
      X = X + 20
    NEXT I
  END IF
  
  L = LEN(Puzz$(1))   ' Centers the category on the bottom line
  L = 20 - (L / 2)    ' Calculates X position
  LOCATE 25, L: COLOR 14: PRINT Puzz$(1);
  
END SUB

SUB Letterinpuzzle (Letter$, Letter)
  
  IF Letter = 1 THEN PlayerMoney! = PlayerMoney! - 250  ' Vowel selected
  
  COLOR 15
  N = 1
  InPuzzle = False
  DO
    N = N + 1
    IF Puzz$(N) <> "EMPTY" THEN
      FOR I = 1 TO LEN(Puzz$(N))
        IF MID$(Puzz$(N), I, 1) = Letter$ THEN  ' Letter is in puzzle
          PAINT ((I * 20) + 2, 3 + (N * 20) - 20), 14, 10
          BigChar Letter$, (I * 20) - 1, 3 + (N * 20) - 20, 0, 0
          IF Letter = 0 THEN PlayerMoney! = PlayerMoney! + Money
          InPuzzle = True
        END IF
      NEXT I
    END IF
  LOOP UNTIL N = 7
  
  IF InPuzzle = False AND Bonus = False THEN ' Letter NOT in puzzle
    SOUND 1000, .5: SOUND 500, .5            ' Output annoying sound
  END IF
  
END SUB

SUB Mainprogram (Puzzles$(), P)
  
  Start:
  
  DO
    LOCATE 1, 2: COLOR 10: PRINT "$";
    PRINT USING "###,###"; PlayerMoney!
    
    LOCATE 2, 4: COLOR 7: PRINT "SPIN WHEEL     BUY VOWEL     SOLVE"
    LOCATE 2, 2: COLOR 12: PRINT CHR$(16); " ";
    COLOR 15: PRINT "SPIN WHEEL"
    Current = 1
    
    DO
      DO
        A$ = INKEY$
      LOOP UNTIL A$ <> ""
      IF LEN(A$) = 2 THEN Char = -ASC(RIGHT$(A$, 1)) ELSE Char = ASC(A$)
      SELECT CASE Char
        CASE 13        ' ENTER Pressed
          EXIT DO
        CASE -77       ' Right Arrow key pressed
          Current = Current + 1
        CASE -75       ' Left Arrow key pressed
          Current = Current - 1
        CASE 27        ' Escape key pressed
          END
      END SELECT
      LOCATE 2, 2: COLOR 7: PRINT "  SPIN WHEEL     BUY VOWEL     SOLVE"
      IF Current = 4 THEN Current = 1
      IF Current = 0 THEN Current = 3
      SELECT CASE Current
        CASE 1
          LOCATE 2, 2: COLOR 12: PRINT CHR$(16); " ";
          COLOR 15: PRINT "SPIN WHEEL"
        CASE 2
          LOCATE 2, 17: COLOR 12: PRINT CHR$(16); " ";
          COLOR 15: PRINT "BUY VOWEL"
        CASE 3
          LOCATE 2, 31: COLOR 12: PRINT CHR$(16); " ";
          COLOR 15: PRINT "SOLVE"
      END SELECT
    LOOP
    
    IF Current = 1 THEN SpinWheel
    IF Current = 2 THEN GOTO PickVowel
    IF Current = 3 THEN GOTO SolvePuzzle
    
    IF Money = 0 OR Money = -1 THEN
      IF Players = 1 THEN GOTO Start ELSE EXIT SUB
    END IF
    LOCATE 2, 1: PRINT SPACE$(40)
    LOCATE 2, 18: PRINT "$" + LTRIM$(STR$(Money))
    
    X = 28: Y = 149
    LINE (X, Y)-(X + 14, Y + 12), 10, B
    
    DO
      DO
        A$ = INKEY$
      LOOP UNTIL A$ <> ""
      IF LEN(A$) = 2 THEN Char = -ASC(RIGHT$(A$, 1)) ELSE Char = ASC(A$)
      IF Y = 165 AND X > 156 THEN
        LINE (172, Y)-(218, Y + 12), 0, B
      ELSE
        LINE (X, Y)-(X + 14, Y + 12), 0, B
      END IF
      SELECT CASE Char
        CASE 13    ' Consonant Selected
          GOSUB SelLetter
          IF Letter$ <> "" THEN GOTO Start
        CASE 27    ' Escape Key
          END
        CASE -80   ' Down Arrow Key
          IF Y = 165 THEN Y = 149 ELSE Y = Y + 16
        CASE -77   ' Right Arrow Key
          IF X <> 204 THEN X = X + 16 ELSE X = 28
        CASE -75   ' Left Arrow Key
          IF X <> 28 THEN X = X - 16 ELSE X = 204
        CASE -72   ' Up Arrow Key
          IF Y = 149 THEN Y = 165 ELSE Y = Y - 16
      END SELECT
      IF Y = 165 AND X > 156 THEN
        LINE (172, Y)-(218, Y + 12), 10, B
        X = 172
      ELSE
        LINE (X, Y)-(X + 14, Y + 12), 10, B
      END IF
    LOOP
  LOOP
  
  PickVowel:
  IF PlayerMoney! < 250 THEN    ' NOT enough money to buy vowel
    LOCATE 2, 1: PRINT SPACE$(40)
    LOCATE 2, 11: COLOR 12: PRINT "VOWEL'S COST $250"
    T! = TIMER
    DO
    LOOP UNTIL TIMER - T! > 3 OR INKEY$ <> ""
    GOTO Start
  END IF
  X = 244: Y = 149
  LINE (X, Y)-(X + 14, Y + 12), 10, B
  DO
    DO
      A$ = INKEY$
    LOOP UNTIL A$ <> ""
    IF LEN(A$) = 2 THEN Char = -ASC(RIGHT$(A$, 1)) ELSE Char = ASC(A$)
    LINE (X, Y)-(X + 14, Y + 12), 0, B
    SELECT CASE Char
      CASE 13    ' Vowel Selected
        GOSUB SelVowel
        IF Letter$ <> "" THEN GOTO Start
      CASE 27    ' Escape Key
        END
      CASE -80   ' Down Arrow Key
        IF Y = 165 THEN Y = 149 ELSE Y = Y + 16
      CASE -77   ' Right Arrow Key
        IF X <> 276 THEN X = X + 16 ELSE X = 244
        IF Y = 165 AND X = 276 THEN X = 244
      CASE -75   ' Left Arrow Key
        IF X <> 244 THEN X = X - 16 ELSE X = 260
      CASE -72   ' Up Arrow Key
        IF Y = 149 THEN Y = 165 ELSE Y = Y - 16
    END SELECT
    LINE (X, Y)-(X + 14, Y + 12), 10, B
  LOOP
  
  SelVowel:
  IF Y = 149 THEN
    SELECT CASE X
      CASE 244
        Letter$ = "A"
      CASE 260
        Letter$ = "E"
      CASE 276
        Letter$ = "I"
    END SELECT
    COLOR 3
    LOCATE 20, (X - 244) / 16 + 32 + (X - 244) / 16: PRINT Letter$
  ELSE
    SELECT CASE X
      CASE 244
        Letter$ = "O"
      CASE 260
        Letter$ = "U"
    END SELECT
    COLOR 3
    LOCATE 22, (X - 244) / 16 + 32 + (X - 244) / 16: PRINT Letter$
  END IF
  A = INSTR(InCaseVowel$, Letter$)
  IF A THEN
    A$ = MID$(InCaseVowel$, A + 1, LEN(InCaseVowel$))
    InCaseVowel$ = LEFT$(InCaseVowel$, A - 1) + A$
  ELSE
    Letter$ = ""
  END IF
  IF Letter$ <> "" THEN
    LetterInPuzzle Letter$, 1
    IF Players > 1 AND InPuzzle = False THEN GOTO EndSel
  END IF
  GOTO Start
  
  SelLetter:
  IF Y = 149 THEN
    SELECT CASE X
      CASE 28
        Letter$ = "B"
      CASE 44
        Letter$ = "C"
      CASE 60
        Letter$ = "D"
      CASE 76
        Letter$ = "F"
      CASE 92
        Letter$ = "G"
      CASE 108
        Letter$ = "H"
      CASE 124
        Letter$ = "J"
      CASE 140
        Letter$ = "K"
      CASE 156
        Letter$ = "L"
      CASE 172
        Letter$ = "M"
      CASE 188
        Letter$ = "N"
      CASE 204
        Letter$ = "P"
    END SELECT
    COLOR 3
    LOCATE 20, (X - 28) / 16 + 5 + (X - 28) / 16: PRINT Letter$
  ELSE
    SELECT CASE X
      CASE 28
        Letter$ = "Q"
      CASE 44
        Letter$ = "R"
      CASE 60
        Letter$ = "S"
      CASE 76
        Letter$ = "T"
      CASE 92
        Letter$ = "V"
      CASE 108
        Letter$ = "W"
      CASE 124
        Letter$ = "X"
      CASE 140
        Letter$ = "Y"
      CASE 156
        Letter$ = "Z"
      CASE 172
        Letter$ = "QUIT"
        END
    END SELECT
    COLOR 3
    LOCATE 22, (X - 28) / 16 + 5 + ((X - 28) / 16): PRINT Letter$
  END IF
  A = INSTR(InCase$, Letter$)
  IF A THEN
    IF A <> LEN(InCase$) THEN
      InCase$ = LEFT$(InCase$, A - 1) + MID$(InCase$, A + 1, LEN(InCase$))
    ELSE
      InCase$ = LEFT$(InCase$, A - 1)
    END IF
  ELSE
    Letter$ = ""
  END IF
  IF Letter$ <> "" THEN
    LetterInPuzzle Letter$, 0
    IF Players > 1 AND InPuzzle = False THEN GOTO EndSel
  END IF
  RETURN
  
  SolvePuzzle:
  SavePicture 2
  LINE (0, 199)-(320, 150), 0, BF
  LOCATE 20, 1: PRINT "SOLVE:"
  Solve$ = ""
  Last = False
  FOR Q = 2 TO 7
    IF Puzz$(Q) <> "EMPTY" THEN
      IF RIGHT$(Puzz$(Q), 1) = "-" THEN Last = True
      IF Last = False THEN
        Solve$ = Solve$ + LTRIM$(Puzz$(Q)) + " "
      ELSE
        Solve$ = Solve$ + LTRIM$(Puzz$(Q))
        Last = False
      END IF
    END IF
  NEXT Q
  Solve$ = RTRIM$(Solve$)
  A = INSTR(Solve$, "?")
  DO WHILE A
    IF A = 1 THEN
      Solve$ = MID$(Solve$, A + 2, LEN(Solve$))
    ELSE
      Solve$ = LEFT$(Solve$, A - 1) + MID$(Solve$, A + 2, LEN(Solve$))
    END IF
    A = INSTR(Solve$, "?")
  LOOP
  Solve$ = LTRIM$(RTRIM$(Solve$))
  LOCATE 22, 1
  FOR Q = 1 TO LEN(Solve$)
    COLOR 14
    A = ASC(MID$(Solve$, Q, 1))
    SELECT CASE A
      CASE 45
        COLOR 10
        PRINT "-";
      CASE 32
        PRINT " ";
      CASE ELSE
        PRINT "ù";
    END SELECT
  NEXT Q
  LOCATE 22, 1: COLOR 15: LINE INPUT Answer$
  IF UCASE$(Answer$) = UCASE$(Solve$) THEN
    Finish = True
    SELECT CASE Turn
      CASE 1
        IF P1Money! = 0 THEN P1Money! = 200
        M1P! = M1P! + P1Money! + PlayerMoney!
        P1Money! = 0
      CASE 2
        IF P2Money! = 0 THEN P2Money! = 200
        M2P! = M2P! + P2Money! + PlayerMoney!
        P2Money! = 0
      CASE 3
        IF P3Money! = 0 THEN P3Money! = 200
        M3P! = M3P! + P3Money! + PlayerMoney!
        P3Money! = 0
    END SELECT
    PlayerMoney! = 0
    AllCase$ = InCase$ + InCaseVowel$
    FOR Q = 1 TO LEN(AllCase$)
      A$ = MID$(AllCase$, Q, 1)
      IF INSTR(UCASE$(Solve$), A$) THEN LetterInPuzzle A$, 0
    NEXT Q
    IF Puzz$(1) = "BLANK" THEN
      LINE (0, 199)-(320, 150), 0, BF
      LOCATE 20, 1: COLOR 10: PRINT "CLUE:"
      LOCATE 22, 1: COLOR 15: LINE INPUT Clue$
      IF UCASE$(Clue$) = Puzz$(8) THEN
        LOCATE 20, 1: PRINT "EXCELLENT!!!"
        SELECT CASE Turn
          CASE 1
            M1P! = M1P! + 500
          CASE 2
            M2P! = M2P! + 500
          CASE 3
            M3P! = M3P! + 500
        END SELECT
      ELSE
        LOCATE 20, 1: COLOR 10: PRINT "TOO BAD, THE CLUE WAS ";
        COLOR 12: PRINT Puzz$(8)
      END IF
    END IF
    SLEEP 1
  ELSE
    SOUND 1000, .5: SOUND 500, .5
    LoadPicture 2
  END IF
  
  EndSel:
END SUB

SUB Showleader
  
  LoadPicture 1
  
  Word$ = "$" + LTRIM$(STR$(M1P!))
  XCor = 30 - ((LEN(Word$) - 2) * 4)
  PAINT (10, 140), 4, 15
  BigChar Word$, XCor, 130 + LEN(Word$) - 2, 11, 1
  IF Players > 1 THEN
    Word$ = "$" + LTRIM$(STR$(M2P!))
    XCor = 140 - ((LEN(Word$) - 2) * 4)
    PAINT (150, 130), 1, 15
    BigChar Word$, XCor, 119, 11, 0
  END IF
  IF Players = 3 THEN
    Word$ = "$" + LTRIM$(STR$(M3P!))
    XCor = 250 - ((LEN(Word$) - 2) * 2)
    PAINT (250, 140), 2, 15
    BigChar Word$, XCor, 126, 11, 2
  END IF
  
  LOCATE 24, 13: COLOR 15: PRINT "After"; Rn - 1; "Rounds...    ";
  
  T! = TIMER
  DO
  LOOP UNTIL TIMER - T! > 3 OR INKEY$ <> ""
  
END SUB

SUB Showplayers
  
  SavePicture 2
  LoadPicture 1
  
  SELECT CASE Turn
    CASE 1
      P1Money! = P1Money! + PlayerMoney!
      Word$ = "$" + LTRIM$(STR$(P1Money!))
      XCor = 30 - ((LEN(Word$) - 2) * 4)
      PAINT (10, 140), 4, 15
      BigChar Word$, XCor, 130 + LEN(Word$) - 2, 11, 1
    CASE 2
      P2Money! = P2Money! + PlayerMoney!
      Word$ = "$" + LTRIM$(STR$(P2Money!))
      XCor = 140 - ((LEN(Word$) - 2) * 4)
      PAINT (150, 130), 1, 15
      BigChar Word$, XCor, 119, 11, 0
    CASE 3
      IF Players = 3 THEN
        P3Money! = P3Money! + PlayerMoney!
        Word$ = "$" + LTRIM$(STR$(P3Money!))
        XCor = 250 - ((LEN(Word$) - 2) * 2)
        PAINT (250, 140), 2, 15
        BigChar Word$, XCor, 126, 11, 2
      END IF
  END SELECT
  
  Turn = Turn + 1
  IF Players = 2 AND Turn = 3 THEN Turn = 1
  IF Players = 3 AND Turn = 4 THEN Turn = 1
  
  LOCATE 24, 15: COLOR 14: PRINT "Round"; Rn; "of"; Rounds;
  
  SavePicture 1
  
  WhoseTurn
  
  LoadPicture 2
  
END SUB

SUB Spinwheel
  
  SavePicture 2
  CLS
  
  CIRCLE (160, 100), 150, 15, , , 1 / 2
  LINE (160, 100)-(309, 105), 15
  LINE (160, 100)-(302, 75), 15
  LINE (160, 100)-(277, 52), 15
  LINE (160, 100)-(240, 37), 15
  LINE (160, 100)-(195, 27), 15
  LINE (160, 100)-(140, 25), 15
  LINE (160, 100)-(94, 34), 15
  LINE (160, 100)-(50, 50), 15
  LINE (160, 100)-(20, 75), 15
  LINE (160, 100)-(12, 110), 15
  LINE (160, 100)-(38, 145), 15
  LINE (160, 100)-(76, 163), 15
  LINE (160, 100)-(130, 173), 15
  LINE (160, 100)-(185, 173), 15
  LINE (160, 100)-(235, 165), 15
  LINE (160, 100)-(284, 143), 15
  CIRCLE (160, 100), 15, 8, , , 1 / 2
  PAINT (160, 100), 0, 8
  CIRCLE (160, 100), 15, 15, , , 1 / 2
  C = 0
  
  LOCATE 12, 1: COLOR 12: PRINT CHR$(16)
  
  SpinPower = 10          ' SpinPower (Can be defined RANDOMLY if desired)
  
  DO
    RANDOMIZE TIMER
    PAINT (180, 60), C, 15
    C = C + 1
    IF C = 15 THEN C = INT(RND * 14) + 1
    PAINT (160, 50), C, 15
    C = C + 1
    IF C = 15 THEN C = INT(RND * 14) + 1
    PAINT (140, 70), C, 15
    C = C + 1
    IF C = 15 THEN C = INT(RND * 14) + 1
    PAINT (100, 60), C, 15
    C = C + 1
    IF C = 15 THEN C = INT(RND * 14) + 1
    PAINT (100, 80), C, 15
    C = C + 1
    IF C = 15 THEN C = INT(RND * 14) + 1
    PAINT (80, 100), C, 15
    C = C + 1
    IF C = 15 THEN C = INT(RND * 14) + 1
    PAINT (80, 120), C, 15
    C = C + 1
    IF C = 15 THEN C = INT(RND * 14) + 1
    PAINT (80, 140), C, 15
    C = C + 1
    IF C = 15 THEN C = INT(RND * 14) + 1
    PAINT (100, 160), C, 15
    C = C + 1
    IF C = 15 THEN C = INT(RND * 14) + 1
    PAINT (160, 160), C, 15
    C = C + 1
    IF C = 15 THEN C = INT(RND * 14) + 1
    PAINT (190, 150), C, 15
    C = C + 1
    IF C = 15 THEN C = INT(RND * 14) + 1
    PAINT (220, 140), C, 15
    C = C + 1
    IF C = 15 THEN C = INT(RND * 14) + 1
    PAINT (250, 130), C, 15
    C = C + 1
    IF C = 15 THEN C = INT(RND * 14) + 1
    PAINT (250, 100), C, 15
    C = C + 1
    IF C = 15 THEN C = INT(RND * 14) + 1
    PAINT (240, 80), C, 15
    C = C + 1
    IF C = 15 THEN C = INT(RND * 14) + 1
    PAINT (230, 60), C, 15
    C = C + 1
    IF C = 15 THEN C = INT(RND * 14) + 1
    Col = POINT(50, 100)  ' Where the WHEEL stops, calculate the color
    ColorCode Col
    P = P + 1
  LOOP UNTIL P = SpinPower
  
  IF Money = 0 OR Money = -1 THEN SOUND 1000, .5: SOUND 500, .5
  
  T! = TIMER
  DO
  LOOP UNTIL TIMER - T! > 4 OR INKEY$ <> ""
  
  LoadPicture 2
  IF Money = -1 THEN PlayerMoney! = 0
  
  SELECT CASE Turn
    CASE 1
      P1Money! = 0
    CASE 2
      P2Money! = 0
    CASE 3
      P3Money! = 0
  END SELECT
  
END SUB

SUB Whoseturn
  
  SELECT CASE Turn
    CASE 1
      DO
        FOR X = 1 TO 15
          PALETTE 12, X
        NEXT X
      LOOP UNTIL INKEY$ <> ""
      PALETTE 12, 12
      PlayerMoney! = P1Money!
    CASE 2
      DO
        FOR X = 1 TO 15
          PALETTE 9, X
        NEXT X
      LOOP UNTIL INKEY$ <> ""
      PALETTE 9, 9
      PlayerMoney! = P2Money!
    CASE 3
      DO
        FOR X = 1 TO 15
          PALETTE 10, X
        NEXT X
      LOOP UNTIL INKEY$ <> ""
      PALETTE 10, 10
      PlayerMoney! = P3Money!
  END SELECT
  
  DO
  LOOP UNTIL INKEY$ = ""
  
END SUB

SUB SavePicture (Image)

BytesToSave = 8000
DEF SEG = &HA000
OUT &H3CE, 4
OUT &H3CF, 0: BSAVE "Image0."+ltrim$(Str$(Image)), 0, BytesToSave
OUT &H3CF, 1: BSAVE "Image1."+ltrim$(Str$(Image)), 0, BytesToSave
OUT &H3CF, 2: BSAVE "Image2."+ltrim$(Str$(Image)), 0, BytesToSave
OUT &H3CF, 3: BSAVE "Image3."+ltrim$(Str$(Image)), 0, BytesToSave

END SUB

SUB LoadPicture (Image)

DEF SEG = &HA000
OUT &H3C4, 2
OUT &H3C5, 1: BLOAD "Image0."+ltrim$(Str$(Image))
OUT &H3C5, 2: BLOAD "Image1."+ltrim$(Str$(Image))
OUT &H3C5, 4: BLOAD "Image2."+ltrim$(Str$(Image))
OUT &H3C5, 8: BLOAD "Image3."+ltrim$(Str$(Image))
OUT &H3C5, 15

Kill "Image0."+ltrim$(Str$(Image))
Kill "Image1."+ltrim$(Str$(Image))
Kill "Image2."+ltrim$(Str$(Image))
Kill "Image3."+ltrim$(Str$(Image))

END SUB
