他のプレイヤーを作ります。それはユニットに区別をつけるということになりますが、
どうやってそれを管理するのかが中々悩みどころなのです。
まあ、とりあえず作らないことには始まらないので、適当に…。
まず、Unitに自分が所属するグループを識別する変数を加えます。 まあ、こんなものはどうでもよくて、
UnitManagerのほうも改造を行います。
class UnitManager
{
//IDで管理する
std::map m_Units;
//所属グループで組み分けたもの(あくまでコピーという位置づけ)
std::map >
m_UnitClassifiedWithGroup;
…省略…
};
ということで、管理する機構をもうひとつつくって、
こちらはIDではなく、m_Groupをキーにします。
そうすることによって、自分がもつユニット、敵がもつユニットの情報を、
(まあまあ?)速く、かつ簡単に得ることができます。
もちろん、プレイヤーが自分のユニットの情報を持っておくにこしたことはないので、
それもPlayerクラスに実装します。
class Player
{
protected:
//自分が所有するユニット
std::map m_MyUnits;
//Worldへのポインタ
World* m_pWorld;
//このプレイヤーに割り当てられたID
int m_ID;
public:
Player(World* world)
: m_pWorld(world)
{
static int stID = 0;
m_ID = stID++;
}
virtual ~Player(){}
virtual void Update() = 0;
virtual void Render() = 0;
void AddMyUnit(Unit* unit);
};
プレイヤークラスにもIDをもたせます。
さて、次に敵プレイヤーとなるAIPlayerを実装します。
といっても、まだ敵AIを作る気はサラサラないので、
枠組みだけです。
class AIPlayer :public Player
{
public:
AIPlayer(World* world);
~AIPlayer(){}
void Update();
void Render();
};
といっても、Playerをstd::listに組み込むだけです。
World::World()
{
m_Graph = new Graph();
m_Players.push_back(new MyPlayer(this));
m_Players.push_back(new AIPlayer(this));
…略…
};
次に、その敵への攻撃を作る・・といきたいところですが、
まだゲームのコンセプトがよくきまっていないので、
(つまり、攻撃方法などが決まっていないので、
それに適した構造がつくることができない)
先に陣形などの機能を作ろうかなと思ったり・・・。
ゲーム画面(画像)