Here is my version of the Game of Hangman in Python. I worte for my blog Captain DeadBones Chronicles
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | import random
board = [
' +---+ \n | | \n | \n | \n | \n | \n========= \n',
' +---+ \n | | \n 0 | \n | \n | \n | \n========= \n',
' +---+ \n | | \n 0 | \n | | \n | \n | \n========= \n',
' +---+ \n | | \n 0 | \n /| | \n | \n | \n========= \n',
' +---+ \n | | \n 0 | \n /|\\ | \n | \n | \n========= \n',
' +---+ \n | | \n 0 | \n /|\\ | \n / | \n | \n========= \n',
' +---+ \n | | \n 0 | \n /|\\ | \n / \\ | \n | \n========= \n'
]
class Hangman:
def __init__(self,word):
self.word = word
self.missed_letters = []
self.guessed_letters = []
def guess(self,letter):
if letter in self.word and letter not in self.guessed_letters:
self.guessed_letters.append(letter)
elif letter not in self.word and letter not in self.missed_letters:
self.missed_letters.append(letter)
else:
return False
return True
def hangman_over(self):
return self.hangman_won() or (len(self.missed_letters) == 6)
def hangman_won(self):
if '_' not in self.hide_word():
return True
return False
def hide_word(self):
rtn = ''
for letter in self.word:
if letter not in self.guessed_letters:
rtn += '_'
else:
rtn += letter
return rtn
def print_game_status(self):
print board[len(self.missed_letters)]
print 'Word: ' + self.hide_word()
print 'Letters Missed: ',
for letter in self.missed_letters:
print letter,
print
print 'Letters Guessed: ',
for letter in self.guessed_letters:
print letter,
print
def rand_word():
bank = ['the','living','pearl','.com','captain','deadbones']
return bank[random.randint(0,len(bank))]
def main():
game = Hangman(rand_word())
while not game.hangman_over():
game.print_game_status()
user_input = raw_input('\nEnter a letter: ')
game.guess(user_input)
game.print_game_status()
if game.hangman_won():
print '\nCongratulations! You are the winner of Hangman!'
else:
print '\nSorry, you have lost in the game of Hangman...'
print 'The word was ' + game.word
print '\nGoodbye!\n'
if __name__ == "__main__":
main()
|
As a beginner i find your chronicles and code a good resource. One could learn alot from you. Thank you i look forward to more of your articles and code.
regards jay.
I have error in line 60,it says:list index out of range. And I check the help about random.randint(a, b) : Return a random integer N such that a <= N <= b. Alias for randrange(a, b+1).
So should I use the (0,(len(bank)-1)) #means (0,5) instead (0,len(bank)) #means(0,6) because use the latter, it may appear the integer 6, but it is not allowed in bank[i]
Hey there! I read your script and ran it a few times, enjoyed it. I noticed that you can enter any amount of characters you want, so user_imput 'random amount of characters' also gets added to self.missed_letters. So I added a few lines of code to fix that.
Thank you all for your comments. I am glad you are downloading the code and modifying it. I try to keep everything as simple as I can so you can get a chance to better understand what is going on and tweak things yourself.
i have an error on line 67. The variable raw_input isn't defined. im not that good at python so i dont really know what to put :(