Stage.hpp
//------------------------------------------------------------------------------
/// @file
/// @author ハル研究所プログラミングコンテスト実行委員会
///
/// @copyright Copyright (c) 2019 HAL Laboratory, Inc.
/// @attention このファイルの利用は、同梱のREADMEにある
/// 利用条件に従ってください。
//------------------------------------------------------------------------------
#pragma once
//------------------------------------------------------------------------------
#include "Action.hpp"
#include "Array.hpp"
#include "Food.hpp"
#include "Parameter.hpp"
#include "Point.hpp"
#include "Random.hpp"
//------------------------------------------------------------------------------
namespace hpc {
/// カメの行動の配列。
using Actions = Array<Action, Parameter::MaxTurtleCount>;
/// カメの位置の配列。
using TurtlePositions = Array<Point, Parameter::MaxTurtleCount>;
/// エサの配列。
using Foods = Array<Food, Parameter::MaxFoodCount>;
/// ステージ。
class Stage
{
public:
/// @name コンストラクタ
//@{
Stage();
//@}
/// @name 問い合わせ
//@{
/// 現在のターン数。
int turn() const;
/// カメの位置の配列。
const TurtlePositions& turtlePositions() const;
/// エサの配列。
const Foods& foods() const;
//@}
/// @name 内部関数用
//@{
/// 初期化する。
void initialize(int aTurtleCount, int aFoodCount, int aDistribution, const RandomSeed& aStageRandomSeed);
/// 更新する。
void update(const Actions& aActions);
/// ターンを進める。
void advanceTurn();
/// 終了したかどうか。
bool isEnd() const;
//@}
private:
/// @name プライベートメンバ変数
//@{
/// 現在のターン数。
int mTurn;
/// カメの位置の配列。
TurtlePositions mTurtlePositions;
/// エサの配列。
Foods mFoods;
//@}
};
} // namespace
// EOF