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

C++猜单词游戏开发:循环、函数、代码组织问题求助

猜词游戏代码框架搭建方案

核心逻辑分层梳理

  • 初始化层:处理游戏启动前的所有准备工作,只执行一次
  • 主循环层:控制游戏的回合流程,直到触发胜利/失败条件才退出
  • 功能模块层:每个独立功能拆成单独的代码块,互不干扰
    • 输入校验模块:专门处理字母猜测的长度校验、大小写转换
    • 字母匹配模块:判断猜测字母是否存在于目标词,更新掩码
    • 整词匹配模块:判断整词猜测是否正确
    • 结束判断模块:检查剩余次数、是否猜对所有字母/整词,更新游戏结束标记

最简可扩展代码骨架

#include <iostream>
#include <string>
using namespace std;

// 单字符转小写辅助函数,不使用库函数
char charToLower(char c) {
    if (c >= 'A' && c <= 'Z') return c + 32;
    return c;
}

// 字符串全转小写辅助函数,方便后续统一匹配
string strToLower(string s) {
    string res;
    for (int i=0; i<s.length(); i++) {
        res += charToLower(s[i]);
    }
    return res;
}

int main()
{
    // -------------------------- 初始化层开始 --------------------------
    string targetWord; // 玩家1输入的原始单词
    cout << "Player 1, enter a word for Player 2 to guess: " << endl;
    getline(cin, targetWord);
    string lowerTarget = strToLower(targetWord); // 提前存全小写目标词,后续所有匹配都用它
    
    int leftLetterChance = 5; // 剩余字母猜测次数
    int leftWordChance = 5; // 剩余整词猜测次数
    string mask = string(targetWord.length(), '-'); // 初始化掩码:和目标词等长的横线
    bool isGameOver = false;
    // -------------------------- 初始化层结束 --------------------------

    cout << "Player 2, you have 5 letter guesses, and 5 word guesses." << endl;

    // -------------------------- 主循环层开始 --------------------------
    while (!isGameOver) {
        // 先判断结束条件
        if (leftLetterChance <= 0 && leftWordChance <=0) {
            // 次数用完判负,自行补充提示输出
            isGameOver = true;
            break;
        }
        if (mask == targetWord) {
            // 所有字母猜对判赢,自行补充提示输出
            isGameOver = true;
            break;
        }

        // -------------------------- 字母猜测模块开始 --------------------------
        cout << endl << "Remaining letter guesses: " << leftLetterChance << ", please enter a single letter to guess: ";
        string letterInput;
        // 单独做输入校验,不掺杂其他逻辑
        while (true) {
            cin >> letterInput;
            if (letterInput.length() == 1) break;
            cout << "Invalid input! Please enter only 1 character: ";
        }
        char guessLetter = charToLower(letterInput[0]);
        leftLetterChance--; // 扣减次数

        // 此处自行实现字母匹配逻辑:遍历lowerTarget找所有匹配位置,更新mask,输出猜对位置提示
        // -------------------------- 字母猜测模块结束 --------------------------

        // 输出当前猜词进度
        cout << "Current word progress: " << mask << endl;

        // -------------------------- 整词猜测模块开始 --------------------------
        cout << endl << "Remaining word guesses: " << leftWordChance << ", do you want to guess the whole word? (y/n): ";
        char choose;
        cin >> choose;
        if (charToLower(choose) == 'y') {
            cout << "Please enter your word guess: ";
            string wordGuess;
            cin >> wordGuess;
            leftWordChance--; // 扣减次数
            // 此处自行实现整词匹配逻辑:转小写后和lowerTarget对比,猜对直接设isGameOver=true判赢
        }
        // -------------------------- 整词猜测模块结束 --------------------------
    }
    // -------------------------- 主循环层结束 --------------------------

    return 0;
}

原代码常见问题说明

  • 掩码字符串需要提前初始化对应长度,直接调用dashes.at(i)赋值会因为字符串长度为0触发越界错误
  • 输入校验循环只负责校验输入合法性,不要把匹配逻辑、整词猜测都塞进去,会导致逻辑混乱
  • 注意变量名大小写统一,GameOver和Gameover是两个不同的变量,判等的==不要写成赋值的=
  • 大小写转换统一用辅助函数实现,避免重复写相同逻辑,也方便排查错误

内容的提问来源于stack exchange,提问作者Newbcakes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:06:06