资源描述
设计与实现回合制战斗系统bat
1. Soldier战士类
1) Soldier得属性(protected作用域)
最大生命 maxHP
当前生命 HP
最大体力maxSP
当前体力SP
攻击力 damage
经验 exp
等级 level
姓名 name
药瓶数量 drugNum
2) Soldier得动作(public作用域)
决策 makeDecision
攻击 attack
休息 rest
吃药 takingDrug
3) Soldier被创建后,maxHP与HP为100,maxSP与SP为100,damage为20,exp为0, level为1,drugNum为5;
4) 每回合Soldier通过决策(makeDecision)来决定需要发出哪一个动作(攻击attack、休息rest或吃药takingDrug,注意每回合只能做其中一个动作)。请自行设计与调整每种动作发出得必要条件,例如:生命值若低于最大值得30%该回合就吃药,体力低于最大值得50%该回合就休息,生命力与体力都充足该回合就发起攻击,等等;
5) 攻击(attack)敌人一次,体力(SP)减少10,经验(exp)增加5。敌人得生命值(HP)减去攻击方攻击力值(damage)得大小。敌人生命值(HP)减少到0时死去,如果敌人被自己打死,获得敌人身上得所有药瓶;
6) 经验(exp)每增加20,等级(level)就提高1级,maxHP、maxSP、damage分别增加20;Soldier, Wizard, Master升级后,当前HP,SP,MP与NP得值皆按比例(xx:MaxXX)增长,注意:不就是升级后上述当前属性值就自动全满。例如:Wizard得 HP/MaxHP 50/100,升级后,HP/MaxHP调整为60/120。升级前HP:MaxHP比例为0、5,升级后MaxHP变成120,若要保持0、5得比例,HP自动调整为60。这种设定类似于魔兽争霸III。
7) 休息(rest)一次,生命值(HP)、体力(SP)增加最大值得50%,但不要超过最大值。(例如,当前生命值就是30,最大生命值就是100,则吃药后得当前生命值为30+100*50%=80。)
8) 吃药(takingDrug),如果药瓶数量为0,不能吃药。吃药一次,药瓶数量减少1,生命值(HP)增加最大值得80%,但不能超过maxHP。
2. Wizard巫师类,从Soldier类公有继承
1) Wizard得属性(protected作用域)
新增得属性:
最大魔法值 maxMP
当前魔法值 MP
2) Wizard得动作(public作用域)
决策 makeDecision
攻击 attack
休息 rest
吃药 takingDrug
魔法攻击wizard_attack
3) Wizard被创建后,maxMP与MP为100 ,maxHP与HP为100,maxSP与SP为100,maxMP与MP为100,damage为20,exp为0,level为1;
4) 每回合Wizard通过决策(makeDecision)来决定需要发出哪一个动作(攻击attack、魔法攻击wizard_attack、休息rest或吃药takingDrug,注意每回合只能做一个动作);
5) 魔法攻击(wizard_attack):如果魔法值小于25、或体力小于10无法使用该技能。一次魔法攻击能同时攻击几个敌人,但每对付一个敌人,自己得体力(SP)减少10、魔法值减少25、经验(exp)增加5、敌人得生命值(HP)减去自己攻击力值(damage)。敌人生命值(HP)减少到0时死去,同时自己获得敌人身上得所有药瓶;
6) 经验(exp)每增加20,等级(level)提高1级,maxHP、maxSP、maxMP、damage分别增加20;(如果觉得升级太快了,或者升级增加得HP与damage不太协调,可以调整这些参数)
7) 休息(rest)一次,生命值(HP)、体力(SP)恢复效果同Soldier得休息(rest)动作。魔法值增加最大魔法值得30%,但不要超过最大魔法值,例如:_mp=_mp+_maxMp*30%。
8) 吃药(takingDrug)一次,效果等同于Soldier吃药。
9) 攻击(attack),攻击效果同Soldier。
3. Master巫师类,从Wizard类公有继承
1) Master得属性(protected作用域)
新增得属性:
最大内力 maxNp
当前内力 NP
2) Master得动作(public作用域)
决策 makeDecision
攻击 attack
休息 rest
吃药 takingDrug
魔法攻击wizard_attack
绝杀攻击master_attack
3) Master被创建后,maxMP与MP为100 ,maxHP与HP为100,maxSP与SP为100,maxNP与NP为100,damage为30,exp为0,level为1;
4) 每回合Wizard通过决策(makeDecision)来决定需要发出哪一个动作(攻击attack、魔法攻击wizard_attack、绝杀攻击master_attack、休息rest或吃药takingDrug,注意每回合只能做一个动作);
5) 大师攻击(master_attack),如果内力(NP)大于50时,可以使用大师(master_attack)攻击。一次大师攻击能让被攻击得敌人得生命值(HP)减少其最大生命值得(maxHP)50%(可能有点太强了,破坏平衡性!容易导致游戏在短短几个回合就结束,可以考虑适当减小。),例如敌人HP为100,maxHP为160,被大师攻击后,生命值变为HPmaxHP*50%=100160*50%=20。一次大师攻击会内力(NP)损耗50、体力(SP)损耗30,经验增加5。
6) 魔法攻击(wizard_attack),攻击效果等同于Wizard得攻击(attack)动作
7) 攻击(attack),攻击效果等同于Soldier得攻击(attack)动作。
8) 使用大师攻击后,经验(exp)每增加20,等级(level)就提高1级,maxHP、maxSP、maxMP、maxNP分别增加20,damage增加20;
9) 休息(rest)一次,内力增加最大内力得30%,但不要超过最大内力值。其余如HP、SP、MP得恢复等同于Wizard得休息(rest)动作。
10) 吃药(takingDrug)一次,效果等同于Soldier得吃药(takingDrug)动作。
4. WarSystem战斗系统类
1) WarSystem类得属性
军团A Soldier ** _pGroupA;
军团B Soldier ** _pGroupB;
2) WarSystem类得动作
战斗开始startWar
回合开始startRound
3) 每次战斗,双方派出一个军团,军团由数名战士、巫师与大师组成。战斗按回合制进行,即每回合中,一方军团得每个成员做完各自得一次动作(由makeDecision决定)后,另一方军团每个成员接着完成自己得一次动作。战斗开始,由哪个军团先发起攻击,系统随机决定。回合得生成与结束由WarSystem类控制;
4) WarSystem类拥有两个数据成员(指向指针变量得指针,即二级指针):
Soldier ** _pGroupA;
Soldier ** _pGroupB;
分别对应战斗得双方军团。(提示,军团可以由Soldier *数组得形式生成,在WarSystem得pGroupA与pGroupB分别指向两个军团,注意OOP得多态实现。)
5) WarSystem类可以发出战斗开始即startWar动作。在startWar中,随机决定由哪一方率先发起攻击(恐怕就是每个回合都随机决定谁先出手会比较公平,如果每回合先出手都就是固定一方,那么战斗结果完全就是确定性得。而且由于两支队伍得成员一样,交换先出手权后得结果也就是对称得。),然后调用WarSystem得另一动作:回合开始,即startRound。
6) startRound动作得描述:在startRound中,按军团顺序调用每个战士得makeDecision动作(也可以考虑两个军团轮流一次一人行动,比较公平)。
5.将整个战斗过程得每一步保存入日志文件。
6.项目说明
1) 自由组队,人数为25人,不能单人组队,也不得超过5人。
2) 开发小组全部人员皆要求参与设计与开发,每位组员有明确得分工(组内自行协调);每位组员除了熟悉自己得任务模块外,需熟悉整个系统得设计与开发;
3) 影响项目评分得因素:
i. 最终系统对需求得实现程度;
ii. 项目组内部分工得合理度(包括每人工作量得平衡程度),协作得程度;
iii. 每位组员最后得考评皆会影响项目组其她成员得最后评分;
4) 项目组角色及职责说明:
项目经理1名(组长)
(兼客户沟通人员)
建议推选凝聚力较强人员担任
控制项目进度。定期(建议每23天)召集所有人员开会沟通开发进度。特别当项目进度滞后时,需要提出解决方案减少进度偏移。
定期向客户(老师)报告整体开发进度,模块开发进度,及每个成员得实施情况。(建议每23天用email形式报告)
技术经理1名
建议推选技术较强人员担任
负责项目整体框架设计,子系统(模块)划分。
在项目组其她成员遇到技术难题时,有责任提供技术咨询。
程序员N名
全体人员(包括项目经理与技术经理)
程序开发
5) 部分项目需求并未完整给出。如:Soldier等类得makeDecision决策机制如何设计?在不同场景下该如何做出最佳决策?己方应该分开攻击对方不同得战士,还就是应该合力攻击对方最强得战士或者最弱得战士(可参考自己或她人得回合制游戏经验)?应该在哪一个类中增加方法,来获取对方军团得战士信息以便己方做出正确决策?如果战斗在开始后几个回合内就分出胜负,请适量调整各种攻击动作、吃药、休息得数据修改值。(这里设定得生命值相对于伤害值来说有点小了,可适当参考星际魔兽等RTS游戏得参数平衡系统) 在现实中,项目组经常面临开发得项目需求不完整得情况,需要通过多次迭代,反复需求分析与与客户(本项目中得客户即就是老师与本组其她同学)沟通逐步解决问题。关于项目组对此类问题得处理能力,也就是本次考查得内容之一。
6) 最后,再次强调,团队合作就是本次项目考察重点。每人最终总评分为项目组得分与个人得分得加权与,其中项目组得分得加权因子远大于个人得分加权因子,因此将团队项目变成个人表演得项目组,无论个人得分高低,只能得到很低得总评分数。
【特别提醒】
n 最低要求:利用C++面向对象程序设计方法,实现两支队伍(各包含至少一名战士、法师与大师)得自动回合制对战。
n 交付时限:第17周周五之前
n 交付材料:源代码、可执行程序、PPT
n 分数价值:在期末平时成绩考核中占40%
展开阅读全文