• 基于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 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 onlineList用户列表
    验证(Auth)int getOnlinePlayer(char*)构造在线玩家信息至指定内存中
    验证(Auth)struct infoOnlinePlayer玩家信息格式
    验证(Auth)map registMap;由用户名映射至密码进行验证
    验证(Auth)map 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 listFairy精灵列表
    用户(User)list 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 题目一

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    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。

    在这里插入图片描述

    52)]

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

  • 相关阅读:
    Oracle查询用户所有表的语句
    中缀表达式转后缀表达式并计算结果
    Redis: 一个高性能的开源键值对数据库
    6.1 Burp Suite漏洞扫描使用
    【Leetcode每日一题】「动态规划」1155.掷骰子等于目标和的方法数
    设计模式之抽象工厂模式
    万界星空科技/生产制造管理MES系统/开源MES/免费MES
    C++基础入门详解(二)
    java技术专家面试指南50问【java学习+面试宝典】(六)
    leetcode(力扣) 53. 最大子数组和 (动态规划)
  • 原文地址:https://blog.csdn.net/newlw/article/details/126316427