DigitalCurling3  1.0.0
A curling simulation system for curling AIs
digitalcurling3::ISimulator Class Referenceabstract

ストーンの挙動を再現する物理シミュレータを扱うためのインターフェイス More...

#include <i_simulator.hpp>

Classes

struct  Collision
 ストーンどうしの衝突の情報 More...
 
struct  Stone
 ストーンの位置,角度,速度,角速度を格納します More...
 

Public Types

using AllStones = std::array< std::optional< Stone >, kStoneMax >
 全ストーンの位置と速度 More...
 

Public Member Functions

virtual void SetStones (AllStones const &stones)=0
 全ストーンの情報を設定する. More...
 
virtual void Step ()=0
 1フレーム進める. More...
 
virtual AllStones const & GetStones () const =0
 全ストーンの情報を取得する. More...
 
virtual std::vector< Collision > const & GetCollisions () const =0
 直前の Step() の呼出しで発生したすべての衝突の情報を得る. More...
 
virtual bool AreAllStonesStopped () const =0
 全ストーンが停止しているかをチェックする. More...
 
virtual float GetSecondsPerFrame () const =0
 1回 Step() の呼出しで進む時間を得る. More...
 
virtual std::string GetSimulatorId () const =0
 シミュレータIDを得る. More...
 
virtual ISimulatorFactory const & GetFactory () const =0
 ファクトリーを得る More...
 
virtual std::unique_ptr< ISimulatorStorageCreateStorage () const =0
 ストレージを生成し,現在の状態を保存する More...
 
virtual void Save (ISimulatorStorage &storage) const =0
 ストレージに現在の状態を保存する More...
 
virtual void Load (ISimulatorStorage const &storage)=0
 ストレージから状態を復元する More...
 

Static Public Attributes

static constexpr std::uint8_t kStoneMax = 16
 シミュレータ上に配置可能なストーンの最大数
 
static constexpr float kStoneRadius = 0.145f
 ストーンの半径(m)
 

Protected Member Functions

 ISimulator (ISimulator const &)=default
 コピーコンストラクタ.何もコピーしません.サブクラスでのdefault実装をサポートするためのものです.
 
ISimulatoroperator= (ISimulator const &)=default
 コピー代入演算子.何もコピーしません.サブクラスでのdefault実装をサポートするためのものです.
 

Detailed Description

ストーンの挙動を再現する物理シミュレータを扱うためのインターフェイス

ISimulator のインスタンスは ISimulatorFactory の派生クラスの ISimulatorFactory::CreateInstance() でのみ生成されます.

このシミュレータではカーリングのルールやアイスシートの大きさ制限は記述されません. それらについては ApplyMove() で記述されます.

ISimulatorStorage を用いてシミュレーション中の状態を保存/復元することができます. この機能は木探索などで使用されることが想定されます. 状態の保存には ISimulator::CreateStorage() または ISimulator::Save() を, 状態の復元には ISimulatorStorage::CreateSimulator() または ISimulator::Load() を使用します.

See also
ISimulatorFactory, ApplyMove()

Member Typedef Documentation

◆ AllStones

using digitalcurling3::ISimulator::AllStones = std::array<std::optional<Stone>, kStoneMax>

全ストーンの位置と速度

盤面に存在しないストーンは std::nullopt として表されます.

Member Function Documentation

◆ AreAllStonesStopped()

virtual bool digitalcurling3::ISimulator::AreAllStonesStopped ( ) const
pure virtual

全ストーンが停止しているかをチェックする.

Returns
全ストーンが停止していれば true ,一つでも停止していないストーンがあれば false

◆ CreateStorage()

virtual std::unique_ptr<ISimulatorStorage> digitalcurling3::ISimulator::CreateStorage ( ) const
pure virtual

ストレージを生成し,現在の状態を保存する

Returns
新たに生成されたストレージ (シミュレーション状態のセーブ済み)

◆ GetCollisions()

virtual std::vector<Collision> const& digitalcurling3::ISimulator::GetCollisions ( ) const
pure virtual

直前の Step() の呼出しで発生したすべての衝突の情報を得る.

Note
このメンバ関数の返り値として得られた参照は他のconstでないメンバ関数を呼び出した時点で無効になります. 無効になった参照へアクセスした場合の動作は規定されません. 他のconstでないメンバ関数を呼び出した後も返り値の値を保持したい場合はコピーしてください.
Returns
直前の Step() の呼出しで発生したすべての衝突

◆ GetFactory()

virtual ISimulatorFactory const& digitalcurling3::ISimulator::GetFactory ( ) const
pure virtual

ファクトリーを得る

得られたファクトリーはこの ISimulator インスタンスを生成した ISimulatorFactory インスタンスよりも 詳細な情報を持っている可能性があります(例: インスタンスを生成した ISimulatorFactory の シード値が未指定であっても, GetFactory() の返り値ではシード値が補完されている.など). 得られた ISimulatorFactory から ISimulator を生成することで,同じ初期条件のシミュレータを得ることができます.

Note
このメンバ関数の返り値として得られた参照は他のconstでないメンバ関数を呼び出した時点で無効になります. 無効になった参照へアクセスした場合の動作は規定されません. 他のconstでないメンバ関数を呼び出した後も返り値の値を保持したい場合はコピーしてください.
Returns
ファクトリー

◆ GetSecondsPerFrame()

virtual float digitalcurling3::ISimulator::GetSecondsPerFrame ( ) const
pure virtual

1回 Step() の呼出しで進む時間を得る.

Returns
1回の Step() の呼出しで進む時間(秒)

◆ GetSimulatorId()

virtual std::string digitalcurling3::ISimulator::GetSimulatorId ( ) const
pure virtual

シミュレータIDを得る.

シミュレータIDはシミュレータの種類ごとに異なる.

Returns
シミュレータID

◆ GetStones()

virtual AllStones const& digitalcurling3::ISimulator::GetStones ( ) const
pure virtual

全ストーンの情報を取得する.

Note
このメンバ関数の返り値として得られた参照は他のconstでないメンバ関数を呼び出した時点で無効になります. 無効になった参照へアクセスした場合の動作は規定されません. 他のconstでないメンバ関数を呼び出した後も返り値の値を保持したい場合はコピーしてください.
Returns
全ストーンの情報(位置,角度,速度,角速度)

◆ Load()

virtual void digitalcurling3::ISimulator::Load ( ISimulatorStorage const &  storage)
pure virtual

ストレージから状態を復元する

Parameters
[in]storageストレージ

◆ Save()

virtual void digitalcurling3::ISimulator::Save ( ISimulatorStorage storage) const
pure virtual

ストレージに現在の状態を保存する

Parameters
[out]storageストレージ

◆ SetStones()

virtual void digitalcurling3::ISimulator::SetStones ( AllStones const &  stones)
pure virtual

全ストーンの情報を設定する.

Parameters
[in]stones全ストーンの情報(位置,角度,速度,角速度)

◆ Step()

virtual void digitalcurling3::ISimulator::Step ( )
pure virtual

1フレーム進める.

1回呼び出すと GetSecondsPerFrame() の返り値の分だけシミュレータ内部の時間が進みます


The documentation for this class was generated from the following file: