用面向对象的设计方法来设计一款平台类对战游戏。
内容包括宠物小精灵的加入、用户注册与平台登录、游戏对战的设计。
总体解决方案分为服务端与客户端两部分,采用 UDP 进行通信(服务器端口 62100)。服务端负责所有的数据存储及处理,客户端负责发送用户操作及获取服务端信息。
服务端根据题目要求共抽象出服务器、验证、用户、精灵、战斗等类;客户端采用 Qt 实现图形化界面开发。
服务器(Server) | static Server* getInstance() | 获取单件 |
---|---|---|
服务器(Server) | int assign(char*, int, SOCKET&, SOCKADDR&) | 从缓存中读取客户端发送的指定大小的内容,并分配跳转至其他函数 |
服务器(Server) | Fairy* getEnemybyNum(const int) | 返回指定序号的服务器端精灵 |
服务器(Server) | list | 保存服务器端精灵的链表 |
服务器(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 | 用户列表 |
验证(Auth) | int getOnlinePlayer(char*) | 构造在线玩家信息至指定内存中 |
验证(Auth) | struct infoOnlinePlayer | 玩家信息格式 |
验证(Auth) | map | 由用户名映射至密码进行验证 |
验证(Auth) | map | 由用户名映射至玩家信息位置 |
验证(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 | 精灵列表 |
用户(User) | list | 待送出精灵列表 |
用户(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) | 在两个指定精灵间发起战斗 |
主窗口(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 | 玩家列表信息结构 | |
服务器(Server) | 采用单件设计 |
---|---|
服务器(Server) | 负责处理客户端发送的信息,分配任务至其余模块中 |
服务器(Server) | 维护服务端的精灵列表 |
验证(Auth) | 采用单件设计 |
验证(Auth) | 实现注册、登录、登出功能 |
验证(Auth) | 维护注册、在线玩家列表 |
验证(Auth) | 引导至用户精灵信息、用户名及密码等所有信息的存储位置 |
验证(Auth) | 备份及还原所有信息 |
用户(User) | 存储用户名、精灵列表等基本信息 |
用户(User) | 实现对精灵的送出、治疗等操作 |
用户(User) | 维护徽章信息 |
用户(User) | 维护战斗次数、胜率等信息 |
精灵(Fairy) | 存储精灵名称、属性、经验、攻击类型等基本信息 |
精灵(Fairy) | 负责造成伤害、接受伤害、治疗等实现 |
战斗(Battle) | 采用单件设计 |
战斗(Battle) | 负责战斗详细判定的具体实现 |
战斗(Battle) | 维护战斗详细信息的记录和构造 |
登录框 | 输入用户名及密码 |
---|---|
登录框 | 进行注册、登录、登出操作 |
玩家列表 | 查看当前在线玩家 |
玩家列表 | 获取玩家胜率、精灵等信息 |
精灵框 | 显示自己的精灵信息 |
精灵框 | 进行送出、治疗操作 |
精灵框 | 显示其他玩家的精灵信息 |
决斗场 | 显示服务器上精灵的信息 |
信息框 | 显示当前的操作信息 |
信息框 | 传递服务器发送的战斗详细信息、提示等内容 |
徽章框 | 获取徽章信息 |
服务器 IP 地址框 | 进行修改服务器地址的操作 |
界面只有文字,暂时不够美观。
数值设计待改进,游戏性不够强。
在界面中服务器 IP 地址窗口中填写要登录的服务器 IP 地址。
在界面中输入用户名、密码后,即可选择【注册】、【登录】,在登录后可选择【注销】。
点击该界面下的【刷新】查看所有服务器上的玩家。选择某一玩家后点击【查看更多】,即可查询到该玩家的精灵信息。
点击该界面下的【刷新徽章列表】,即可查询到当前的徽章信息。
在【决斗场】及【当前拥有的精灵】界面中,请单击选择要出战的精灵及要对战的怪物。
52)]
在【决斗场】及【当前拥有的精灵】界面中,请单击选择要出战的精灵及要对战的怪物。