You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 21:54:07