1

我对 C++ 很陌生,我正在尝试为使用 Visual Studio 的 2 名玩家编写一个类似 Wordle 的游戏,以便在 windows cmd 中运行。

我希望在输入用户字符串输入时将其替换为 '' 或 '*' 字符/符号。我只想使用 iostream 来做到这一点,我在网上遇到了各种解决方案,但没有导入任何额外的库(在线解决方案通常使用 getch(),它需要额外的库)

我的相关(非常简单)代码如下:


#include <iostream>
using namespace std;
char a[5];
string str;

int main()
{
    cout << "\nSet your Wordle first: ";
    cin >> str;

    for (int x = 0; x < 5; x++) {
        a[x] = str[x];
    }
return 0;
}

所以我想,当输入“str”的字符时,会在 Windows 控制台上输出一个“*”。

任何帮助或提示将不胜感激,谢谢!

4

1 回答 1

0

注意:向下滚动以获取更新的代码。

如果不使用外部库,就无法实现这一点。但是,您可以实现的最接近的是:

#include <iostream>
#include <Windows.h>
#include <conio.h>

// Positions the cursor 'home'. Visually clears the screen. Using this to avoid flickering
void cls() 
{
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), COORD());
}

void input(std::string& str) // Asks the user for the word
{
    int char_count = 0;
    while (true)
    {
        cls();
        std::cout << "Set your Wordle first: ";

        for (int i = 0; i < char_count; i++)
        {
            std::cout << "*";
        }

        if (_kbhit())
        {
            char c = _getch();
            if (c == '\r') // The character '\r' means enter
            {
                return;
            }

            char_count++;
            str.push_back(c);
        }
    }
}

int main()
{
    char a[5]{};
    std::string str;

    input(str);

    for (int x = 0; x < 5; x++) // Constrain to 5 characters
    {
        if (x < str.size()) a[x] = str[x];
        else break;
    }

    std::cout << std::endl; // Debug start
    for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
    {
        std::cout << a[i];
    } // Debug end
}

此代码按您的意愿工作。您可能会看到鼠标在闪烁,但正如我所说,在 C++ 中没有正确的方法可以做到这一点。此外,这不是完整的文字游戏, // Debug start 和 // Debug end 之间的代码仅用于测试目的。

编辑:我玩弄了它并修复了闪烁的问题:

#include <iostream>
#include <Windows.h>
#include <conio.h>

int prev_char_count = 0;

// Positions the cursor 'home'. Visually clears the screen. Using this to avoid flickering
void cls()
{
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), COORD());
}

void input(std::string& str) // Asks the user for the word
{
    int char_count = 0;

    cls();
    std::cout << "Set your Wordle first: ";

    for (int i = 0; i < char_count; i++)
    {
        std::cout << "*";
    }

    while (true)
    {
        if (_kbhit())
        {
            cls();
            std::cout << "Set your Wordle first: ";

            char c = _getch();
            if (c == '\r') // The character '\r' means enter
            {
                return;
            }

            char_count++;
            str.push_back(c);

            for (int i = 0; i < char_count; i++)
            {
                std::cout << "*";
            }
        }
    }
}

int main()
{
    char a[5]{};
    std::string str;

    input(str);

    for (int x = 0; x < 5; x++) // Constrain to 5 characters
    {
        if (x < str.size()) a[x] = str[x];
        else break;
    }

    std::cout << std::endl; // Debug start
    for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
    {
        std::cout << a[i];
    } // Debug end
}
于 2022-02-16T12:11:57.183 回答