資源簡介
作業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

代碼片段和文件信息
///======================================================================
///??Project:???Richer02
///?FileName: absmenufactory.cpp
///?????Desc:???Richer?02
///???Author: Chen?Wei
///======================================================================
#include?“absmenufactory.h“
AbsMenuFactory::AbsMenuFactory()
{
//ctor
}
AbsMenuFactory::~AbsMenuFactory()
{
//dtor
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????393??2019-10-20?14:10??練習04\T01\T01\absmenufactory.cpp
?????文件????????230??2019-10-20?16:20??練習04\T01\T01\absmenufactory.h
?????文件???????1804??2019-10-20?16:21??練習04\T01\T01\block.cpp
?????文件???????1797??2019-10-20?23:31??練習04\T01\T01\block.h
?????文件????????541??2019-10-15?15:48??練習04\T01\T01\blockfactory.cpp
?????文件????????254??2019-10-20?16:21??練習04\T01\T01\blockfactory.h
?????文件????????981??2019-10-15?15:49??練習04\T01\T01\blockmgr.cpp
?????文件????????509??2019-10-20?16:21??練習04\T01\T01\blockmgr.h
?????文件????????597??2019-10-15?15:50??練習04\T01\T01\blockprototype.cpp
?????文件????????247??2019-10-15?15:50??練習04\T01\T01\blockprototype.h
?????文件???????1538??2019-10-15?15:51??練習04\T01\T01\game.cpp
?????文件????????260??2019-10-15?15:50??練習04\T01\T01\game.h
?????文件???????1036??2019-10-18?16:35??練習04\T01\T01\global.h
?????文件????????162??2019-10-20?09:39??練習04\T01\T01\main.cpp
?????文件???????2205??2019-10-20?16:21??練習04\T01\T01\map.cpp
?????文件????????439??2019-10-20?16:21??練習04\T01\T01\map.h
?????文件????????886??2019-10-15?15:53??練習04\T01\T01\mapbuilder.cpp
?????文件????????513??2019-10-15?15:53??練習04\T01\T01\mapbuilder.h
?????文件???????3838??2019-10-15?15:54??練習04\T01\T01\mapdirector.cpp
?????文件????????593??2019-10-15?15:54??練習04\T01\T01\mapdirector.h
?????文件???????2014??2019-10-20?16:21??練習04\T01\T01\mapimp.cpp
?????文件????????371??2019-10-20?16:21??練習04\T01\T01\mapimp.h
?????文件????????713??2019-10-15?15:56??練習04\T01\T01\mapmgr.cpp
?????文件????????571??2019-10-15?15:56??練習04\T01\T01\mapmgr.h
?????文件???????6780??2019-10-20?15:31??練習04\T01\T01\menu.cpp
?????文件???????2944??2019-10-15?15:56??練習04\T01\T01\menu.h
?????文件???????1703??2019-10-15?16:00??練習04\T01\T01\menufactory.cpp
?????文件????????352??2019-10-15?16:00??練習04\T01\T01\menufactory.h
?????文件????????940??2019-10-15?16:00??練習04\T01\T01\menumgr.cpp
?????文件????????574??2019-10-15?16:00??練習04\T01\T01\menumgr.h
............此處省略372個文件信息
評論
共有 條評論