zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    图表算法—有向图
    图表算法—无向图
    搜索算法—哈希表
    红黑树的删除
    搜索算法—红黑树
    搜索算法—二叉搜索树
    排序算法—堆排序
    快速排序改进——3区快速排序(3-way quicksort)
    数论——约数:算数基本定理及推论,欧几里得算法
    数论——乘法逆元(快速幂求法)及模运算
  • 原文地址:https://www.cnblogs.com/grainy/p/7282997.html
Copyright © 2011-2022 走看看