```
WEEK07: File I/O, top-down design
---------------------------------------------------------------
F: more top-down design

LINGO/LAB 7:

- design.py due first (email it to me)
- show lingo game (rules, how to play, etc)

TOP-DOWN DESIGN:

- let's try writing another program, using top-down design

- see if we can come up with main and stubbed-out functions
for a wheel-of-fortune game (NOTE: I haven't written this in
a long time, so the design process might be messy!)

WOF GAME:

\$ python wof.py

Welcome to WHEEL -- OF -- FORTUNE  v1.0

======================================================================
the puzzle so far: _ _ _ _ _ _ _ _   _ _ _ _ _ _ _   _ _   _ _ _   _ _ _ _
======================================================================

1. Spin the Wheel
3. Guess the Puzzle
4. Quit, I can't stand this game anymore!

spin amount: \$310
letters guessed so far:

enter a consonant guess: c
Yes! There are 3 c's in the puzzle!! :)

======================================================================
the puzzle so far: c _ _ _ _ _ _ _   _ c _ _ _ c _   _ _   _ _ _   _ _ _ _
======================================================================

1. Spin the Wheel
3. Guess the Puzzle
4. Quit, I can't stand this game anymore!

enter a vowel to buy: o
Yes! There is 1 o in the puzzle!! :)

(and so on...)

DESIGN:

print rules of game
pick a phrase/puzzle (read in possibilities from a file??)
set up wheel
initialize winnings = 0 to start game

loop:
print puzzle (dashes for letters that haven't been guessed)
if choice==1:
call a spin() function
elif choice==2:

and so on...

Q: what does the spin function need?
what all should it do?
what should it return (if anything)?

example:

- spin() needs the phrase, so we can check how many of each letter
- spin() needs the puzzle, so we can update it after a letter is guessed
- spin() needs the wheel, so we can spin it and help determine the winnings
- spin() might need the winnings, so if they spin BANKRUPT, we can return 0
- spin() might need a list of letters guessed so far, so we can tell the
user when they make a bad guess

winnings = spin(phrase, puzzle, wheel, winnings, lettersguessed)

- and with those parameters, spin() could do all of this:

* spin wheel, display spun amount
* ask for letter (make sure it's valid: consonant, not already guessed)
* figure out how many of letter are in puzzle
* calculate winnings
* update the puzzle being displayed

- below is the start of a wof design
- finish the main function and stubbed-out other functions
- don't write the details of each function UNTIL you have main and
the stubbed-out functions running

- NOTE: this runs, even though it doesn't do much yet!
Now I can start working on each function, TESTING each
as I write them...

"""
wof design
J. Knerr
Fall 2012
"""

from random import choice

##############################################
def main():
"""main game loop for wof game"""

printIntro()
wheel = [200,500,0,100,1000,50]
winnings = 0
lettersguessed = []

while True:
# print "puzzle: ", puzzlesofar
displayGameStatus(puzzlesofar, winnings)
if choice == 1:
amt = spin(answer, puzzlesofar, wheel, winnings, lettersguessed)
winnings = winnings + amt
elif choice == 2:
if winnings >= 250:
winnings = winnings - 250
else:
print "You don't have enough to buy a vowel!!"
elif choice == 3:
break
else:
print "LOSER"
break

##############################################

def printIntro():
"""print out rules and user info"""

print "wheel of fortune..."

##############################################

def spin(answer, puzzlesofar, wheel, winnings, lettersguessed):
"""
takes care of spinning wheel and geting guess,
should return amount of money
"""

return 100

##############################################

def displayGameStatus(puzzlesofar, winnings):
"""display the puzzle and winnings"""

return

##############################################
main()

```