選自一本用Python編寫自己的電腦遊戲一書
- import random
- HANGMANPICS = ['''''
- +---+
- | |
- |
- |
- |
- |
- =========''', '''
- +---+
- | |
- O |
- |
- |
- |
- =========''', '''
- +---+
- | |
- O |
- | |
- |
- |
- =========''', '''
- +---+
- | |
- O |
- /| |
- |
- |
- =========''', '''
- +---+
- | |
- O |
- /|\ |
- |
- |
- =========''', '''
- +---+
- | |
- O |
- /|\ |
- / |
- |
- =========''', '''
- +---+
- | |
- O |
- /|\ |
- / \ |
- |
- =========''']
- words = 'ant baboon badger bat bear beaver camel cat clam cobra cougar coyote crow deer dog donkey duck eagle ferret fox frog goat goose hawk lion lizard llama mole monkey moose mouse mule newt otter owl panda parrot pigeon python rabbit ram rat raven rhino salmon seal shark sheep skunk sloth snake spider tork swan tiger toad trout turkey turtle weasel whale wolf wombat zebra'.split()
- def getRandomWord(wordList): #在words字典裏隨機選出候選單詞
- wordIndex = random.randint(0,len(wordList) - 1)
- return wordList[wordIndex] #返回選定單詞
- def displayBoard (HANGMANPICS,missedLetters,correctLetters,secretWord):
- print('\n\n* * * * * * * * * * * *',end = '')
- print(HANGMANPICS[len(missedLetters)]) #猜錯幾個字母,返回第幾張圖片
- print()
- print('Missed letters:',end=' ')
- for letter in missedLetters: #輸出猜錯的字母
- print(letter,end=' ')
- print()
- blanks = '_' *len(secretWord) #將所選單詞所有字母替換成"_"
- for i in range(len(secretWord)): ########這段程序的難點
- if secretWord[i] in correctLetters:
- blanks = blanks[:i] + secretWord[i] + blanks[i+1:] #將猜出的字母替換掉"_"
- for letter in blanks:
- print(letter ,end=' ') #輸出blanks,並插入空格
- print()
- def getGuess(alreadyGuessed): #判斷用戶輸入是否合法
- while True:
- print('* * * * * * * * * * * *')
- guess = input('Guess a letter:')
- guess = guess.lower()
- if len(guess) != 1:
- print('Please enter a single letter.')
- elif guess in alreadyGuessed:
- print('You have already guessed that letter. Choose again.')
- elif guess not in 'abcdefghijklmnopqrstuvwxyz':
- print('Please enter a LETTER.')
- else:
- return guess #返回用戶輸入的字母
- def playAgain(): #判斷是否繼續遊戲
- print()
- return input('Do you want to play again?(yea or no):').lower().startswith('y') # lower(): #輸入的字符串轉變成小寫;
- print(' == H A N G M A N ==')
- missedLetters = ''
- correctLetters = ''
- secretWord = getRandomWord(words)
- gameIsDone = False
- while True:
- displayBoard(HANGMANPICS,missedLetters,correctLetters,secretWord) # 調用displayBoard函數,並傳遞相應的值
- guess = getGuess(missedLetters + correctLetters) #調用getGuess函數,並傳遞用戶猜過的字母(missedLetters + correctLetters)
- if guess in secretWord:
- correctLetters = correctLetters + guess #如果所猜的字母在隨機單詞內,correctLetters收錄該字母
- foundAllLetters = True #假定字母全部猜出
- for i in range(len(secretWord)):
- if secretWord[i] not in correctLetters: #如果單詞內有字母沒被correctLetters收錄,foundAllLetters爲假,並跳出循環
- foundAllLetters = False
- break
- if foundAllLetters == True: #如果字母全部猜出,gameIsDone 爲真
- print('Yes! The secret word is "' + secretWord + '"! You have won!')
- gameIsDone = True
- else:
- missedLetters = missedLetters + guess #如果所猜的字母不在隨機單詞內,missedLetters收錄該字母
- if len(missedLetters) == len(HANGMANPICS) - 1: #如果用戶猜錯6次,遊戲結束
- displayBoard(HANGMANPICS,missedLetters,correctLetters,secretWord)
- print('You have run out of guesses!\nAfter ' +str(len(missedLetters)) + ' missed guesses and ' + str(len(correctLetters)) + ' correct guesses, the word was "' + secretWord + '"')
- gameIsDone = True
- if gameIsDone: #遊戲結束
- if playAgain(): #調用playAgain(),如果返回爲真,進行初始化
- missedLetters = ''
- correctLetters = ''
- gameIsDone = False
- secretWord = getRandomWord(words)
- else:
- break