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 nameCRC CRC32 方式转换的用户名
用户(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* sock UDP 发送套接字
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 *ui ui 设计文件
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 题目一

6.2 题目二

6.3 题目三

7. 评价和改进意见

界面只有文字,暂时不够美观。

数值设计待改进,游戏性不够强。

8. 用户使用说明

8.1 服务器选择

在界面中服务器 IP 地址窗口中填写要登录的服务器 IP 地址。

8.2 注册、登录与登出

在界面中输入用户名、密码后,即可选择【注册】、【登录】,在登录后可选择【注销】。

8.3 玩家列表

点击该界面下的【刷新】查看所有服务器上的玩家。选择某一玩家后点击【查看更多】,即可查询到该玩家的精灵信息。

8.4 徽章

点击该界面下的【刷新徽章列表】,即可查询到当前的徽章信息。

8.5 战斗

在【决斗场】及【当前拥有的精灵】界面中,请单击选择要出战的精灵及要对战的怪物。

9. 生成方法

  • 服务端:服务端使用 Visual Studio 2019 进行开发,控制台应用。
  • 客户端:客户端使用 Qt Creator 4.11.1 (Community)进行开发,构建套件为 Desktop Qt 5.14.2 MinGW 32-bit。

随后在此选择升级赛、决斗赛类型,并单击右下角【攻击】即可开始战斗。

♻️ 资源

大小: 101MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87400296

基于QT(C++)实现(窗体)平台类对战游戏【100010513】相关推荐

  1. 基于C++实现平台类对战游戏

    1. 设计任务的描述 用面向对象的设计方法来设计一款平台类对战游戏. 内容包括宠物小精灵的加入.用户注册与平台登录.游戏对战的设计. 2. 功能需求说明及分析 2.1 宠物小精灵的加入 设计宠物小精灵 ...

  2. 基于安卓app开发项目(在线数独对战游戏平台)的毕业设计(附源码)

    大家好!我是职场程序猿,感谢您阅读本文,欢迎一键三连哦. 基于安卓app开发项目(在线数独对战游戏平台)的毕业设计 目录 一.项目简介 二.系统核心功能模块部分截图 2.1用户登陆的设计与实现 2.2 ...

  3. 以太联盟 基于区块链技术的角色扮演对战游戏

    以太联盟 是一款基于区块链技术的角色扮演对战游戏.玩家可以通过召唤英雄来为自己战斗从而赢取以太币奖励.每个玩家至多可以派5名英雄_上场.游戏共有5大种族, 5个职业,彼此之间互相克制,另外不同英雄还拥 ...

  4. qt开发的有界面的简易对战游戏——斗罗大PK(可用作c,c++课程设计)

    [开发简介] 用QtCreator开发环境和c++ 语言来编写一个游戏,名字为<斗罗大PK>. [游戏规则] <斗罗大PK>有 6 位英雄,每位英雄拥有数量不同的 3 种招数, ...

  5. [埋坑系列] 基于QT/C++的杰瑞走迷宫小游戏 :1.大体构造

    本次数据结构课程设计本打算做老鼠走迷宫,毕竟也比较喜欢迷宫,也有过经验, 框架大体设计好之后发现挑战性并不强,对这些算法都有一些经验,所以决定先去搞树做词典,在此埋个坑 |_ _ _QT图形界面 | ...

  6. 基于QT的指挥猫猫打架玩耍的小游戏设计

    目录 . 游戏概览 1 1.1 界面交互 1 1.2 地形设计 4 1.3 角色设计 4 1.4 战斗设计 5 1.5 关卡设计 5 1.7 其他要求 5 2.1 总览 6 2.2 主要关系图 6 2 ...

  7. [内附完整源码和文档] 基于Qt5的国际跳棋双人网络对战游戏

    一.软件用途 本软件是一个国际跳棋小游戏,使用Qt5编写,实现了国际跳棋游戏的双人网络对战版,以及任意局面的输入功能. 二.运行方式 安装Qtcreater之后,将源代码拷贝至本机并运行Qtcreat ...

  8. 基于Qt框架实现的 C/S架构的外卖平台软件系统

    资源下载地址:https://download.csdn.net/download/sheziqiong/85628215 基于Qt框架实现的 C_S架构的外卖平台软件系统 演示视频 C/S 架构的外 ...

  9. 基于STM32MP1和QT的疫情监控平台

    目录 1.前言 2.数据接口的获取 3.Qt界面的实现 4.在开发板上运行Qt程序 5.使用无线模块联网 6.代码下载 1.前言 之前我使用桌面版本Qt实现了肺炎疫情监控平台:基于Qt的新冠肺炎疫情数 ...

最新文章

  1. python变量如何声明_如何确定变量是否在Python中声明?
  2. LCS2005客户端配置详解:LCS2005系列之二
  3. MPLS服务合同到期了,是否该续签?
  4. 【习题0】准备工作【第0天】
  5. 计算机房的标准和规定,数据中心机房建设,需要依据哪些国家标准和行业标准或规范?...
  6. 【MATLAB生信分析】MATLAB生物信息分析工具箱(一)
  7. 计算机网络1MB等于多少b,什么是Mb,1Mb等于多少Kb?
  8. 如何在 Vim 中用换行符替换字符
  9. 【webpack系列】webpack小老弟打包大项目
  10. 第13期 《万物并作,吾以观复》
  11. mysql 海明距离_mysql根据经纬度求两地距离(示例代码)
  12. 【动手学深度学习】06-ResNet解析
  13. go-micro框架
  14. 壁纸不够用?教你爬空优美图库的动漫壁纸
  15. 什么是长连接,什么是短连接?长连接和短连接的区别是什么?
  16. 计算机函数left的用法,EXCEL中的left函数怎么使用?
  17. 数学小课堂:数学和自然科学本质的差别(微积分中的极限和生活中的极限)
  18. 用VC实现的禁用光驱程序
  19. 学习virtuoso软件过程-Linux基本命令篇
  20. 三种JS截取字符串方法

热门文章

  1. 【lumerical】获取lumerical材料库中材料的有效折射率(波长范围内)
  2. 惠普总裁口述的职业规划(1)
  3. tar 指定目录解压 tar -zxf xxx.tar.gz -C /xxx/
  4. 陈道明:体会无用之事的美妙
  5. 【微信小程序开发】自定义tabBar案例(定制消息99+小红心)
  6. 全球及中国紫外线灯用电子镇流器行业行业研究及发展战略分析报告2022-2028年
  7. MySQL 快速创建测试数据库
  8. 一文彻底搞懂volatile用法
  9. CCD相机出现 亮线或紫色线 解释。
  10. 实现点击按钮导航条向左向右移动的状态