• Design Hangman


    Hangman is a paper and pencil guessing game for two or more players. One player thinks of a word, phrase or sentence and the other tries to guess it by suggesting letters or numbers, within a certain number of guesses.

    below is my steps of design hangman:

    1. Start game
    2. Generate a guess word from Word List
    3. Print "_ _ _ _ _ " indicate how many characters in the guess word "pizza"
    4. Player type in guess character "z" or "Z" both to lowercase
    5. Server return whether the "?" is in the "pizza"

        a. Add "z" into the guessed pool.

        b. If correct, print all characters in the process word "_ _ z z _"
        c. If wrong, draw body, guess cnt++;
        d. Repeat 4
    6. If player guessed process word == guess word, print "You Win!"
    7. If guess cnt > max guesscnt, draw body, print "You Lose…"

    my very simple C++ version. 

     1 #include "leetcode.h"
     2 
     3 class Hangman {
     4 public:
     5     Hangman() {
     6         srand(time(nullptr));
     7         theWord = wordList[rand()%wordList.size()];
     8         process.append(theWord.size(), '*');
     9         showL(process);
    10         step = 0;
    11     }
    12 
    13     int guess(const char guessed) {
    14         char c = tolower(guessed);
    15         if (checkProcess(c)) {
    16             showL("already guessed");
    17             return -1;
    18         }
    19         used.insert(c);
    20         vector<int> idx = checkTheWord(c);
    21         if (!idx.empty()) {
    22             updateProcess(idx);
    23             showL(process);
    24         } else {
    25             step++;
    26             updateBody(step);
    27             if (step >= maxGuess) {
    28                 showL("you lose!");
    29                 showL(theWord);
    30                 return  0;
    31             }
    32         }
    33         if (checkWin()) {
    34             showL("you win");
    35             return 1;
    36         }
    37         showV(used);
    38         return -1;
    39     }
    40 
    41 private:
    42     vector<string> wordList = {"pizza", "movie", "banana", "hangman"};
    43     const int maxGuess = 6;
    44     int step;
    45     string theWord;
    46     string process;
    47     set<char> used;
    48     void updateBody(int step) {
    49         showL("wrong guess ", step, " times.");
    50     }
    51     void updateProcess(const vector<int>& idx) {
    52         for(auto i : idx) {
    53             process[i] = theWord[i];
    54         }
    55     }
    56     bool checkProcess(const char c) {
    57         if (process.empty()) return false;
    58         for(auto s : used) {
    59             if (s == c) return true;
    60         }
    61         return false;
    62     }
    63     vector<int> checkTheWord(const char c) {
    64         vector<int> ret;
    65         for(int i = 0; i < theWord.size(); i++) {
    66             if (theWord[i] == c) ret.push_back(i);
    67         }
    68         return ret;
    69     }
    70     bool checkWin() {
    71         return process == theWord;
    72     }
    73 };
    74 
    75 int main() {
    76     Hangman hm;
    77     while(1) {
    78         string s;
    79         cin >> s;
    80         if (hm.guess(s[0]) != -1) break;
    81     }
    82     showL("Game Over");
    83 }

    copy from gist python version:

    https://gist.github.com/DevDarren/4199441

      1 class Hangman():
      2     def __init__(self):
      3         print "Welcome to 'Hangman', are you ready to die?"
      4         print "(1)Yes, for I am already dead.
    (2)No, get me outta here!"
      5         user_choice_1 = raw_input("->")
      6         
      7         if user_choice_1 == '1':
      8             print "Loading nooses, murderers, rapists, thiefs, lunatics..."
      9             self.start_game()
     10         elif user_choice_1 == '2':
     11             print "Bye bye now..."
     12             exit()
     13         else:
     14             print "I'm sorry, I'm hard of hearing, could you repeat that?"
     15             self.__init__()
     16 
     17     def start_game(self):
     18         print "A crowd begins to gather, they can't wait to see some real"
     19         print "justice. There's just one thing, you aren't a real criminal."
     20         print "No, no. You're the wrong time, wrong place type. You may think"
     21         print "you're dead, but it's not like that at all. Yes, yes. You've"
     22         print "got a chance to live. All you've gotta do is guess the right"
     23         print "words and you can live to see another day. But don't get so"
     24         print "happy yet. If you make 6 wrong guess, YOU'RE TOAST! VAMANOS!"
     25         self.core_game()
     26 
     27     def core_game(self):
     28         guesses = 0
     29         letters_used = ""
     30         the_word = "pizza"
     31         progress = ["?", "?", "?", "?", "?"]
     32         
     33         while guesses < 6:
     34             if self.checkWin(the_word, progress):
     35                 print "You Win!"
     36                 print "The word is " + the_word + "!"
     37                 break
     38             guess = raw_input("Guess a letter ->")
     39             if (guess in the_word) and (guess not in letters_used):
     40                 print "As it turns out, your guess was RIGHT!"
     41                 letters_used += "," + guess
     42                 self.hangman_graphic(guesses)
     43                 print "Progress: " + self.progress_updater(guess, the_word, progress)
     44                 print "Letter used: " + letters_used
     45             elif (guess not in the_word) and (guess not in letters_used):
     46                 guesses += 1
     47                 print "Things aren't looking so good, that guess was WRONG!" 
     48                 print "Oh man, that crowd is getting happy, I thought you"
     49                 print "wanted to make them mad?"
     50                 letters_used += "," + guess
     51                 self.hangman_graphic(guesses)
     52                 print "Progress: " + "".join(progress)
     53                 print "Letter used: " + letters_used
     54             else:
     55                 print "That's the wrong letter, you wanna be out here all day?"
     56                 print "Try again!"
     57 
     58 
     59 
     60     def hangman_graphic(self, guesses):
     61         if guesses == 0:
     62             print "________      "
     63             print "|      |      "
     64             print "|             "
     65             print "|             "
     66             print "|             "
     67             print "|             "
     68         elif guesses == 1:
     69             print "________      "
     70             print "|      |      "
     71             print "|      O      "
     72             print "|             "
     73             print "|             "
     74             print "|             "
     75         elif guesses == 2:
     76             print "________      "
     77             print "|      |      "
     78             print "|      O      "
     79             print "|     /       "
     80             print "|             "
     81             print "|             "
     82         elif guesses == 3:
     83             print "________      "
     84             print "|      |      "
     85             print "|      O      "
     86             print "|     /|      "
     87             print "|             "
     88             print "|             "
     89         elif guesses == 4:
     90             print "________      "
     91             print "|      |      "
     92             print "|      O      "
     93             print "|     /|     "
     94             print "|             "
     95             print "|             "
     96         elif guesses == 5:
     97             print "________      "
     98             print "|      |      "
     99             print "|      O      "
    100             print "|     /|     "
    101             print "|     /       "
    102             print "|             "
    103         elif guesses == 6:
    104             print "________      "
    105             print "|      |      "
    106             print "|      O      "
    107             print "|     /|     "
    108             print "|     /      "
    109             print "|             "
    110         else:
    111             print "________      "
    112             print "|      |      "
    113             print "|      O      "
    114             print "|             "
    115             print "|     /|     "
    116             print "|     /      "
    117             print "|             "
    118             print "The noose tightens around your neck, and you feel the"
    119             print "sudden urge to urinate."
    120             print "GAME OVER!"
    121             self.__init__()
    122 
    123     def progress_updater(self, guess, the_word, progress):
    124         i = 0
    125         while i < len(the_word):
    126             if guess == the_word[i]:
    127                 progress[i] = guess
    128                 i += 1
    129             else:
    130                 i += 1
    131 
    132         return "".join(progress)
    133     
    134     def checkWin(self, the_word, progress):
    135         i = 0
    136         while i < len(the_word):
    137             if progress[i] == the_word[i]:
    138                 i += 1
    139             else:
    140                 break
    141         return i == len(the_word)
    142     
    143 game = Hangman()

    some helpful links :

    https://www.clear.rice.edu/comp212/08-spring/projects/hangman/

  • 相关阅读:
    hdu1124 Factorial (求解一个数的阶乘中出现多少个0)
    SQL on Linux: Erro Unable to read instance id from /var/opt/mssql/.system/instance_id
    Error during WebSocket handshake: Unexpected response code: 200 问题处理
    CUP计算资源争抢通过IIS启用处理器关联解决
    ABP在MultipleDbContext也就是多库的场景下发布后异常“Could not find content root folder”问题处理
    ABP运行Login failed for user 'IIS APPPOOL XXXXX Reason: Could not find a login matching the name provided问题解决
    vs2017cpu占用过高解决方案
    docker查看挂载目录Volume
    windows 10安装docker一直挂起在Installing Components and Removing Files
    ABP vue+asp.net core yarn serve报 Cannot find module 'typescript/package.json错误
  • 原文地址:https://www.cnblogs.com/grainy/p/7282997.html
Copyright © 2020-2023  润新知