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

目录
  • 前言
  • 效果展示
  • 一、函数接口
  • 二、重要函数接口详解
    • 1.菜单内容
    • 2.退出程序
    • 3.打开单词文件
    • 4.开始游戏
    • 5.查看玩家排名
    • 6.清空玩家排名
    • 7.玩家排名
  • 全部代码展示

前言

程序内的单词全部保存于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++ 猜单词内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++入门之实现十步万度游戏

    参考 <C和C++游戏趣味编程> 童晶 十步万度游戏 用鼠标点击任意一个小圆圈,其指针顺时针旋转90度,后续被指向的圆圈指针也依次旋转,所有圆圈的旋转度数累积.玩家点击10次,尝试得到尽量高的旋转度数 绘制圆圈和指针 定义一个结构体Round,用于保存圆圈的信息,成员变量有圆圈的圆心坐标.半径和角度.进一步,定义一个Round类型的二维数组,保存所有圆圈的信息 #include <graphics.h> #include <conio.h> #include <m

  • 使用c++编程实现简单的打字小游戏

    目录 你是否对键盘熟悉? "qwertyuiopasdfghjklzxcvbnm"是否已经印在你的脑海里? NO? 没有关系,今天,让我来帮你对键盘有一个更深一步的了解吧! #include"stdio.h" #include"stdlib.h" #include"windows.h" #include"conio.h" void entry_place(int num) { for(int i;i<

  • C++入门指南之贪吃蛇游戏的实现

    目录 参考 贪吃蛇游戏 程序框架 绘制游戏地图和蛇 小蛇向右移动 控制小蛇4个方向移动 时间控制的改进 失败判断与显示 添加食物 完整代码 总结 参考 <C和C++游戏趣味编程> 贪吃蛇游戏 键盘控制小蛇上.下.左.右移动,迟到食物后长度加1:蛇头碰到自身或窗口边缘,游戏失败 程序框架 #include <graphics.h> #include <conio.h> #include <stdio.h> // 全局变量定义 void startup() //

  • C++实现简易贪吃蛇游戏

    C++实现建议贪吃蛇(不会闪屏幕) 使用vs2013完成.记录踏上游戏开发的道路. 效果图 代码 // 2021.7.24.1贪吃蛇.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <list> #include <numeric> #include <algorithm> #include <Windows.h> #includ

  • C++实现简易的弹球小游戏

    本文实例为大家分享了C++实现弹球小游戏的具体代码,供大家参考,具体内容如下 操作说明:键盘A和D键控制左右移动,让球不要落下. #include <graphics.h> #include <conio.h> #include <time.h> int i; int xx=0; int yy = 0; class Ball { public: int x, y; clock_t b; void draw() { setfillcolor(RGB(200, 399, 1

  • 用C++实现推箱子小游戏

    前言 推箱子小游戏相信是很多人的同年记忆了,今天用c++语言来尝试下,用的是vs编译器. 代码还有很多可以优化的地方,为了更直观了解函数的形参和实参,所以地图没有用全局变量声明了,其实用全局变量声明会简洁很多. 头文件和main函数分享在最下面了. 提示:以下是本篇文章正文内容,下面案例可供参考 一.初始化游戏数据 void GameInit(int(*&pMap)[10][10], int index)//两张地图数据 { // static:返回静态全局区变量 static int loca

  • C++语言实现拼图游戏详解

    目录 开发环境:Visual Studio 2019,easyx图形库. 游戏功能列表: 游戏效果 一.头文件和基本量 二.封面 三.数据初始化 四.封面规则按钮 五.构造拼图 六.绘图函数 七.背景音乐 八.数据更新 九.通关判断 十.完整程序 总结 开发环境:Visual Studio 2019,easyx图形库. easyx下载官网: EasyX Graphics Library for C++ https://easyx.cn/ easyx使用文档: EasyX 文档 - 函数说明 ht

  • C++实现俄罗斯方块小游戏

    本文实例为大家分享了C++实现俄罗斯方块小游戏的具体代码,供大家参考,具体内容如下 操作说明: D F:左右旋转 J  L:左右移动 E(一堆键都行): 加快下落速度 空格: 开始游戏 与 一落到底 上代码! #include <cstdio> #include <cstdlib> #include <cstring> #include <windows.h> #include <ctime> #include <conio.h> #

  • 利用C/C++实现贪吃蛇游戏

    利用C/C++实现贪吃蛇 (注意:本文章仅供参考,第一次写博客还请多多指教.理解本文章需要easyx和c++等基础知识,并且需要了解贪吃蛇游戏机制) 贪吃蛇机制介绍 相信绝大多数人都曾玩过或者了解过贪吃蛇这款经典的游戏.贪吃蛇顾名思义,就是让蛇尽可能的吃食物.玩家可通过方向键或自定义键来控制蛇头的方向,使它吃到地图出现的随机食物.蛇每吃到一个食物,自身便会增长.当蛇碰到地图的边界或是蛇碰到自身,蛇便会死亡,游戏便结束. 机制大概了解过后,我们将考虑如何实现这类游戏. 设计与分析 首先,我们分析游

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

    目录 前言 效果展示 一.函数接口 二.重要函数接口详解 1.菜单内容 2.退出程序 3.打开单词文件 4.开始游戏 5.查看玩家排名 6.清空玩家排名 7.玩家排名 全部代码展示 前言 程序内的单词全部保存于word.txt的文本文档中,玩家排名保存在rand.txt文本文档中.运行程序时,会自动读取文本中的内容. 游戏规则:①先请用户输入猜的单词数量,可以有一个默认值.②随机抽取单词,对每个单词,系统根据谜底单词长度在屏幕上显示相应个数'#',假设谜底单词为"hello",则在屏幕

  • C语言实现猜数字的小游戏

    使用C语言来实现一个猜数字的小游戏 学习C语言有几天的时间了,在这期间对C语言的语法,程序结构有了了解,自己也练习过许多的代码,今天分享一个猜数字的代码. 一.猜数字游戏 描述:由程序随机生成一个1~100之间的数字,由用户去猜,直至猜对为止 1.代码 代码如下: #include <stdio.h> #include <stdlib.h> #include <time.h> void menu(void) { printf("|---------------

  • HBuilderX开发一个简单的微信小程序的实现步骤

    目录 一.配置 二.运行 一.配置 在微信开发者工具的设置中开启,如图: 在HBuilderX中新建项目,选择uni-app,如图: 在HBuilderX中编写代码 目录结构如图: 编写代码: index.less .content{ padding: 0 40rpx; image{ width: 100%; } .title{ display: block; text-align: center; font-size: 50rpx; font-weight: bold; } .operate{

  • Python实现的摇骰子猜大小功能小游戏示例

    本文实例讲述了Python实现的摇骰子猜大小功能小游戏.分享给大家供大家参考,具体如下: 最近学习Python的随机数,逻辑判断,循环的用法,就想找一些练习题,比如小游戏猜大小,程序思路如下: 开发环境:python2.7 , 附上源代码如下: 摇骰子的函数,这个函数其实并不需要传任何参数,调用后会返回三个点数结果的列表. import random def roll_dice(numbers=3,points=None): print ('<<<<< ROLL THE DI

  • 教你如何用python开发一款数字推盘小游戏

    今年年初,新一季的<最强大脑>开播了,第一集选拔的时候大家做了一个数字游戏,名叫<数字华容道>,当时何猷君以二十几秒的成绩夺得该项目的冠军,看了这个游戏之后我决定要写一个<数字华容道>的程序,过去了半年,我终于记起了这件事,今天就来实现. 数字推盘游戏(n-puzzle)是一种智力游戏,常见的类型有十五数字推盘游戏和八数字推盘游戏等.十五数字推盘游戏的板上会有十五个方块和一个大小相当于一个方块的空位(供方块移动之用),当15个数字依次排序并且最后一个格子为空位即代表挑战

  • Pygame实战之检测按键正确的小游戏

    目录 游戏功能 引入包,初始化配置信息 初始化游戏提示信息 显示随机的字母 设置游戏的属性 完整代码  游戏功能 游戏开始,屏幕随机显示一个字符,按 Enter 游戏开始,每个字母有10秒的按键时间,如果按对,则随机产生新的字符,一共60s,如果时间到了,则游戏结束. 引入包,初始化配置信息 import sys, random, time, pygame from pygame.locals import * pygame.init() screen = pygame.display.set_

  • 使用vue编写一个点击数字计时小游戏

    使用vue编写一个点击数字计时小游戏,列入你在文本框中输入3,点击开始会生成一个3行3列的表格,表格数据为1-9随机排列,这时候从1开始点击,按顺序点到9,当按正确顺序点击完毕,会提示所用的时间,如果顺序没有按对,会提示游戏结束. 1.首先下载vue源码,下载地址http://cn.vuejs.org 2.jquery是在面向dom操作,而vue是面向数据操作的,所以使用vue最好不要去操作dom,尽量发挥出vue的独到之处,(如果使用过angularjs可能更容易理解) 3.建立一个普通的ht

  • 教你用Python写一个水果忍者小游戏

    目录 引言 一.需要导入的包 二.窗口界面设置 三.随机生成水果位置 四.绘制字体 五.玩家生命的提示 六.游戏开始与结束的画面 七.游戏主循环 总结 引言 水果忍者的玩法很简单,尽可能的切开抛出的水果就行. 今天小五就用python简单的模拟一下这个游戏.在这个简单的项目中,我们用鼠标选择水果来切割,同时炸弹也会隐藏在水果中,如果切开了三次炸弹,玩家就会失败. 一.需要导入的包 import pygame, sys import os import random 二.窗口界面设置 # 游戏窗口

  • 利用Python写了一个水果忍者小游戏

    目录 前言: 一.需要导入的包 二.窗口界面设置 三.随机生成水果位置 四.绘制字体 五.玩家生命的提示 六.游戏开始与结束的画面 七.游戏主循环 最后 前言: 水果忍者到家都玩过吧,但是Python写的水果忍者你肯定没有玩过.今天就给你表演一个新的,用Python写一个水果忍者.水果忍者的玩法很简单,尽可能的切开抛出的水果就行. 今天就用python简单的模拟一下这个游戏.在这个简单的项目中,我们用鼠标选择水果来切割,同时炸弹也会隐藏在水果中,如果切开了三次炸弹,玩家就会失败. 一.需要导入的

  • Java使用定时器编写一个简单的抢红包小游戏

    目录 1.新建项目 2. 添加 计时器,按钮组件 3.抢红包业务逻辑 4.效果演示 1.新建项目 2. 添加 计时器,按钮组件 <?xml version="1.0" encoding="utf-8"?> <DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_parent" ohos:widt

随机推荐