C++ Hangman游戏添加Hashing哈希与碰撞解决算法实现求助
基于哈希算法的终端Hangman猜词游戏开发需求
项目背景
小组学校项目要求开发一款基于哈希与碰撞解决算法的终端Hangman(吊死鬼)猜词游戏,目前已完成的基础代码未集成哈希相关逻辑,需要补充对应算法实现。
游戏核心规则
- 玩家每次猜测1个字母解谜
- 猜对时目标词中所有匹配的字符都会被展示,例如目标词为“book”时猜测“o”,两个“o”都会被标记为已解开
- 每次猜错会给吊死鬼画像加1笔,画满7笔即完成;每个唯一错误猜测仅累计1次
- 玩家未猜全所有字符前吊死鬼画像完成则玩家失败
- 吊死鬼画像完成前玩家猜全所有字符则玩家获胜
- 玩家未猜够胜负所需字母数时展示对应提示
额外功能要求
- 实时记录玩家已猜测的字母并告知用户
- 支持记录和查询玩家游戏历史,包括胜场、负场、平局次数,获胜所用猜测次数等信息
- 游戏需持续运行直到玩家主动退出,交互需友好
开发强制要求
除数组和函数外,必须使用哈希函数与碰撞解决算法,也可使用其他算法提升运行效率。
现有未集成哈希逻辑的C++代码(已修复原代码语法错误)
#include <iostream> #include <fstream> #include <ctime> #include <string> #include <cstdlib> int main() { char start{}; std::cout << "_____" << std::endl; std::cout << " | |" << std::endl; std::cout << " | O" << std::endl; std::cout << " | /|\\" << std::endl; std::cout << " | |" << std::endl; std::cout << " | / \\" << std::endl; std::cout << " __|_" << std::endl; std::cout << " | |______" << std::endl; std::cout << " |_________|" << std::endl; std::cout << "\n"; std::cout << "Press any key (and Enter) to start" << std::endl; std::cin >> start; int Tries{7}; char Guess; bool CorrectGuess = false; char PreviousGuesses[7]; PreviousGuesses[0] = '\0'; for (int i = 1; i < 6; i++) { PreviousGuesses[i] = '-'; } PreviousGuesses[6] = '\0'; std::string Word; std::string WordList[99]; srand(time(NULL)); std::ifstream RandomWord; RandomWord.open("assignment.txt"); for (int i = 0; i < 99; i++) { RandomWord >> WordList[i]; std::cout << WordList[i] << std::endl; } int RandomNum = rand() % 99; Word = WordList[RandomNum]; std::cout << Word << std::endl; RandomWord.close(); std::string MysteryWord(Word.length(), '*'); while (Tries >= 0) { CorrectGuess = false; std::cout << "The word you have to guess is :\n\n"; std::cout << MysteryWord << std::endl; std::cout << "\nThere are " << MysteryWord.length() << " letters in the word\n\n"; std::cout << "You have " << Tries << " guesses left\n"; if (PreviousGuesses[0] == '\0') { std::cout << std::endl; } else { std::cout << "You have guessed: " << PreviousGuesses << std::endl; } std::cout << "\nGuess a letter: "; std::cin >> Guess; for (int i = 0; i < MysteryWord.length(); i++) { if (Word[i] == Guess) { MysteryWord[i] = Guess; CorrectGuess = true; } } if (Word == MysteryWord) { std::cout << "\n\nCongratulations! you've got the word correct: " << MysteryWord << std::endl; break; } if (CorrectGuess == false) { std::cout << "Sorry, " << Guess << " is not part of the word" << std::endl; } else { std::cout << "Congratulation! " << Guess << " is one of the letters! " << std::endl; } switch (Tries) { case 7: { std::cout << "_____" << std::endl; std::cout << " | |" << std::endl; std::cout << " | " << std::endl; std::cout << " | " << std::endl; std::cout << " | " << std::endl; std::cout << " | " << std::endl; std::cout << " __|_" << std::endl; std::cout << " | |______" << std::endl; std::cout << " |_________|" << std::endl; Tries--; if (CorrectGuess == false) { PreviousGuesses[0] = Guess; } break; } case 6: { std::cout << "_____" << std::endl; std::cout << " | |" << std::endl; std::cout << " | O" << std::endl; std::cout << " | " << std::endl; std::cout << " | " << std::endl; std::cout << " | " << std::endl; std::cout << " __|_" << std::endl; std::cout << " | |______" << std::endl; std::cout << " |_________|" << std::endl; Tries--; if (CorrectGuess == false) { PreviousGuesses[1] = Guess; } break; } case 5: { std::cout << "_____" << std::endl; std::cout << " | |" << std::endl; std::cout << " | O" << std::endl; std::cout << " | |" << std::endl; std::cout << " | " << std::endl; std::cout << " | " << std::endl; std::cout << " __|_" << std::endl; std::cout << " | |______" << std::endl; std::cout << " |_________|" << std::endl; Tries--; if (CorrectGuess == false) { PreviousGuesses[2] = Guess; } break; } case 4: { std::cout << "_____" << std::endl; std::cout << " | |" << std::endl; std::cout << " | O" << std::endl; std::cout << " | |" << std::endl; std::cout << " | |" << std::endl; std::cout << " | " << std::endl; std::cout << " __|_" << std::endl; std::cout << " | |______" << std::endl; std::cout << " |_________|" << std::endl; Tries--; if (CorrectGuess == false) { PreviousGuesses[3] = Guess; } break; } case 3: { std::cout << "_____" << std::endl; std::cout << " | |" << std::endl; std::cout << " | O" << std::endl; std::cout << " | /|" << std::endl; std::cout << " | |" << std::endl; std::cout << " | " << std::endl; std::cout << " __|_" << std::endl; std::cout << " | |______" << std::endl; std::cout << " |_________|" << std::endl; Tries--; if (CorrectGuess == false) { PreviousGuesses[4] = Guess; } break; } case 2: { std::cout << "_____" << std::endl; std::cout << " | |" << std::endl; std::cout << " | O" << std::endl; std::cout << " | /|\\" << std::endl; std::cout << " | |" << std::endl; std::cout << " | " << std::endl; std::cout << " __|_" << std::endl; std::cout << " | |______" << std::endl; std::cout << " |_________|" << std::endl; Tries--; if (CorrectGuess == false) { PreviousGuesses[5] = Guess; } break; } case 1: { std::cout << "_____" << std::endl; std::cout << " | |" << std::endl; std::cout << " | O" << std::endl; std::cout << " | /|\\" << std::endl; std::cout << " | |" << std::endl; std::cout << " | / " << std::endl; std::cout << " __|_" << std::endl; std::cout << " | |______" << std::endl; std::cout << " |_________|" << std::endl; Tries--; if (CorrectGuess == false) { PreviousGuesses[6] = Guess; } break; } case 0: { std::cout << "_____" << std::endl; std::cout << " | |" << std::endl; std::cout << " | O" << std::endl; std::cout << " | /|\\" << std::endl; std::cout << " | |" << std::endl; std::cout << " | / \\" << std::endl; std::cout << " __|_" << std::endl; std::cout << " | |______" << std::endl; std::cout << " |_________|" << std::endl; std::cout << "\n\nGAME OVER" << std::endl; Tries--; break; } default: std::cout << "--Error--"; } } return 0; }
内容的提问来源于stack exchange,提问作者bloodystudent
相关产品推荐
相关产品推荐

