wordle猜字游戏
.___.__
__ _ _____________ __| _/| | ____ _________ _____ ____
\ \/ \/ / _ \_ __ \/ __ | | | _/ __ \ / ___\__ \ / \_/ __ \
\ ( <_> ) | \/ /_/ | | |_\ ___/ / /_/ > __ \| Y Y \ ___/
\/\_/ \____/|__| \____ | |____/\___ > \___ (____ /__|_| /\___ >
\/ \/ /_____/ \/ \/ \/
游戏规则介绍:
现有一个长度已知的单词,用户需要对该单词进行猜测。
对于用户每次的猜测结果,单词中未出现的字母用红色标识,出现过但位置不对的字母用黄色标识,位置和字形都正确的字母用绿色标识。
共有十次猜测机会
EG.答案为bless 用户猜测bleed,则程序返回的bleed中的字母颜色分别为:绿绿绿黄红
游戏画面如图所示:

代码实现
(1)引用头文件与定义宏
#define path "dictionary.txt" //定义一个path
#define reset "\033[0m" //用于字体颜色的改变和重置
#define red "\033[31m"
#define green "\033[32m"
#define yellow "\033[33m"
std::set<std::string> words; //定义一个set容器 用于存放单词
(2)函数体get_the_dictionary(获取单词字典)
void get_the_dictionary()
{
std::ifstream file(path);
for (std::string word; std::getline(file, word);) //逐行读取
{
int len = word.length();
if (len >= 4&&len <= 6) //控制单词长度为4-6
{
words.insert(word);
}
}
file.close();
}
(3)函数体get_random_word(生成随机单词)
void get_random_word(std::string& ans)
{
static std::mt19937 rng(std::random_device{}()); //随机数生成器
std::uniform_int_distribution<size_t> distribution(0, words.size() - 1);
auto it = words.begin(); //迭代器 初始化指向words的开始
std::advance(it, distribution(rng));
ans = *it; //将迭代器 it 当前指向的单词(即随机选中的单词)赋值给引用参数 ans
}
(4)函数体result(输出结果)
int result(std::string& input,std::string& ans)
{
int res=0;
if (input.length() != ans.length()) //长度错误
{
std::cout << "Wrong length!";
return 0;
}
for (int i = 0; i < ans.length(); i++) //历遍每个字母并输出对应颜色的字母
{
char c = input[i];
if (c == ans[i])
{
std::cout << green << c << reset;
res++;
}
else if (ans.find(c) != std::string::npos) //在ans中寻找与c匹配的字母
{
std::cout << yellow << c << reset;
}
else
std::cout << red << c << reset;
}
std::cout << "\n";
return res;
}
(5)主体main函数
int main()
{
int res = 0;
int try_times_left = 10;
std::string ans, input;
get_the_dictionary();
get_random_word(ans);
std::cout << "The game starts\n";
std::cout << "The length of the word is " << ans.length() << "\nYou have " << try_times_left << " times to try\n";
while(res != ans.length()) //循环输入,直到尝试次数归零
{
if (try_times_left == 0)
{
std::cout <<red<< "Loser!Now you can continue to try.";
}
else
std::getline(std::cin, input); //getline读取输入
result(input, ans);
if (res == ans.length())
{
std::cout << "Wuhoo,you win the game! >_<"; //QAQ
}
try_times_left--;
}
return 0;
}
注意
将你的单词字典文档路径在path中替换。单词之间以换行符分隔以保证程序正常运行,请使用与执行环境一样格式的文档换行符

浙公网安备 33010602011771号