吉林大学软件学院卓班设计模式第四次练习

上传者: sjzdwk | 上传时间: 2021-03-18 14:27:36 | 文件大小: 431KB | 文件类型: RAR
作业04 行为型+其它(以step0_src中代码为基础) 1. 将玩家改为只有两个Player,一个HumanPlayer,一个AutoPlayer。初始时,各玩家都站在map中的第一个Block上,初始的移动方向任意。每轮次HumanPlayer玩家前进3格,AutoPlayer前进2格。前进方向任意,但若前方有格子(前进、左转、右转),必定前进,而不能往回走。HumanPlayer所在的格子用[X]表示,AutoPlayer的格子用(X)表示。请实现代码。 2. 在Players的代码中,通过getFirst和getLast取得两个玩家,但这两个成员函数与Player用deque表示紧密相关,且只能取得前后两个Player。考虑到玩家数量可多个,玩家集合的数据结构可多样,请用迭代器模式重新实现遍历所有玩家的功能,要求分别实现C++风格的外部迭代器和Java风格的外部迭代器。迭代器接口如下: class CppIterator { public: CppIterator( ) {} virtual ~CppIterator( ) {} virtual void first() = 0; virtual void next() = 0; virtual bool isLast() const = 0; virtual void * current() = 0; virtual int count() const=0; }; class JavaIterator { public: JavaIterator() {} virtual ~JavaIterator() {} virtual void* next() = 0; virtual bool hasNext() const = 0; virtual int count() const=0; }; 3. 若玩家前进时,各玩家的前进策略多种多样,如一种策略是各可能方向是等概率的(例如1中的代码),另一种策略是各方向有不同几率:inDir未确定时,向各方向前进的概率相等;inDir确定时,各方向的概率不一定相同。具体可见下表。而且以后可能会添加新的前进策略,如具有AI的策略等;玩家还可能需要动态改变前进策略。请使用策略模式实现。 inDir==NONE时 inDir!=NONE时 连通四个方向 各方向各25% 直行50%,左转25%,右转25% 连通往三方向 各方向各33% 可直行时,直行60%,左转(或右转)40%; 不可直行时,左转和右转各50% 连通两个方向 各方向各50% 与inDir不同的方向为100% 连通一个方向 各方向各100% 100%地转向往回走 4. 为提高趣味性,增加了卡片子系统和魔法子系统, Player可以使用卡片、魔法等,作用于各玩家或系统中的其它对象上。部分类图如下: 这里使用RobCard会抢走指定玩家的一半金钱;使用MeanCard会平均所有玩家的金钱;使用ReturnSpell会使指定玩家直接返回到开始的Block,inDir不定。 1) 修改PlayMenu为: PlayMenu 1. Go… 2. ApplyRobCard 3. ApplyMeanCard 4. ApplyReturnSpell 5. Load 6. Save 7. Back To MainMenu Your selected: 并给Player类添加行为ApplyRobCard(Player * target);、ApplyMeanCard();和ApplyReturnSpell(Player * target),然后实现。 2) 以后肯定要添加其它Card和Spell,还有可能增加道具子系统等。由于Player已有子类AutoPlayer和HumanPlayer,而且未来扩展Card、Spell和道具等时,作用目标target有多种可能,如Player、Block、Player集合,甚至Card类等,所以希望在未来扩展时,避免通过继承Player类或其子类进行扩展。请使用命令模式实现此目地。 5. 若需要增加FlyCard和FreezeSpell。其作用是:当应用FlyCard到某个Player上时,该player将每轮次前进6格,并持续2个轮次;当施加FreezeSpell到某个Player上时,该player将每轮次只前进1格,并持续3个轮次。 考虑到以后还会添加其它类似功能的Card和Spell,但不希望直接从Player类派生子类进行扩展。请使用状态模式实现此目的。 6. 若还需要增加HurtSpell,该Spell会导致被作用的Player,每轮次减少Money的数量5,并持续2

文件下载

资源详情

[{"title":"( 380 个子文件 431KB ) 吉林大学软件学院卓班设计模式第四次练习","children":[{"title":"menumgr.h <span style='color:#111;'> 574B </span>","children":null,"spread":false},{"title":"player.h <span style='color:#111;'> 5.62KB </span>","children":null,"spread":false},{"title":"block.cpp <span style='color:#111;'> 1.77KB </span>","children":null,"spread":false},{"title":"blockprototype.cpp <span style='color:#111;'> 597B </span>","children":null,"spread":false},{"title":"mapimp.cpp <span style='color:#111;'> 1.97KB </span>","children":null,"spread":false},{"title":"......","children":null,"spread":false},{"title":"<span style='color:steelblue;'>文件过多,未全部展示</span>","children":null,"spread":false}],"spread":true}]

评论信息

免责申明

【只为小站】的资源来自网友分享,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,【只为小站】 无法对用户传输的作品、信息、内容的权属或合法性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论 【只为小站】 经营者是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。
本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二条之规定,若资源存在侵权或相关问题请联系本站客服人员,zhiweidada#qq.com,请把#换成@,本站将给予最大的支持与配合,做到及时反馈和处理。关于更多版权及免责申明参见 版权及免责申明