C++ 程序设计—宠物小精灵实验报告
D录
1设计任务的描述 2
2运行环境 2
3功能需求说明 2
3.1第一阶段 2
3.2第二阶段 2
3.3第三阶段 2
4具体实现 3
4.1第一阶段 3
4.1.1基类设计 3
4.1.2子类实现 5
4.2第二阶段 5
4.2.1数据结构 5
4.2.2服务器端实现 7
4.2.3客户端实现 9
4.3第三阶段 9
4.3.1数据结构(详见第二阶段 4.2.1) 9
4.3.2服务器端 9
4.3.3客户端实现 10
5使用说明 11
5.1第一阶段 11
5.2第二阶段 14
5.3第三阶段 16
6实验总结 21
2 运行环境
1.系统:kali
2.编程环境:qt5.7
3.数据库:mysql
3.1第一阶段
3 功能需求说明
实现小精灵类的设计,包括小精灵种类,各种属性及攻击方式设计,同时编写测试函数进行是测试。
3.2第二阶段
1.每个用户需要注册一个账号,用户名全局唯一,不能有任何两个用户名相同,要考虑注册失败的场景时的反馈。
2.实现注册、登录、登出功能,均采用 C/S 模式,客户端和服务端用 socket 进行通信,服务端保存所有用户的信息。
3.每个用户拥有:用户名、拥有的精灵,两个属性。用户注册成功时,系统自动随机分发三个 1 级精灵给用户。
4.用户可以查看所有成功注册用户拥有的精灵,也可以查看所有当前在线的用户。
3.3第三阶段
1.实现用户小精灵与系统进行升级赛,升级可获得经验,进而升级。
2.实现用户小精灵与系统进行决斗赛,战胜可获得此精灵,战败则系统从用户的精灵中随机选三个(不够三个精灵的情况就选择他所有的精灵),然后由用户选一个送出。
3.用户如果没有精灵(比如总是失败,已经全部送出去),则系统会随机放给给他一个初级精灵。
4.实现用户可查看某一用户胜率的功能。
5.用户增加新属性:本文转载自http://www.biyezuopin.vip/onews.asp?id=14930宠物个数徽章(金银铜)和高级宠物徽章(金银铜),分别根据拥有的宠物个数的多少和拥有高级宠物(15 级)个数的多少颁发。
4具体实现
4.1第一阶段
4.1.1基类设计
主要数据类型:
enum KIND// 四种类型
{
HIGH_ATTACK,HIGH_BLOOD, HIGH_DEFENSE, HIGH_SPEED
};
const QList<QString> POKEMONNAME={ ” F e r a l i g a t r ” , // 大力鳄
” Charizard ” , // 喷火龙
” Noivern ” , // 音波龙
” Bagon” , // 宝贝龙
” Glaceon ” , // 冰伊布” Pikachu ” , // 皮卡丘”Wynaut” , // 小果然”Doduo” , // 嘟嘟
}; // pokemon 名字
enum SKILL// 技能
{
HydroCannon , // 加农水炮
Cut , // 居合斩Leech Life , // 吸血FocusEnergy , // 聚气Barrier , // 屏障Light Screen , // 光墙Counter , // 双倍奉还Tri Attack , // 三重攻击
NormalAttack , // 普通攻击
};
enum QUALIFICATION{ S , SS , SSS
}; // 属性等级
class Pokemon : public QObject
{
Q_OBJECT
public :
Pokemon ( ) : l e v e l ( 1 ) , e x p e r i e n c e ( 0 ){}
virtual ~Pokemon (){}
virtual uint Attack ( ) { return 0 ; } // 精灵技能
void Experience Up ( uin t value ) ;
virtual void LevelUP (){}
QString getName ( ) ; uint g e t Le ve l ( ) ;
QString g e t I n f o r m a t i o n ( ) ;
protected :
QString name ; // 名字
uint l e v e l ; // 等级uint e x p e r i e n c e ; // 经验uint attack ; // 攻击属性
uint blood ; // 生命属性
uint current Blood ; // 实时血量 , 对决时使用
uint d e f e n s e ; // 防御属性
uint speed ; // 敏捷属性
uint kind ; // 种类
uint a t t r ; // 稀有度
SKILL s k i l l ; // 技能
void s e t Va l u e s ( uint base Attack , uint base Blood , uin t base Defense , uint base Speed ) ;
s i g n a l s :
public s l o t s :
};
主要函数:
void Pokemon : : Experience Up ( uin t value ) // 增加经验函数
QString Pokemon : : getName ( ) // 小精灵名字的 get 函数
uint Pokemon : : g e t Le ve l ( ) // 小精灵等级的 get 函数
QString Pokemon : : g e t I n f o r m a t i o n ( ) // 小精灵各种属性的 get 函数
void Pokemon : : s e t Va l u e s ( uin t base Attack , ui nt base Blood , ui nt base Defense ,
uint base Speed ) // 小精灵各种属性的 s e t 函数
4.1.2子类实现
以 HighAttack 子类为例:
uint HighAttack : : Attack ( ) // 攻击函数
{
qsrand ( QTime : : currentTime ( ) . msec ( ) ) ; uint p r o b a b i l i t y=qrand ()% 10 ;
i f ( p r o b a b i l i ty <8) // 普通攻击
return NormalAttack ;
else //20% 几率使用技能
return this −> s k i l l ;
}
void HighAttack : : LevelUP ( ) // 升级函数
{
this −>l e v e l ++;
this −>a ttack +=100;
this −>b lood +=50;
this −>c urrent Blood=this −>b lood ; // 升级后当前的血量回复满血
this −>d e f e n s e +=50;
this −>s peed +=50;
}