基于C++实现平台类对战游戏
1. 设计任务的描述
用面向对象的设计方法来设计一款平台类对战游戏。
内容包括宠物小精灵的加入、用户注册与平台登录、游戏对战的设计。
2. 功能需求说明及分析
2.1 宠物小精灵的加入
设计宠物小精灵的类,为简化游戏设计,精灵的属性包括种类(力量型:高攻击;肉盾型:高生命值;防御型:高防御;敏捷型:低攻击间隔,共四种)、名字、等级、经验值、攻击力、防御力、生命值、攻击间隔等(以上属性必须,其他属性可自行添加))(基本要求:本游戏 中 只有上面的 4 种类型。 进一步要求:上述 4 种类型可以进一步深入划分,比如力量型又可以再细分为:沙瓦朗、火爆猴、腕力等)。每个精灵初始等级为 1 ,满级 15 级,每当精灵升级的时候,宠物对应的属性值会有少量增加(主属性增加量相对较多)。每个精灵有自己独特的攻击方式,如闪电攻击、火焰攻击等等,请设计一个精灵的基类,并将精灵的攻击方法设为虚方法以方便子类重写。请写一个测试程序对设计的精灵类的相关属性和方法(包括攻击函数,升级函数等)进行测试。题目主要考察点:类的继承,对象数据成员设计,成员函数设计。
2.2 用户注册与平台登录
每个用户需要注册一个账号,用户名全局唯一,不能有任何两个用户名相同,要考虑注册失败的场景时的反馈。实现注册、登录、登出功能, 均采用 C/S 模式,客户端和服务端用 socket 进行通信,服务端保存所有用户的信息。每个用户拥有:用户名、拥有的精灵,两个属性。 用户注册成功时,系统自动随机分发三个 1 级精灵给用户用户可以查看所有成功注册用户拥有的精灵,也可以查看所有当前在线的用户。题目主要考察点: socket 通信,交互场景反馈,用户信息存储方式界面交互,其它合理的新颖设计。
2.3 游戏对战的设计
已经登录的在线用户可以和服务器进行虚拟决斗,决斗分两种:升级赛和决斗赛,两种比赛都能增长精灵宠物经验值。服务器上有一个虚拟精灵的列表,用户可以挑选其中任意一个进行比赛(升级赛或者决斗赛)。另外决斗赛中用户胜出可以直接获得该战胜的精灵,失败则系统从用户的精灵中随机选三个(不够三个精灵的情况就选择他所有的精灵),然后由用户选一个送出(不够三个精灵的情况就选择他所有的精灵)。用户如果没有精灵(比如总是失败,已经全部送出去),则系统会随机放给他一个初级精灵。请让你的系统自动模拟每场比赛的每次出招。另外,为了增加不确定性,可以加入概率闪避攻击和暴击伤害机制。用户增加新功能,可以查看某个用户的胜率用户增加新属性,为宠物个数徽章(金银铜)和高级宠物徽章(金银铜),分别根据拥有的宠物个数的多少和拥有高级宠物(15 级)个数的多少颁发。题目主要考察点:客户端与服务器数据交互(可采用多进程或异步通信或其他方法均可),并发请求处理,类的方法设计,伤害计算方法设计,界面交互,其它合理的新颖设计。
3.总体方案设计说明
总体解决方案分为服务端与客户端两部分,采用 UDP 进行通信(服务器端口 62100)。服务端负责所有的数据存储及处理,客户端负责发送用户操作及获取服务端信息。
服务端根据题目要求共抽象出服务器、验证、用户、精灵、战斗等类;客户端采用 Qt 实现图形化界面开发。
4. 数据字典
4.1 服务端
服务器(Server)static Server* getInstance()获取单件服务器(Server)int assign(char*, int, SOCKET&, SOCKADDR&)从缓存中读取客户端发送的指定大小的内容,并分配跳转至其他函数服务器(Server)Fairy* getEnemybyNum(const int)返回指定序号的服务器端精灵服务器(Server)list<Fairy*> listEnemy保存服务器端精灵的链表服务器(Server)int buildInfoEnemy(char*)构造服务器端精灵的信息列表至指定内存中服务器(Server)int informReport(char*, const char*)构造字符串至指定内存中服务器(Server)static Server _instance单件实例服务器(Server)int enemyCntDefault服务器端精灵的初始个数验证(Auth)static Auth* getInstance()获取单件验证(Auth)int regist(const string , const string, const char*)处理注册验证(Auth)int login(const string, const string)处理登录验证(Auth)int logout(const string, const string)处理注销,维护在线列表验证(Auth)int verify(const string, const string)验证用户名及密码,维护在线列表验证(Auth)list<User*> onlineList用户列表验证(Auth)int getOnlinePlayer(char*)构造在线玩家信息至指定内存中验证(Auth)struct infoOnlinePlayer玩家信息格式验证(Auth)map<string, string> registMap;由用户名映射至密码进行验证验证(Auth)map<string, User*> savedataMap由用户名映射至玩家信息位置验证(Auth)int saveMap()存储服务端数据至本地文件验证(Auth)int loadMap();从本地文件读取服务端数据用户(User)void giveOut(const int)送出指定序号的精灵用户(User)Fairy* getFairybyNum(const int)返回指定序号的精灵用户(User)int buildInfoFairy(char*)构造精灵信息至指定内存中用户(User)int buildInfoBadage(char*)构造徽章信息至指定内存中用户(User)int buildInfoAttack(char*, const int)构造指定序号精灵的攻击名称至指定内存中用户(User)void checkNoFairy()检查是否失去所有精灵用户(User)void addGiveOut()添加待送出精灵用户(User)string getName()获取用户名称用户(User)void healFairy();治疗该玩家所有精灵用户(User)void getBadage()获取徽章用户(User)time_t timeLastOpt上次用户进行操作的时间用户(User)list<Fairy*> listFairy精灵列表用户(User)list<Fairy*> listGiveOut待送出精灵列表用户(User)vector vecBadage徽章列表用户(User)int timesBattleTol总战斗次数用户(User)int timesBattleSuc总战斗获胜次数用户(User)string nameCRCCRC32 方式转换的用户名用户(User)string name用户名称用户(User)struct fairyInfo精灵信息结构体用户(User)const int numInitialFairy玩家初始精灵数精灵(Fairy)int getExp()获取经验值精灵(Fairy)int getLevel()获取等级精灵(Fairy)virtual int attackOtr(Fairy* const)精灵攻击方法精灵(Fairy)void addExp(int)增加经验值精灵(Fairy)int getHurt(float)受到伤害精灵(Fairy)void getHeal()治疗精灵(Fairy)string name精灵名称精灵(Fairy)string attackName精灵攻击名称精灵(Fairy)int exp经验值精灵(Fairy)int probMiss闪避率精灵(Fairy)int probCritic暴击率精灵(Fairy)float nowHP当前生命值精灵(Fairy)float valueATK攻击力精灵(Fairy)float valueDEF防御力精灵(Fairy)float valueHP生命力精灵(Fairy)float valueAGL敏捷力精灵(Fairy)advantage adv;精灵属性精灵(Fairy)const float timesSuperior属性克制倍率精灵(Fairy)const float timesAttack攻击与攻击力倍率精灵(Fairy)const float timesDefend防御与防御力倍率精灵(Fairy)const float timesLevelUp升级加成倍率精灵(Fairy)const float timesHP生命力与生命值倍数精灵(Fairy)const float timesCritical暴击伤害倍率精灵(Fairy)const string enemyName[]怪物名称精灵(Fairy)const int enemyCnt怪物总种类精灵(Fairy)enum advantage属性,枚举类型战斗(Battle)static Battle* getInstance()获取单件战斗(Battle)static Battle _instance单件实例战斗(Battle)int pk(char*, Fairy* const, Fairy* const, User* const, const int)在两个指定精灵间发起战斗
4.2 客户端
主窗口(MainWindow)char ADDR_SRV[32]存储 IPv4 格式的服务器地址QUdpSocket* sockUDP 发送套接字void sockListen()接收服务端的报文并分配至其他函数中void getAttackName(const int)获取指定序号精灵的攻击名称void requestArena()请求决斗场精灵信息void requestSelfFairy()请求自己的精灵信息void requestOthersFairy()请求他人的精灵信息void report(const QString&)将内容反馈至信息框QString time_t2QString(const time_t)将时间类型转换为 QString 类型Ui::MainWindow *uiui 设计文件struct sockHeder报文头结构struct fairyInfo精灵信息结构struct infoOnlinePlayer玩家列表信息结构
5. 各模块设计说明
5.1 服务端
服务器(Server)采用单件设计服务器(Server)负责处理客户端发送的信息,分配任务至其余模块中服务器(Server)维护服务端的精灵列表验证(Auth)采用单件设计验证(Auth)实现注册、登录、登出功能验证(Auth)维护注册、在线玩家列表验证(Auth)引导至用户精灵信息、用户名及密码等所有信息的存储位置验证(Auth)备份及还原所有信息用户(User)存储用户名、精灵列表等基本信息用户(User)实现对精灵的送出、治疗等操作用户(User)维护徽章信息用户(User)维护战斗次数、胜率等信息精灵(Fairy)存储精灵名称、属性、经验、攻击类型等基本信息精灵(Fairy)负责造成伤害、接受伤害、治疗等实现战斗(Battle)采用单件设计战斗(Battle)负责战斗详细判定的具体实现战斗(Battle)维护战斗详细信息的记录和构造
5.2 客户端
登录框输入用户名及密码登录框进行注册、登录、登出操作玩家列表查看当前在线玩家玩家列表获取玩家胜率、精灵等信息精灵框显示自己的精灵信息精灵框进行送出、治疗操作精灵框显示其他玩家的精灵信息决斗场显示服务器上精灵的信息信息框显示当前的操作信息信息框传递服务器发送的战斗详细信息、提示等内容徽章框获取徽章信息服务器 IP 地址框进行修改服务器地址的操作
6. 测试情况
6.1 题目一
![在这里插入图片描述](http://img.mcbbbk.com/upload/news/2024/1227/photos/middle/20241227113944_r60v_5929ke4s.jpg)
![在这里插入图片描述](http://img.mcbbbk.com/upload/news/2024/1227/photos/middle/20241227113945_r60v_rg7uis0.jpg)
![在这里插入图片描述](http://img.mcbbbk.com/upload/news/2024/1227/photos/middle/20241227113945_r60v_ts11moso.jpg)
6.2 题目二
![在这里插入图片描述](http://img.mcbbbk.com/upload/news/2024/1227/photos/middle/20241227113945_r60v_kg2ba6o8.jpg)
6.3 题目三
![在这里插入图片描述](http://img.mcbbbk.com/upload/news/2024/1227/photos/middle/20241227113946_r60v_jt5uhr8.jpg)
![在这里插入图片描述](http://img.mcbbbk.com/upload/news/2024/1227/photos/middle/20241227113946_r60v_np191dfo.jpg)
![在这里插入图片描述](http://img.mcbbbk.com/upload/news/2024/1227/photos/middle/20241227113946_r60v_oo26m2dk.jpg)
7. 评价和改进意见
界面只有文字,暂时不够美观。
数值设计待改进,游戏性不够强。
8. 用户使用说明
8.1 服务器选择
![在这里插入图片描述](http://img.mcbbbk.com/upload/news/2024/1227/photos/middle/20241227113947_r60v_4n52rdk.jpg)
在界面中服务器 IP 地址窗口中填写要登录的服务器 IP 地址。
8.2 注册、登录与登出
![在这里插入图片描述](http://img.mcbbbk.com/upload/news/2024/1227/photos/middle/20241227113947_r60v_dl1hdh5o.jpg)
在界面中输入用户名、密码后,即可选择【注册】、【登录】,在登录后可选择【注销】。
8.3 玩家列表
![在这里插入图片描述](http://img.mcbbbk.com/upload/news/2024/1227/photos/middle/20241227113948_r60v_b9gbni8.jpg)
点击该界面下的【刷新】查看所有服务器上的玩家。选择某一玩家后点击【查看更多】,即可查询到该玩家的精灵信息。
8.4 徽章
![在这里插入图片描述](http://img.mcbbbk.com/upload/news/2024/1227/photos/middle/20241227113948_r60v_851qmve4.jpg)
点击该界面下的【刷新徽章列表】,即可查询到当前的徽章信息。
8.5 战斗
![在这里插入图片描述](http://img.mcbbbk.com/upload/news/2024/1227/photos/middle/20241227113949_r60v_uptb54.jpg)
在【决斗场】及【当前拥有的精灵】界面中,请单击选择要出战的精灵及要对战的怪物。
9. 生成方法
服务端:服务端使用 Visual Studio 2019 进行开发,控制台应用。客户端:客户端使用 Qt Creator 4.11.1 (Community)进行开发,构建套件为 Desktop Qt 5.14.2 MinGW 32-bit。
![在这里插入图片描述](http://img.mcbbbk.com/upload/news/2024/1227/photos/middle/20241227113949_r60v_rr14djmk.jpg)
52)]
在【决斗场】及【当前拥有的精灵】界面中,请单击选择要出战的精灵及要对战的怪物。
相关知识
Qt实现的宠物小精灵对战游戏阶段二
基于QT实现的宠物小精灵人机对战游戏
C++面向对象宠物小精灵对战系统设计教程
C/C++宠物小精灵对战系统[2024
基于c++的流浪宠物网站
a=b++,c++和a=(b++,c++)的区别
【免费】基于SpringBoot和BS架构的宠物健康咨询系统设计与实现资源
基于python的疫苗接种管理系统资源
文字冒险:宠物养成对战游戏的创作之旅
基于springboot+mybatis+mysql+html实现宠物医院管理系统(包含实验报告)资源
网址: 基于C++实现平台类对战游戏 https://m.mcbbbk.com/newsview890911.html