#Created for Python Version 2.7.3
#program created by Mr E J Ryan
#this program is a project designed to allow students to explore Python functions, loops, variables, arrays, File io, data types (such as string, integer, boolean) etc.

#this library (random) is needed so that the function randint can be used to generate a random number
from random import randint

def newgame():
    #code for a new game
    arraynums = []
    #Set Boolean for generate random numbers loop
    another = True

    while (another == True):
        #Set Boolean for check unique number loop
        unique = False

        #generate a unique random number
        #check number hasn't been used before
        while (unique == False):
                intrand = randint(1,90)
                if (intrand in arraynums):
                    unique = False
                else:
                    unique = True

        #look up number as bingocall (call function)
        #output number and bingocall to screen
        print("%s number %s" % (bingocall(intrand),intrand))

        #add number to array so it won't be used again this game
        arraynums.append(intrand)

        #exit if all 90 numbers have been used
        if (len(arraynums) >= 90):
            another = False

            #inform user that all numbers have been played
            print("All 90 numbers have been played!")

            #save numbers to file
            savegame(arraynums)
            return

        #continue or exit
        #input needs validation against null and unexpected
        coninput = input("Would you like another number? y/n ")
        if (coninput.lower() == "y"):
            another = True
        else:
            another = False

            #save numbers to file
            savegame(arraynums)
            return

def savegame(arraynums):
    #open file for editing
    filetoedit = open('bingo.txt', 'w')

    #dump array data in to file
    for item in arraynums:
        filetoedit.write("%s\n" % item)

    #close file
    filetoedit.close()
    print ("File saved with game data %s" % arraynums)
    print ("Thanks for playing!")

def loadgame():
    arraynums = []
    arraynums = [int(line.rstrip('\n')) for line in open('bingo.txt')]
    return arraynums

def oldgame():
    #code for an old game
    #load up file containing old game
    #load file in to list
    arraynums = loadgame()

    #create loop which cycles through each item(number) in list(array)
    for num in arraynums:
        ##look up number as bingocall (call function)
        ##output number and bingocall to screen
        ##continue or exit if end of list
        print("%s number %s" % (bingocall(num),num))

        #if in last position
        if (num == arraynums[len(arraynums)-1]):
            #display last number and quit
            print("That was the final number played from the last game")
            print("Quitting game and returning you to the menu")
            print ("Thanks for playing!")
            return
        else:
            another = input("Would you like another number? y/n ")
            if (another.lower() != "y"):
                print("Quitting game")
                print("Quitting game and returning you to the menu")
                print ("Thanks for playing!")
                return
            #elif(another.lower() == "y"):

def bingocall(thenumber):
    #receive a value and assume it is numeric because it has been generated by code not user
    #look up number
    #return bingo call

    if (thenumber == 1):
        return "Kelly's Eye"
    elif(thenumber == 2):
        return "One Little Duck"
    elif(thenumber == 3):
        return "Cup of Tea"
    elif(thenumber == 4):
        return "Knock at the Door"
    elif(thenumber == 5):
        return "Man Alive"
    elif(thenumber == 6):
        return "Tom Mix"
    elif(thenumber == 7):
        return "Lucky 7"
    elif(thenumber == 8):
        return "Garden State"
    elif(thenumber == 9):
        return "Doctor's Orders"
    elif(thenumber == 10):
        return "Cameron's Den"
    elif(thenumber == 11):
        return "Legs Eleven"
    elif(thenumber == 12):
        return "One Dozen"
    elif(thenumber == 13):
        return "Unlucky for Some"
    elif(thenumber == 14):
        return "Valentine's Day"
    elif(thenumber == 15):
        return "Young and Keen"
    elif(thenumber == 16):
        return "Sweet Sixteen"
    elif(thenumber == 17):
        return "Dancing Queen"
    elif(thenumber == 18):
        return "Coming of Age"
    elif(thenumber == 19):
        return "Goodbye-Teens"
    elif(thenumber == 20):
        return "One Score"
    elif(thenumber == 21):
        return "Key to the Door"
    elif(thenumber == 22):
        return "Two Little Ducks"
    elif(thenumber == 23):
        return "Three and Me"
    elif(thenumber == 24):
        return "Two Dozen"
    elif(thenumber == 25):
        return "Duck and Dive"
    elif(thenumber == 26):
        return "Pick and Mix"
    elif(thenumber == 27):
        return "Gateway to Heaven"
    elif(thenumber == 28):
        return "Over Weight"
    elif(thenumber == 29):
        return "Rise and Shine"
    elif(thenumber == 30):
        return "Dirtie Gertie"
    elif(thenumber == 31):
        return "Get up and Run"
    elif(thenumber == 32):
        return "Buckle my Shoe"
    elif(thenumber == 33):
        return "Dirty Knee"
    elif(thenumber == 34):
        return "Ask for More"
    elif(thenumber == 35):
        return "Jump and Jive"
    elif(thenumber == 36):
        return "Three Dozen"
    elif(thenumber == 37):
        return "More than Eleven"
    elif(thenumber == 38):
        return "Christmas Cake"
    elif(thenumber == 39):
        return "Steps"
    elif(thenumber == 40):
        return "Naughty Forty"
    elif(thenumber == 41):
        return "Time for Fun"
    elif(thenumber == 42):
        return "Winnie the Pooh"
    elif(thenumber == 43):
        return "Down on your knees"
    elif(thenumber == 44):
        return "Droppy Drawers"
    elif(thenumber == 45):
        return "Halfway There"
    elif(thenumber == 46):
        return "Up to Tricks"
    elif(thenumber == 47):
        return "Four and Seven"
    elif(thenumber == 48):
        return "Four Dozen"
    elif(thenumber == 49):
        return "PC"
    elif(thenumber == 50):
        return "Half a Century"
    elif(thenumber == 51):
        return "Tweak of the Thumb"
    elif(thenumber == 52):
        return "Danny La Rue"
    elif(thenumber == 53):
        return "Stuck in the Tree"
    elif(thenumber == 54):
        return "Clean the Floor"
    elif(thenumber == 55):
        return "Snakes Alive"
    elif(thenumber == 56):
        return "Was she worth it"
    elif(thenumber == 57):
        return "Heinz Varieties"
    elif(thenumber == 58):
        return "Make them wait"
    elif(thenumber == 59):
        return "Brighton Line"
    elif(thenumber == 60):
        return "Five Dozen"
    elif(thenumber == 61):
        return "Bakers Bun"
    elif(thenumber == 62):
        return "Turn on the Screw"
    elif(thenumber == 63):
        return "Tickle Me 63"
    elif(thenumber == 64):
        return "Red Raw"
    elif(thenumber == 65):
        return "Old Age Pension"
    elif(thenumber == 66):
        return "Clickety Click"
    elif(thenumber == 67):
        return "Made in Heaven"
    elif(thenumber == 68):
        return "Saving Grace"
    elif(thenumber == 69):
        return "Either Way Up"
    elif(thenumber == 70):
        return "Three Score & Ten"
    elif(thenumber == 71):
        return "Bang on the Drum"
    elif(thenumber == 72):
        return "Six Dozen"
    elif(thenumber == 73):
        return "Queen B"
    elif(thenumber == 74):
        return "Candy Store"
    elif(thenumber == 75):
        return "Strive and Strive"
    elif(thenumber == 76):
        return "Trombones"
    elif(thenumber == 77):
        return "Sunset Strip"
    elif(thenumber == 78):
        return "Heavens Gate"
    elif(thenumber == 79):
        return "One more time"
    elif(thenumber == 80):
        return "Eight & Blank"
    elif(thenumber == 81):
        return "Stop & Run"
    elif(thenumber == 82):
        return "Straight on Through"
    elif(thenumber == 83):
        return "Time for Tea"
    elif(thenumber == 84):
        return "Seven Dozen"
    elif(thenumber == 85):
        return "Staying Alive"
    elif(thenumber == 86):
        return "Between the Sticks"
    elif(thenumber == 87):
        return "Torquay in Devon"
    elif(thenumber == 88):
        return "Two Fat Ladies"
    elif(thenumber == 89):
        return "Nearly There"
    elif(thenumber == 90):
        return "Top of the Shop"
    else:
        return "error not 1-90 or not numeric"


print("*****************Welcome to MegaBingo created by Mr E Ryan*****************")

menu = True
while (menu == True):
    print("\n")
    strNewGame = input("Menu: (N)ew game. (R)eload the last game. (Q)uit. Type letter and press enter:  ") #collects input from user
    #need to convert to lower case and then validate strNewGame to only allow y/n/yes/no

    if (strNewGame.lower() == "n" ):
        newgame()
    elif(strNewGame.lower() =="r"):
        oldgame()
    elif(strNewGame.lower() == "q"):
        print('Thanks for playing!')
        menu = False
