Guest User

Hangman

a guest
Jul 2nd, 2016
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.88 KB | None | 0 0
  1. import os
  2. import sys
  3. import random
  4.  
  5. import data
  6.  
  7. class GameInstance():
  8.  
  9.     def __init__(self, bad_guesses, good_guesses, check, wordindex, secret_word, score, name):
  10.  
  11.         #Hardcoded settings:
  12.         self.max_guesses = 7
  13.  
  14.         self.bad_guesses = bad_guesses
  15.         self.good_guesses = good_guesses
  16.         self.check = check
  17.         self.wordindex = wordindex
  18.         self.secret_word = secret_word
  19.         self.score = score
  20.         self.name = name
  21.  
  22.         self.comment = data.comments[wordindex]
  23.  
  24.  
  25.     def can_guess(self):
  26.         return len(self.bad_guesses) <= self.max_guesses
  27.  
  28.     def make_guessed_line(self):
  29.         result = ""
  30.         for letter in self.secret_word:
  31.             if letter in self.good_guesses:
  32.                 result += letter
  33.             else:
  34.                 result += "_"
  35.             result += " "
  36.         return result
  37.  
  38.     def make_bad_guesses_line(self):
  39.         result = ""
  40.         for letter in self.bad_guesses:
  41.             result += letter + " "
  42.         return result
  43.  
  44.     def has_guessed(self, letter):
  45.         return letter in self.bad_guesses or letter in self.good_guesses
  46.  
  47.     def has_won(self):
  48.         return len(self.good_guesses) == len(self.check)
  49.  
  50.     def guess(self, letter):
  51.         if letter in self.secret_word:
  52.             self.good_guesses.append(letter)
  53.             self.score += 10
  54.             return True
  55.         else:
  56.             self.bad_guesses.append(letter)
  57.             self.score -= 20
  58.             return False
  59.  
  60.     def make_full_guess(self, word):
  61.         if word == self.secret_word:
  62.             gscore = len(self.check) - len(self.good_guesses)
  63.             gscore *= 30
  64.             self.score += gscore
  65.             return True
  66.         else:
  67.             self.score -= 50
  68.             return False
  69.  
  70. class Game():
  71.  
  72.     def __init__(self):
  73.         self.sboard = []
  74.  
  75.     def cls(self):
  76.         if os.name == 'nt':
  77.             os.system('cls')
  78.         else:
  79.             os.system('clear')
  80.  
  81.     def instructions(self):
  82.         self.cls()
  83.         print(data.instruc1)
  84.         cont = input("Press enter to continue to page 2, 'Scoring and Scoreboard': ").lower()
  85.         self.cls()
  86.         print(data.instruc2)
  87.         while True:
  88.             end = input("""Type 'menu' to return to the main menu, 'quit' to exit the game,
  89.    or 'back' to go back to the previous page: """).lower()
  90.             if end == "menu":
  91.                 self.introduction()
  92.             elif end == "quit":
  93.                 self.cls()
  94.                 sys.exit()
  95.             elif end == "back":
  96.                 self.instructions()
  97.  
  98.     def introduction(self):
  99.         print(data.intro1)
  100.         while True:
  101.             start = input("Press enter to start: ").lower()
  102.             if start == "quit":
  103.                 self.cls()
  104.                 sys.exit()
  105.             elif start == "instructions":
  106.                 self.instructions()
  107.             elif start == "menu":
  108.                 continue
  109.             elif start == "guess":
  110.                 print("\nYou cannot guess yet!")
  111.                 continue
  112.             elif start == "score":
  113.                 self.scoreboard()
  114.             else:
  115.                 self.setupgame()
  116.  
  117.     def scoreboard(self):
  118.         self.cls()
  119.         self.sboard.sort()
  120.         print("\n\n\nSCOREBOARD\n\n")
  121.         try:
  122.             print("1st PLACE:   ", self.sboard[0], "\n")
  123.         except IndexError:
  124.             print("1st PLACE:   \n")
  125.         num1 = 2
  126.         num2 = 1
  127.         while num1 <= 9:
  128.             try:
  129.                 print("{}  > ".format(num1), self.sboard[num2])
  130.             except IndexError:
  131.                 print("{}  > ".format(num1))
  132.             num1 += 1
  133.             num2 += 1
  134.         try:
  135.             print("10 > ", self.sboard[9])
  136.         except IndexError:
  137.             print("10 > ")
  138.         print("\n\n\n(Note: Type 'wipe' to refresh the scoreboard!)\n")
  139.         while True:
  140.             back = input("Type 'menu' to go back to the main menu, or 'quit' to exit the game: ").lower()
  141.             if back == "menu":
  142.                 self.introduction()
  143.             elif back == "quit":
  144.                 self.cls()
  145.                 sys.exit()
  146.             elif back == "wipe":
  147.                 self.sboard = []
  148.                 self.scoreboard()
  149.  
  150.     def setupgame(self):
  151.         self.cls()
  152.         name = input("\n\n\nEnter your name (for the scoreboard): ")
  153.         if name.lower() == "menu":
  154.             self.introduction()
  155.         elif name.lower() == "quit":
  156.             self.cls()
  157.             sys.exit()
  158.         self.cls()
  159.         secret_word = random.choice(data.words)
  160.         wordindex = data.words.index("{}".format(secret_word))
  161.         bad_guesses = []
  162.         good_guesses = []
  163.         check = []
  164.         score = 0
  165.         for letters in secret_word:
  166.             if letters not in check:
  167.                 check.append(letters)
  168.             else:
  169.                 continue
  170.         print('\n\n')
  171.         game_session = GameInstance(bad_guesses, good_guesses, check, wordindex, secret_word, score, name)
  172.         self.main(game_session)
  173.  
  174.     def main(self, gamesession):
  175.         print('\n\n')
  176.         while gamesession.can_guess():
  177.             print("\nClue:\n")
  178.             print(gamesession.comment)
  179.             print('\n')
  180.             print(gamesession.make_guessed_line())
  181.             print("\n\nYour score is: {}".format(gamesession.score))
  182.             print("\nStrikes: {}/7\n".format(len(gamesession.bad_guesses)))
  183.             print("Wrong Guesses: ")
  184.             print(gamesession.make_bad_guesses_line())
  185.             print("\n\n\nOptions: 'guess' 'menu' 'quit'\n")
  186.             self.guess(gamesession)
  187.         else:
  188.             self.cls()
  189.             print("\n\n\nYou didn't get it! LOSER!!! My word was '{}'.".format(gamesession.secret_word))
  190.             print("\n\nYour score was: {}!\n".format(gamesession.score))
  191.             result = gamesession.name + " " + str(gamesession.score)
  192.             self.sboard.append(result)
  193.             self.playagain()
  194.  
  195.     def guess(self, gamesession):
  196.         userguess = input("Guess a letter: ").lower()
  197.         self.cls()
  198.         if userguess == "quit":
  199.             sys.exit()
  200.         elif userguess == "menu":
  201.             self.introduction()
  202.         elif userguess == "guess":
  203.             self.fullguess(gamesession)
  204.             return
  205.         elif len(userguess) != 1:
  206.             print("\n\nYou must guess a (single) letter!")
  207.             return
  208.         elif gamesession.has_guessed(userguess):
  209.             print("\n\nYou've already guessed that letter!")
  210.             return
  211.         elif not userguess.isalpha():
  212.             print("\n\nYou can only guess letters!")
  213.             return
  214.  
  215.         if gamesession.guess(userguess):
  216.             print("\n\nGood guess!")
  217.             if gamesession.has_won():
  218.                 self.cls()
  219.                 print("\n\n\nYOU WIN!!! The word was '{}'.\n".format(gamesession.secret_word))
  220.                 print("\n\nYour score was: {}!\n".format(gamesession.score))
  221.                 result = gamesession.name + " " + str(gamesession.score)
  222.                 self.sboard.append(result)
  223.                 self.playagain()
  224.             return
  225.         else:
  226.             bad1 = int(len(gamesession.bad_guesses))
  227.             if bad1 == 7:
  228.                 print("\n\nNext incorrect answer means that you lose!!")
  229.             else:
  230.                 print("\n\nUnlucky! You have used {} of your 7 wrong guesses!".format(bad1))
  231.             return
  232.  
  233.     def fullguess(self, gamesession):
  234.         self.cls()
  235.         print("\n\n\nThis is what you have so far:\n")
  236.         print(gamesession.make_guessed_line())
  237.         print("\nThe clue was:")
  238.         print(gamesession.comment)
  239.         print("\n\nEnter the word/phrase that you think is correct:")
  240.         print("(Type 'letters' to go back to guessing letter by letter)")
  241.         fguess = input("> ").lower()
  242.         if fguess == "quit":
  243.             self.cls()
  244.             sys.exit()
  245.         elif fguess == "menu":
  246.             self.introduction()
  247.         elif fguess == "letters":
  248.             self.cls()
  249.             print('\n\n')
  250.             return
  251.         elif gamesession.make_full_guess(fguess):
  252.             self.cls()
  253.             print("\n\n\nCONGRATULATIONS!!! You got it right!\n")
  254.             print("\nYour score was: {}!\n".format(gamesession.score))
  255.             result = gamesession.name + " " + str(gamesession.score)
  256.             self.sboard.append(result)
  257.             self.playagain()
  258.         else:
  259.             self.cls()
  260.             print("\n\n\nOUCH!!! Bad luck, keep trying!")
  261.             print("\nYour score is: {}!\n".format(gamesession.score))
  262.             while True:
  263.                 g_again = input("Type 'again' to guess again, or 'letters' to go back to guessing by letter: ").lower()
  264.                 if g_again == "again":
  265.                     self.fullguess(gamesession)
  266.                 elif g_again == "letters":
  267.                     self.cls()
  268.                     print('\n\n')
  269.                     return
  270.                 elif g_again == "quit":
  271.                     self.cls()
  272.                     sys.exit()
  273.                 elif g_again == "menu":
  274.                     self.introduction()
  275.             return
  276.  
  277.     def playagain(self):
  278.         while True:
  279.             play_again = input("""
  280.    Options: 'yes' 'no' 'menu' 'score' 'quit'\n
  281.    Would you like to play again?: """).lower()
  282.             if play_again == "yes":
  283.                 self.setupgame()
  284.             elif play_again == "no" or play_again == "quit":
  285.                 self.cls()
  286.                 sys.exit()
  287.             elif play_again == "menu":
  288.                 self.introduction()
  289.             elif play_again == "score":
  290.                 self.scoreboard()
  291.             else:
  292.                 self.cls()
  293.                 print("\n\nYou must type either 'yes' or 'no'!\n\n")
  294.  
  295. if __name__ == '__main__':
  296.     game = Game()
  297.     game.introduction()
Advertisement
Add Comment
Please, Sign In to add comment