我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++ 实战开发一个猜单词的小游戏

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++ 实战开发一个猜单词的小游戏

前言

程序内的单词全部保存于word.txt的文本文档中,玩家排名保存在rand.txt文本文档中。运行程序时,会自动读取文本中的内容。

游戏规则:①先请用户输入猜的单词数量,可以有一个默认值。②随机抽取单词,对每个单词,系统根据谜底单词长度在屏幕上显示相应个数'#',假设谜底单词为"hello",则在屏幕上输出"#####"。③玩家输入一个字母进行猜测,如果这个字母不在单词中,系统提示玩家不对;如果猜对字母,比如玩家输入了一个'l',则在屏幕上输出"--ll-"。④重复③,直到玩家在规定的次数内猜出了单词或者超过次数游戏失败。⑤显示玩家每个单词猜对与猜错次数等统计信息。如果玩家猜出单词,计算成绩,如进入前五名提示玩家并记录存储到记录文件中。⑥询问玩家是否开始新一轮猜词,如果玩家选“否”,则系统退到外面的菜单。

效果展示

一、函数接口


enum
{
	EXIT=0,
	START,
	CHECK,
	CLEAR
};
 
//玩家结构体声明
typedef struct 
{
	string name;
	int right;//猜对单词个数
	int wrong;//猜错个数
	int score;//得分
}GamePlayer;
void Show_Menu();//展示菜单内容
void exitsystem();//退出系统
void PlayGame(char File[200][100], vector<GamePlayer>& v);//开始游戏
void Check();//查看排名
void OpenFile(char File[200][100]);//打开单词文档,导入到char数组中
void Clear();//清空玩家名单
int GuessWordNum(int& GWN);//设置猜单词的数量
string InputName(string& name);//输入玩家的姓名
void Sort(vector<GamePlayer>& v);//将vector数组中的玩家按分数排名
 
//对自定义类型的数组排序的前置比较函数
static bool myCompare(const GamePlayer& player1, const GamePlayer& player2);
void InFile(vector<GamePlayer>& v);//将排好序的玩家排名写入到"rand.txt"中

二、重要函数接口详解

1.菜单内容


void Show_Menu()
{
	cout << "*****************************************" << endl;
	cout << "**********欢迎使用猜单词小程序!*********" << endl;
	cout << "*************0.退出单词小程序************" << endl;
	cout << "*************1.开始游戏******************" << endl;
	cout << "*************2.查看玩家排名**************" << endl;
	cout << "*************3.清空玩家排名**************" << endl;
	cout << endl;
 
}

2.退出程序


void exitsystem()
{
	cout << "欢迎下次使用" << endl;
	system("pause");
	exit(0);

3.打开单词文件


void OpenFile(char File[200][100])
{
	ifstream ifs;
	int iline = 0;
	ifs.open("word.txt", ios::in);
	if (ifs)
	{
		while (!ifs.eof())
		{
			ifs >> File[iline];
			iline++;
			if (iline >= 200)
			{
				break;
			}
		}
	}
	else
		cout << "对不起,读取的单词本为空" << endl;
 
}

4.开始游戏


void PlayGame(char File[200][100], vector<GamePlayer>& v)
{
	int flag = 0;
	OpenFile(File);
	string name;
	InputName(name);
	int GWN = 0;
	GuessWordNum(GWN);
	int right = 0;
	int wrong = 0;
	while (GWN)
	{
		int Rand = 0;//设置随机数,放入到FiIe数组中
		srand(time(NULL));//设置一个随机种子
		Rand = rand() % 199;//随机取出单词
		cout << "————————您一共有10次猜的机会——————" << endl;
		cout << "————下面是所猜单词的长度->用#来代替——————" << endl;
		int length = strlen(File[Rand]);
		for (int i = 0; i < length; i++)
		{
			cout << "#";
		}
		cout << endl;
		int chance = 10;
		while (chance)
		{
			string guessword;
			cin >> guessword;
			if (guessword == File[Rand])
			{
				cout << "恭喜你,猜对了" << endl;
				right++;
				flag = 1;
				break;
			}
			else
			{
				chance--;
				if (chance >= 1)
				{
					cout << "对不起,您猜错了" << endl;
					cout << "您还有" << chance << "次机会,请好好把握" << endl;
				}
				else
				{
					cout << "对不起,本轮您已经没有机会了" << endl;
					cout << "很遗憾,没猜出..." << endl;
					cout << "正确单词为" << File[Rand] << endl;
					break;
				}
			}
		}
		GWN--;
		if (flag == -1)
		{
			wrong++;
		}
		if (GWN == 0)
		{
			cout << "您是否要进行下一轮游戏" << endl;
			cout << "如果确定请输入Y,如果退出请按任意键" << endl;
			char s;
			cin >> s;
			if (s == 'y' || s == 'Y')
			{
				cout << "请输入您要猜单词的个数" << endl;
				int i = 0;
				cin >> i;
				GWN = i;
			}
			else
			{
				int score = 20 * right - 10 * wrong;
				cout << "本轮游戏您一共猜对了" << right << "个单词" << "猜错了" << wrong << "个单词" << endl;
				cout << "本轮游戏您一共得分为" << score << endl;
				GamePlayer GP;
				GP.name = name;
				GP.right = right;
				GP.wrong = wrong;
				GP.score = score;
				v.push_back(GP);
				cout << endl;
				cout << endl;
				cout << endl;
				cout << endl;
			}
		}
 
	}
}

5.查看玩家排名


void Check()
{
	ifstream ifs("rand.txt");
	vector<string> show;
	string line;
	while (getline(ifs, line)) //判断排名文本是否为空
	{
		show.push_back(line);
	}
	int count = show.size();
	if (show.size() >= 1)
	{
		int i = 0;
		for (; i < count; i++)
		{
			cout << show[i] << endl;
		}
		cout << endl;
		cout << endl;
		cout << endl;
		cout << endl;
		cout << endl;
		return;
	}
	else
	{
		cout << "对不起,暂时没有排名" << endl;
		cout << endl;
		cout << endl;
		cout << endl;
		cout << endl;
		cout << endl;
	}

6.清空玩家排名


void Clear()
{
	cout << "您确定要删除所有玩家的记录吗?" << endl;
	cout << "如果确定请输入Y,如果退出请按任意键" << endl;
	char s;
	cin >> s;
	if (s == 'y' || s == 'Y')
	{
		ofstream file("rand.txt", ios::trunc);
		if (!file)
		{
			cout << "清空文本失败" << endl;
			exit(0);
		}
		file.close();
		return;
		
	}
	else
	{
		return;
	}
 
}

7.玩家排名

这里对玩家的分数进行排序,利用qsort库函数


static bool myCompare(const GamePlayer& player1, const GamePlayer& player2)
{
	return player1.score > player2.score;
}
void Sort(vector<GamePlayer>& v)
{
	sort(v.begin(), v.end(), myCompare);
	InFile(v);
}

全部代码展示


#include<fstream>
#include<iostream>
#include<string>
#include<vector>
#include<time.h>
#include <algorithm> 
using namespace std;
enum
{
	EXIT=0,
	START,
	CHECK,
	CLEAR
};
 
//玩家结构体声明
typedef struct 
{
	string name;
	int right;//猜对单词个数
	int wrong;//猜错个数
	int score;//得分
}GamePlayer;
void Show_Menu();//展示菜单内容
void exitsystem();//退出系统
void PlayGame(char File[200][100], vector<GamePlayer>& v);//开始游戏
void Check();//查看排名
void OpenFile(char File[200][100]);//打开单词文档,导入到char数组中
void Clear();//清空玩家名单
int GuessWordNum(int& GWN);//设置猜单词的数量
string InputName(string& name);//输入玩家的姓名
void Sort(vector<GamePlayer>& v);//将vector数组中的玩家按分数排名
 
//对自定义类型的数组排序的前置比较函数
static bool myCompare(const GamePlayer& player1, const GamePlayer& player2);
void InFile(vector<GamePlayer>& v);//将排好序的玩家排名写入到"rand.txt"中
 
 
 
 
 
 
void Show_Menu()
{
	cout << "*****************************************" << endl;
	cout << "**********欢迎使用猜单词小程序!*********" << endl;
	cout << "*************0.退出单词小程序************" << endl;
	cout << "*************1.开始游戏******************" << endl;
	cout << "*************2.查看玩家排名**************" << endl;
	cout << "*************3.清空玩家排名**************" << endl;
	cout << endl;
 
}
void OpenFile(char File[200][100])
{
	ifstream ifs;
	int iline = 0;
	ifs.open("word.txt", ios::in);
	if (ifs)
	{
		while (!ifs.eof())
		{
			ifs >> File[iline];
			iline++;
			if (iline >= 200)
			{
				break;
			}
		}
	}
	else
		cout << "对不起,读取的单词本为空" << endl;
 
}
 
int GuessWordNum(int& GWN)
{
	cout << "请输入你想猜单词的数量" << endl;
	cin >> GWN;
	return GWN;
}
 
string InputName(string& name)
{
	cout << "请输入您的名字: " << endl;
	cin >> name;
	return name;
}
void exitsystem()
{
	cout << "欢迎下次使用" << endl;
	system("pause");
	exit(0);
}
 
 
void InFile(vector<GamePlayer>& v)
{
	ofstream ofs;
	ofs.open("rand.txt", ios::out);
	if (ofs)
	{
		for (auto e : v)
		{
			ofs << "姓名:" << e.name << "  " << "答对:" << e.right << "  " << "答错:" << e.wrong << "得分:" << "  "
			<< e.score << " " << endl;
		}
 
	}
	else
	{
		cout << "对不起,没有这个排名本" << endl;
 
	}
 
}
 
static bool myCompare(const GamePlayer& player1, const GamePlayer& player2)
{
	return player1.score > player2.score;
}
void Sort(vector<GamePlayer>& v)
{
	sort(v.begin(), v.end(), myCompare);
	InFile(v);
}
 
 
 
void PlayGame(char File[200][100], vector<GamePlayer>& v)
{
	int flag = 0;
	OpenFile(File);
	string name;
	InputName(name);
	int GWN = 0;
	GuessWordNum(GWN);
	int right = 0;
	int wrong = 0;
	while (GWN)
	{
		int Rand = 0;//设置随机数,放入到FiIe数组中
		srand(time(NULL));//设置一个随机种子
		Rand = rand() % 199;//随机取出单词
		cout << "————————您一共有10次猜的机会——————" << endl;
		cout << "————下面是所猜单词的长度->用#来代替——————" << endl;
		int length = strlen(File[Rand]);
		for (int i = 0; i < length; i++)
		{
			cout << "#";
		}
		cout << endl;
		int chance = 10;
		while (chance)
		{
			string guessword;
			cin >> guessword;
			if (guessword == File[Rand])
			{
				cout << "恭喜你,猜对了" << endl;
				right++;
				flag = 1;
				break;
			}
			else
			{
				chance--;
				if (chance >= 1)
				{
					cout << "对不起,您猜错了" << endl;
					cout << "您还有" << chance << "次机会,请好好把握" << endl;
				}
				else
				{
					cout << "对不起,本轮您已经没有机会了" << endl;
					cout << "很遗憾,没猜出..." << endl;
					cout << "正确单词为" << File[Rand] << endl;
					break;
				}
			}
		}
		GWN--;
		if (flag == -1)
		{
			wrong++;
		}
		if (GWN == 0)
		{
			cout << "您是否要进行下一轮游戏" << endl;
			cout << "如果确定请输入Y,如果退出请按任意键" << endl;
			char s;
			cin >> s;
			if (s == 'y' || s == 'Y')
			{
				cout << "请输入您要猜单词的个数" << endl;
				int i = 0;
				cin >> i;
				GWN = i;
			}
			else
			{
				int score = 20 * right - 10 * wrong;
				cout << "本轮游戏您一共猜对了" << right << "个单词" << "猜错了" << wrong << "个单词" << endl;
				cout << "本轮游戏您一共得分为" << score << endl;
				GamePlayer GP;
				GP.name = name;
				GP.right = right;
				GP.wrong = wrong;
				GP.score = score;
				v.push_back(GP);
				cout << endl;
				cout << endl;
				cout << endl;
				cout << endl;
			}
		}
 
	}
}
 
 
void Check()
{
	ifstream ifs("rand.txt");
	vector<string> show;
	string line;
	while (getline(ifs, line))
	{
		show.push_back(line);
	}
	int count = show.size();
	if (show.size() >= 1)
	{
		int i = 0;
		for (; i < count; i++)
		{
			cout << show[i] << endl;
		}
		cout << endl;
		cout << endl;
		cout << endl;
		cout << endl;
		cout << endl;
		return;
	}
	else
	{
		cout << "对不起,暂时没有排名" << endl;
		cout << endl;
		cout << endl;
		cout << endl;
		cout << endl;
		cout << endl;
	}
 
 
 
}
 
 
void Clear()
{
	cout << "您确定要删除所有玩家的记录吗?" << endl;
	cout << "如果确定请输入Y,如果退出请按任意键" << endl;
	char s;
	cin >> s;
	if (s == 'y' || s == 'Y')
	{
		ofstream file("rand.txt", ios::trunc);
		if (!file)
		{
			cout << "清空文本失败" << endl;
			exit(0);
		}
		file.close();
		return;
		
	}
	else
	{
		return;
	}
 
}
 
 
 
 
 
int main()
{
	int choice=0;
	char File[200][100];
	vector<GamePlayer> v;
	while (true)
	{
		Show_Menu();
		cout << "请输入您的选择: " << endl;
		cout << "请不要输入除数字以外的字母或符号: " << endl;
		cin >> choice;
			switch (choice)
		{
			case EXIT://退出系统
				exitsystem();
				break;
			case START://开始游戏
			{
				PlayGame(File, v);
				Sort(v);
				break;
			}
			case CHECK://查看玩家排名
				Check();
				break;
			case CLEAR://查看玩家排名
				Clear();
				break;
			default:
				system("cls");//清屏操作
				break;
		}
	}
	return 0;
}
 
 

到此这篇关于C++ 实战开发一个猜单词的小游戏的文章就介绍到这了,更多相关C++ 猜单词内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++ 实战开发一个猜单词的小游戏

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么用Python开发一个简单的猜数字游戏

本篇文章给大家分享的是有关怎么用Python开发一个简单的猜数字游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。如何使用Python制作一个简单的猜数字游戏。游戏规则玩家将猜
2023-06-16

使用C语言怎么实现一个猜拳小游戏

本篇文章给大家分享的是有关使用C语言怎么实现一个猜拳小游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。具体内容如下#include#include
2023-06-06

利用C语言实现一个可展开的扫雷小游戏

利用C语言实现一个可展开的扫雷小游戏?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。C语言是什么C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发,使用C语
2023-06-06

基于C#制作一个飞机大战小游戏的全过程

飞机大战小游戏详细大家都不陌生,下面这篇文章主要给大家介绍了关于基于C#制作一个飞机大战小游戏的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2023-02-16

Vue+TailWindcss怎么实现一个简单的闯关小游戏

今天小编给大家分享一下Vue+TailWindcss怎么实现一个简单的闯关小游戏的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧
2023-06-29

【小程序】快来开发你的第一个微信小游戏(详细流程)

🥳 作者:伯子南 😎 坚信: 好记性不如乱笔头,独乐乐不如众乐乐 💪 个人主页:https://blog.csdn.net/qq_34577234?spm=1010.2135.3001.5
2023-08-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录