wordle game 猜字游戏

wordle game

                        .___.__                                         
__  _  _____________  __| _/|  |   ____      _________    _____   ____  
\ \/ \/ /  _ \_  __ \/ __ | |  | _/ __ \    / ___\__  \  /     \_/ __ \ 
 \     (  <_> )  | \/ /_/ | |  |_\  ___/   / /_/  > __ \|  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中替换。单词之间以换行符分隔以保证程序正常运行,请使用与执行环境一样格式的文档换行符

posted @ 2024-12-03 22:22  黄花菜狗  阅读(78)  评论(0)    收藏  举报
1