# **单词消除游戏系统设计与开发**
## **【程序设计思路】**
### **数据结构**:
本程序总共设计了四个类:
User 用户类 Player 闯关者类 Qmaker 出题者类 Game 游戏类
其中User是基类,Player和Qmaker继承User类。Game类是整个游戏机制内容
```c++
class User // 用户
{
protected:
string Name; //用户名
string PassWord; //密码
int Level; //等级
public:
void SetName(string name);
void SetPassWord(string password);
void SetLevel(int level);
int GetLevel();
string GetName();
string GetPassWord();
bool operator ==(const string& name);
User(int level = 1);
};
class Player : public User //闯关者
{
private:
int Exp; //经验值
int Chapter; //游戏关卡
public:
void SetChapter(int chapter );
int GetChapter();
void SetExp(int exp);
int GetExp();
Player(int exp = 0, int chapter = 1);
};
class Qmaker : public User //出题者
{
private:
int QNumber; //出题数
public:
void SetQNumber(int qnumber);
int GetQNumber();
Qmaker(int qnumber=0);
};
class Game
{
public:
int Register(); //注册
int Login(); //登录
void PlayGame(Player& player); //玩游戏
void MakeQusetion(Qmaker& qmaker); //出题
void Query(); //查询功能
bool GetJudegUser();
private:
bool JudgeUser; //1代表出题者,0代表创关者
int RadomWord(int chapter); //根据关卡随机选择单词
int ExpectWordLen(); //随机产生期望单词长度
void LegalInput(int& ExpectInput, int down, int up);//数字合法化输入
void LegalInput(bool& ExpectInput);
};
//除此之外还有三个全局变量:
vector<Word> Vocabulary; //词汇表
vector<Player> PlayerList; //闯关者列表
vector<Qmaker> QmakerList; //出题者列表
void GetVacabulary(); //从本地文件读入词汇表
void UpdateVacabulary(); //更新本地词汇表文件
void GetPlayerList();//从本地文件读入闯关者列表
void UpdatePlayerList(); //更新本地闯关者列表文件
void GetQmakerList();//从本地文件读入出题者列表
void UpdateQmakerList();//更新本地出题者列表文件
```
## 【**文件存储形式**】
采用文件存储,将词汇表,闯关者信息,出题信息分别记录在Vocabualry.txt、Player.txt、Qmaker.txt三个文本文件中。每次程序启动将本地文件数据读入程序容器中,程序结束前将程序容器数据写入本地文件。
## 【**程序结构主要逻辑**】
Game类提供程序执行的主要功能。包括注册、登录、闯关者游戏、出题者出题、用户查询功能等。该类中有一个数据成员JudgeUser来判断当前用户的属性(闯关者或者出题者)。在main函数中对Game提供的方法构造用户交互界面。由于前两版都是非最终版,因此用户交互界面比较粗糙,只供开发测试人员测试功能使用。
【**游戏核心设计策略**】
1.**登录注册策略**
本游戏在开始用户可以选择注册用户或者直接登录。注册时需要选择注册出题者或者闯关者,输入用户名未被注册过且两次密码输入相同后,注册成功。登录需要选择登录出题者或者闯关者,在输入用户名密码,通过数据库检验后,成功登录。用户只有在登录后,才能进行闯关或者出题。
2.**闯关关卡难度策略**
本游戏闯关共有10个关卡,随着关卡序号的提高,闯关的难度(单词的长度)也不断增加。单词产生策略是:将词汇表按照长度从小到大顺序排列,第一关从词汇表的前10%的单词里随机取出一个,第二关从序号在10%到20%的单词中随机取出一个,以此类推。其中最短单词长度为1,最长单词长度为14。按照这种随机策略,使得同一关卡的单词长度比较灵活(不是固定长度),但是又在一定的范围内。随着关卡序号的增加,单词难度可以很流畅地递增(而不是某个关卡固定单词长度)。
3.**出题者出题策略**
本游戏为了满足“出题者添加单词不应影响闯关关卡难度”而设置了一种特殊的出题策略。首先考虑出题者添加单词较少情况下,由于单词表十分大(3600以上),新添加一两个单词并不会影响闯关者难度。而我根据初始单词库各长度单词比例约束出题者按照一定概率出相应长度的单词。这样在时间足够长,出题者出题数非常大的情况下,根据大数定理,单词表各长度单词所占比例应基本保持不变,这样就保证了各个关卡难度不发生大的变化。
4.**闯关者升级策略**
在闯关者在不同难度的关卡下获得不同的经验者(关卡\*10 第一关10经验 第十关100经验),并根据经验值升级。每一级需要升级的经验值为 6*level²+50,即每次升级所需经验值与当前等级呈二次关系。这样可以保证随着等级的提升,升级所需要的经验越来越多。其中的比例系数是多次调整出来的,保证前期不会一关升好多级,后期不会好多关也不会升一级。
5.**出题者升级策略**
由于出题者出题难度较大,不像闯关者在高关卡可以获得更多经验。因此我设计出题者是每出5个符合要求的新单词,那么出题者就可以升一级。
6.**查询系统策略**
本系统可以使用4个功能:查询关者、查询出题者、闯关者排行榜、出题者排行榜。其中前两个是根据用户输入的名字检索相应的闯关者或出题者,若检索到则把其除密码外所有信息打印出。闯关者排行按照经验值从高到低排序,出题者排行榜按照出题数从多到少排序。
**最终服务器客户端版**
**【与前两版的主要区别】**
第三版采用服务器客户端模式,词汇表以及玩家表在服务器存储,用户使用客户端进行游戏。客户端和服务器采用socket通信,来获取服务器端的数据。服务器支持多线程并发,可以同时处理多个客户端的数据请求。除此之外,我还增添了“网上双人匹配对战”功能,用户可以在线匹配其他玩家进行联机对战。
【**程序结构逻辑**】
` `由于在第三版中,词汇表和用户表客户端不可直接获取,因此程序逻辑与前两版有所不同。对于客户端,它保留前两版程序的所有功能,是用户进行游戏的一方。在与服务器建立连接后,若遇到一些需要词汇表和用户表数据的操作时,客户端会向服务器发送特定的请求,服务器在接收到客户端的请求后,经过处理后会给予客户端相应的回应。(数据请求失败标志或者请求成功标志+数据)。服务器采取多线程,为每一个连接的客户端单独分配一个线程,并发处理客户端的数据请求并回应。
![](img/Aspose.Words.3cec39df-1238-43cf-aa48-1d002f407b67.001.png)
## 【游戏核心设计策略】(相较于前两版新增)
1.**C/S通信策略**
本游戏为了实现“在线游戏”“网络对战”等模式,将游戏分割为服务器和客户端。用户通过客户端进行注册、登录、游戏、出题、查询等操作。采用的socket通信机制是基于TCP协议的面向连接的通信,确保了实时性和安全性。为了便于在同一台计算机上演示,我采取了双方采用同一本地IP,在相同端口上通信。
2.**消息格式设计策略**
由于Socket网络通信只能传输字节流,因此采取合适发送格式十分重要。我采用消息格式是标志位(1个字节)+数据(n个字节),标志位是一些特定的字符。对于客户端是英文字母(a-n),每个字符代表设定好的固定数据请求。而对于服务器端,标志位只有‘1’和‘0’两种,‘1’代表请求成功,
没有合适的资源?快使用搜索试试~ 我知道了~
基于C++开发的单词消除游戏系统【100013163】
共32个文件
cpp:14个
h:12个
txt:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 142 浏览量
2023-08-11
12:41:08
上传
评论
收藏 45KB ZIP 举报
温馨提示
词消除游戏由两类参与者组成:闯关者(即游戏玩家),出题者(为游戏增加游戏中使用单词)。游戏规则为,游戏每一轮,程序会根据该关卡难度,显示一个单词,一定时间后单词消失。闯关者需要在相应地方输入刚刚显示并消失的单词,如果闯关者输入正确(即闯关者输入的单词与刚刚显示的单词完全一致,包含大小写)则为通过。一关可以由一轮或者多轮组成。
资源推荐
资源详情
资源评论
收起资源包目录
100013163-基于C++开发的单词消除游戏系统.zip (32个子文件)
wordemgame
LICENSE 1KB
client
user.cpp 486B
player.h 283B
user.h 404B
file.cpp 3KB
main.cpp 165B
game.h 1KB
player.cpp 314B
file.h 670B
client.h 226B
qmaker.h 202B
client.cpp 2KB
game.cpp 17KB
qmaker.cpp 198B
sever
QmakerList.txt 123B
user.cpp 486B
player.h 283B
sever.h 344B
user.h 404B
file.cpp 3KB
main.cpp 367B
Vocabulary.txt 31KB
game.h 1KB
player.cpp 314B
file.h 690B
qmaker.h 202B
sever.cpp 3KB
game.cpp 9KB
qmaker.cpp 198B
PlayerList.txt 264B
img
Aspose.Words.3cec39df-1238-43cf-aa48-1d002f407b67.001.png 6KB
README.md 11KB
共 32 条
- 1
资源评论
神仙别闹
- 粉丝: 3862
- 资源: 7472
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功