Advertisement
Tyler_Elric

Hangman.py

Oct 16th, 2012
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.99 KB | None | 0 0
  1. #!/usr/bin/python3.2
  2. # A hangman game in the console.
  3.  
  4. from random import seed,choice;seed()
  5.  
  6. def getInput(pre):
  7. try:return input(pre)
  8. except:return raw_input(pre)
  9.  
  10. class GameRound:
  11.  
  12. words = [ #A list of words to choose from. static.
  13. "Alpha",
  14. "Beta",
  15. "Theta"
  16. ]
  17. cutOff = 10
  18. letterValue = 20
  19.  
  20. def __init__(self):
  21. self.score = 0
  22. self.word = choice(GameRound.words).lower()# Don't worry about case-sensitivity.
  23. self.guessedLetters = [] #A list of guessed letters.
  24.  
  25. @property
  26. def wrong(self):
  27. return len([letter for letter in self.guessedLetters if letter not in self.word])
  28.  
  29. def guess(self,letter):
  30. assert letter not in self.guessedLetters
  31. self.guessedLetters.append(letter)
  32. ret = letter in self.word
  33. if ret:self.score+=GameRound.letterValue
  34. else:self.score-=GameRound.letterValue
  35. return ret
  36.  
  37. @property
  38. def guessQuota(self):return max(len(self.word),GameRound.cutOff)
  39.  
  40. @property
  41. def complete(self):
  42. for letter in self.word:
  43. if letter not in self.guessedLetters:
  44. return len(self.guessedLetters)>self.guessQuota
  45. print("You have guessed all the letters! The word was:",self.word)
  46. return True
  47.  
  48. @property
  49. def knownWord(self):
  50. return "".join([letter if letter in self.guessedLetters else '_' for letter in self.word])
  51.  
  52. class Game:
  53.  
  54. def __init__(self):
  55. self.score = 0
  56. self.levels = []
  57.  
  58. @property
  59. def activeLevel(self):
  60. if len(self.levels)<1:
  61. self.levels.append(GameRound())
  62. elif self.levels[-1].complete:
  63. self.score+=self.levels[-1].score
  64. self.levels.append(GameRound())
  65. return self.levels[-1]
  66.  
  67. def playRound(level):
  68. while not level.complete:
  69. w,q = level.wrong,level.guessQuota
  70. print("*" * level.wrong + "_" * (q-w),"]")
  71. print(level.knownWord)
  72. level.guess(getInput(">")[:1].lower())
  73.  
  74. def play(self):
  75. prev = None
  76. while True:
  77. Game.playRound(self.activeLevel)
  78. if getInput("Continue? y/n >")[:1].lower()=='n':
  79. break
  80.  
  81. if __name__=="__main__":
  82. g=Game()
  83. g.play()
  84. print("Your final score was:",g.score)
  85. print("After",len(g.levels),"levels.")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement