資源簡介
作業(yè)04 行為型+其它(以step0_src中代碼為基礎(chǔ))
1. 將玩家改為只有兩個Player,一個HumanPlayer,一個AutoPlayer。初始時,各玩家都站在map中的第一個Block上,初始的移動方向任意。每輪次HumanPlayer玩家前進3格,AutoPlayer前進2格。前進方向任意,但若前方有格子(前進、左轉(zhuǎn)、右轉(zhuǎn)),必定前進,而不能往回走。HumanPlayer所在的格子用[X]表示,AutoPlayer的格子用(X)表示。請實現(xiàn)代碼。
2. 在Players的代碼中,通過getFirst和getLast取得兩個玩家,但這兩個成員函數(shù)與Player用deque表示緊密相關(guān),且只能取得前后兩個Player??紤]到玩家數(shù)量可多個,玩家集合的數(shù)據(jù)結(jié)構(gòu)可多樣,請用迭代器模式重新實現(xiàn)遍歷所有玩家的功能,要求分別實現(xiàn)C++風(fēng)格的外部迭代器和Java風(fēng)格的外部迭代器。迭代器接口如下:
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的策略等;玩家還可能需要動態(tài)改變前進策略。請使用策略模式實現(xiàn)。
inDir==NONE時 inDir!=NONE時
連通四個方向 各方向各25% 直行50%,左轉(zhuǎn)25%,右轉(zhuǎn)25%
連通往三方向 各方向各33% 可直行時,直行60%,左轉(zhuǎn)(或右轉(zhuǎn))40%;
不可直行時,左轉(zhuǎn)和右轉(zhuǎn)各50%
連通兩個方向 各方向各50% 與inDir不同的方向為100%
連通一個方向 各方向各100% 100%地轉(zhuǎn)向往回走
4. 為提高趣味性,增加了卡片子系統(tǒng)和魔法子系統(tǒng), Player可以使用卡片、魔法等,作用于各玩家或系統(tǒng)中的其它對象上。部分類圖如下:
這里使用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),然后實現(xiàn)。
2) 以后肯定要添加其它Card和Spell,還有可能增加道具子系統(tǒng)等。由于Player已有子類AutoPlayer和HumanPlayer,而且未來擴展Card、Spell和道具等時,作用目標(biāo)target有多種可能,如Player、Block、Player集合,甚至Card類等,所以希望在未來擴展時,避免通過繼承Player類或其子類進行擴展。請使用命令模式實現(xiàn)此目地。
5. 若需要增加FlyCard和FreezeSpell。其作用是:當(dāng)應(yīng)用FlyCard到某個Player上時,該player將每輪次前進6格,并持續(xù)2個輪次;當(dāng)施加FreezeSpell到某個Player上時,該player將每輪次只前進1格,并持續(xù)3個輪次。 考慮到以后還會添加其它類似功能的Card和Spell,但不希望直接從Player類派生子類進行擴展。請使用狀態(tài)模式實現(xiàn)此目的。
6. 若還需要增加HurtSpell,該Spell會導(dǎo)致被作用的Player,每輪次減少Money的數(shù)量5,并持續(xù)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??練習(xí)04\T01\T01\absmenufactory.cpp
?????文件????????230??2019-10-20?16:20??練習(xí)04\T01\T01\absmenufactory.h
?????文件???????1804??2019-10-20?16:21??練習(xí)04\T01\T01\block.cpp
?????文件???????1797??2019-10-20?23:31??練習(xí)04\T01\T01\block.h
?????文件????????541??2019-10-15?15:48??練習(xí)04\T01\T01\blockfactory.cpp
?????文件????????254??2019-10-20?16:21??練習(xí)04\T01\T01\blockfactory.h
?????文件????????981??2019-10-15?15:49??練習(xí)04\T01\T01\blockmgr.cpp
?????文件????????509??2019-10-20?16:21??練習(xí)04\T01\T01\blockmgr.h
?????文件????????597??2019-10-15?15:50??練習(xí)04\T01\T01\blockprototype.cpp
?????文件????????247??2019-10-15?15:50??練習(xí)04\T01\T01\blockprototype.h
?????文件???????1538??2019-10-15?15:51??練習(xí)04\T01\T01\game.cpp
?????文件????????260??2019-10-15?15:50??練習(xí)04\T01\T01\game.h
?????文件???????1036??2019-10-18?16:35??練習(xí)04\T01\T01\global.h
?????文件????????162??2019-10-20?09:39??練習(xí)04\T01\T01\main.cpp
?????文件???????2205??2019-10-20?16:21??練習(xí)04\T01\T01\map.cpp
?????文件????????439??2019-10-20?16:21??練習(xí)04\T01\T01\map.h
?????文件????????886??2019-10-15?15:53??練習(xí)04\T01\T01\mapbuilder.cpp
?????文件????????513??2019-10-15?15:53??練習(xí)04\T01\T01\mapbuilder.h
?????文件???????3838??2019-10-15?15:54??練習(xí)04\T01\T01\mapdirector.cpp
?????文件????????593??2019-10-15?15:54??練習(xí)04\T01\T01\mapdirector.h
?????文件???????2014??2019-10-20?16:21??練習(xí)04\T01\T01\mapimp.cpp
?????文件????????371??2019-10-20?16:21??練習(xí)04\T01\T01\mapimp.h
?????文件????????713??2019-10-15?15:56??練習(xí)04\T01\T01\mapmgr.cpp
?????文件????????571??2019-10-15?15:56??練習(xí)04\T01\T01\mapmgr.h
?????文件???????6780??2019-10-20?15:31??練習(xí)04\T01\T01\menu.cpp
?????文件???????2944??2019-10-15?15:56??練習(xí)04\T01\T01\menu.h
?????文件???????1703??2019-10-15?16:00??練習(xí)04\T01\T01\menufactory.cpp
?????文件????????352??2019-10-15?16:00??練習(xí)04\T01\T01\menufactory.h
?????文件????????940??2019-10-15?16:00??練習(xí)04\T01\T01\menumgr.cpp
?????文件????????574??2019-10-15?16:00??練習(xí)04\T01\T01\menumgr.h
............此處省略372個文件信息
- 上一篇:動物園java代碼
- 下一篇:java實現(xiàn)柱狀圖
評論
共有 條評論