2014-04-30 175 views
0

我想獲得關於hang子手遊戲的一些幫助。我已經創建了這段代碼,並花了很多時間來完善它,但仍然無法獲得正確的輸出。非常感謝您的幫助!Hang子手遊戲代碼

word = choose_word(wordlist) 
letters = 'abcdefghijklmnopqrstuvwxyz' 
numLetters = len(word) 
print numLetters 

import re 


def hangman(word, numLetters): 
    print 'Welcome to the game, Hangman!' 
    print 'I am thinking of a word that is', numLetters, 'letters long' 
    remainingGuesses = 8 
    print 'You have', remainingGuesses, 'guesses left.' 
    letters = 'abcdefghijklmnopqrstuvwxyz' 
    print 'Available letters:', letters 
    guess = raw_input("Please guess a letter:") 

    def filled_word(wordy, guessy): 
     emptyWord = ['_']*numLetters 
     if wordy.find(guessy) != -1: 
      position = [m.start() for m in re.finditer(guessy, wordy)] 
      for x in position: 
       emptyWord[x] = guessy 
      strWord = ''.join(emptyWord) 
      print 'Good guess =', strWord 


     else: 
      strWord = ''.join(emptyWord) 
      print 'Oops! That letter is not in my word:', strWord 

    filled_word(word, guess) 
    emptyWord = ['_']*numLetters 
    print 'emptyWord =', ['_']*numLetters 

    while '_' in emptyWord and remainingGuesses>0: 
     remainingGuesses -= 1 
     print 'You have', remainingGuesses, 'guesses left' 
     letters = 'abcdefghijklmnopqrstuvwxyz' 

     def unused_letters(letters): 
      letters = 'abcdefghijklmnopqrstuvwxyz' 
      unusedLetters = str(list(letters).remove(guess)) 
      letters = unusedLetters 
      return unusedLetters 

     letters = unused_letters(letters) 
     print 'Available letters:', letters 
     guess = raw_input("Please guess a letter:") 

     if word.find(guess) != -1: 
      position = [m.start() for m in re.finditer(guess, word)] 
      for x in position: 
       emptyWord[x] = guess 
       strWord = ''.join(emptyWord) 
       print 'Good guess ='+strWord 
       emptyWord = list(strWord) 

     else: 
      strWord = ''.join(emptyWord) 
      print 'Oops! That letter is not in my word:', strWord 


print hangman(word, numLetters) 
print '___________' 
print 'Congratulations, you won!' 

所以問題是,當我運行此,代碼運行順利,直到從第二猜測起,我得到Available letters = None,而不是特定的字母。

此外,我猜這是否出現在單詞中的字母不存儲。即在猜測1中,代碼返回單詞(例如)'d____',但在猜測2中,在猜測'e'時,代碼返回'e_'而不是'd_e__'。是因爲賦值變量嗎?局部和全局變量?我對此很困惑。

非常感謝您的幫助!非常感謝! :)

+0

您是否嘗試過通過與PDB代碼步進/ IPDB時看到事情的變化? – dutt

+0

對不起,我真的很新的python,你是什麼意思,通過使用pdb/ipdb來查看什麼時候改變? – inggumnator

回答

0

代碼中有多個錯誤。這被修正: -

import re 

def unused_letters(letters, guess): # your main problem is corrected here. 
    unusedLetters = list(letters) 
    unusedLetters.remove(guess) 

    letters = ''.join(unusedLetters) 
    return letters 

def filled_word(wordy, guessy): 
    if wordy.find(guessy) != -1: 
     position = [m.start() for m in re.finditer(guessy, wordy)] 
     for x in position: 
      filled_word.emptyWord[x] = guessy 
     strWord = ''.join(filled_word.emptyWord) 
     print 'Good guess.' 
     print 'Current word: %s' % ''.join(filled_word.emptyWord) 
    else: 
     strWord = ''.join(filled_word.emptyWord) 
     print 'Oops! That letter is not in my word:', strWord 

def hangman(word, numLetters): # you dont need the previous check. Let all be done in the main loop 
    print 'Welcome to the game, Hangman!' 
    print 'I am thinking of a word that is', numLetters, 'letters long' 
    remainingGuesses = 8 
    letters = 'abcdefghijklmnopqrstuvwxyz' 
    try: 
     # # memoizing the current word. for more info, try to understand that functions are 
     # # also objects and that we are assigning a new attribute the function object here. 
     filled_word.emptyWord 
    except: 
     filled_word.emptyWord = ['_'] * numLetters 
    while '_' in filled_word.emptyWord and remainingGuesses > 0: 

     print 'You have', remainingGuesses, 'guesses left' 

     print 'Available letters:', letters 
     guess = raw_input("Please guess a letter:") 
#   print 'guess: %s' % guess 
     if guess in letters: 
      filled_word(word, guess) 
      letters = unused_letters(letters, guess) 
     else: 
      print 'You guessed: %s, which is not in Available letters: %s' % (guess, ''.join(letters)) 
      print 'Current word: %s' % ''.join(filled_word.emptyWord) 

     remainingGuesses -= 1 

word = "godman" 

print hangman(word, numLetters = len(word)) 
if '_' in filled_word.emptyWord: 
    print 'Ahh ! you lost....The hangman is hung' 
else: 
    print 'Congratulations, you won!' 

,您仍然可以使其更好地通過檢查猜測的剩餘數量小於待填充的信件,並就是否失敗球員決定或者允許它繼續玩。

+0

感謝您的快速回復!儘管remove方法僅適用於列表,所以仍然需要將字符串,字母轉換爲列表。我仍然有這個猜測出來的那封信的問題,然後在隨後的猜測中消失。你知道這是爲什麼嗎? – inggumnator

1
def choose_word(): 
    word = 'alphabeth' 
    return {'word':word, 'length':len(word)} 

def guess_letter(word_, hidden_word_, no_guesses_, letters_): 
    print '---------------------------------------' 
    print 'You have', no_guesses_, 'guesses left.' 
    print 'Available letters:', letters_ 

    guess = raw_input("Please guess a letter:") 
    guess = guess.lower() 

    if guess in letters_: 
     letters_ = letters_.replace(guess, '') 

     if guess in word_: 
      progress = list(hidden_word_) 
      character_position = -1 
      for character in word_: 
       character_position += 1 
       if guess == character: 
        progress[character_position] = guess 
      hidden_word_ = ''.join(progress) 
      print 'Good guess =', hidden_word_ 
     else: 
      print 'Oops! That letter is not in my word:', hidden_word_ 
      no_guesses_ = no_guesses_ - 1 
    else: 
     print 'The letter "', guess, '" was already used!' 
     no_guesses_ = no_guesses_ - 1 

    if hidden_word_ == word_: 
     print 'Congratulations, you won!' 
     return True 
    if no_guesses_ == 0 and hidden_word_ != word_: 
     print 'Game over! Try again!' 
     return False 
    return guess_letter(word_, hidden_word_, no_guesses_, letters_) 

def hangman(): 
    hangman_word = choose_word() 
    print 'Welcome to the game, Hangman!' 
    print 'I am thinking of a word that is', hangman_word['length'], 'letters long.' 

    hidden_word = ''.join(['_'] * hangman_word['length']) 
    no_guesses = 8 
    letters = 'abcdefghijklmnopqrstuvwxyz' 

    guess_letter(hangman_word['word'], hidden_word, no_guesses, letters) 

hangman() 
0

類劊子手(): DEF 初始化(個體經營): 打印 「歡迎來到 '劊子手',你準備好去死?」 print「(1)是的,因爲我已經死了。\ n(2)不,讓我離開這裏!」 user_choice_1的raw_input =( 「 - >」)

if user_choice_1 == '1': 
     print "Loading nooses, murderers, rapists, thiefs, lunatics..." 
     self.start_game() 
    elif user_choice_1 == '2': 
     print "Bye bye now..." 
     exit() 
    else: 
     print "I'm sorry, I'm hard of hearing, could you repeat that?" 
     self.__init__() 

def start_game(self): 
    print "A crowd begins to gather, they can't wait to see some real" 
    print "justice. There's just one thing, you aren't a real criminal." 
    print "No, no. You're the wrong time, wrong place type. You may think" 
    print "you're dead, but it's not like that at all. Yes, yes. You've" 
    print "got a chance to live. All you've gotta do is guess the right" 
    print "words and you can live to see another day. But don't get so" 
    print "happy yet. If you make 6 wrong guess, YOU'RE TOAST! VAMANOS!" 
    self.core_game() 

def core_game(self): 
    guesses = 0 
    letters_used = "" 
    the_word = "pizza" 
    progress = ["?", "?", "?", "?", "?"] 

    while guesses < 6: 
     guess = raw_input("Guess a letter ->") 

     if guess in the_word and not in letters_used: 
      print "As it turns out, your guess was RIGHT!" 
      letters_used += "," + guess 
      self.hangman_graphic(guesses) 
      print "Progress: " + self.progress_updater(guess, the_word, progress) 
      print "Letter used: " + letters_used 
     elif guess not in the_word and not(in letters_used): 
      guesses += 1 
      print "Things aren't looking so good, that guess was WRONG!" 
      print "Oh man, that crowd is getting happy, I thought you" 
      print "wanted to make them mad?" 
      letters_used += "," + guess 
      self.hangman_graphic(guesses) 
      print "Progress: " + "".join(progress) 
      print "Letter used: " + letters_used 
     else: 
      print "That's the wrong letter, you wanna be out here all day?" 
      print "Try again!" 



def hangman_graphic(self, guesses): 
    if guesses == 0: 
     print "________  " 
     print "|  |  " 
     print "|    " 
     print "|    " 
     print "|    " 
     print "|    " 
    elif guesses == 1: 
     print "________  " 
     print "|  |  " 
     print "|  0  " 
     print "|    " 
     print "|    " 
     print "|    " 
    elif guesses == 2: 
     print "________  " 
     print "|  |  " 
     print "|  0  " 
     print "| /  " 
     print "|    " 
     print "|    " 
    elif guesses == 3: 
     print "________  " 
     print "|  |  " 
     print "|  0  " 
     print "|  /|  " 
     print "|    " 
     print "|    " 
    elif guesses == 4: 
     print "________  " 
     print "|  |  " 
     print "|  0  " 
     print "|  /|\  " 
     print "|    " 
     print "|    " 
    elif guesses == 5: 
     print "________  " 
     print "|  |  " 
     print "|  0  " 
     print "|  /|\  " 
     print "| /  " 
     print "|    " 
    else: 
     print "________  " 
     print "|  |  " 
     print "|  0  " 
     print "|  /|\  " 
     print "| /\  " 
     print "|    " 
     print "The noose tightens around your neck, and you feel the" 
     print "sudden urge to urinate." 
     print "GAME OVER!" 
     self.__init__() 

def progress_updater(self, guess, the_word, progress): 
    i = 0 
    while i < len(the_word): 
     if guess == the_word[i]: 
      progress[i] = guess 
      i += 1 
     else: 
      i += 1 

    return "".join(progress) 

遊戲=劊子手()