DigitalCurling3  1.0.0
A curling simulation system for curling AIs
digitalcurling3::GameState Struct Reference

試合の状態を表す More...

#include <game_state.hpp>

Public Types

using Stones = std::array< std::array< std::optional< Transform >, kShotPerEnd/2 >, 2 >
 各チームのストーンの位置と角度を格納します More...
 

Public Member Functions

 GameState ()
 デフォルトコンストラクタ. More...
 
 GameState (GameSetting const &setting)
 引数で指定された試合設定に対する初期盤面を構築する More...
 
 GameState (GameState const &)=default
 コピーする
 
 GameState (GameState &&)=default
 ムーブする More...
 
GameStateoperator= (GameState const &)=default
 コピーする
 
GameStateoperator= (GameState &&)=default
 ムーブする More...
 
std::uint32_t GetTotalScore (Team team) const
 チームの現在までの合計スコアを得る More...
 
Team GetNextTeam () const
 次に行動するチームを得る. More...
 
bool IsGameOver () const
 ゲームが終了しているかを調べる More...
 

Static Public Member Functions

static std::pair< Team, size_t > StonesIndexFromAllStonesIndex (size_t all_stones_index)
 ISimulator::AllStones のインデックスから GameState::Stones のインデックスに変換する. More...
 
static size_t StonesIndexToAllStonesIndex (Team team, size_t team_stone_index)
 GameState::Stones のインデックスから ISimulator::AllStones のインデックスに変換する. More...
 
static Stones StonesFromAllStones (ISimulator::AllStones const &all_stones, std::uint8_t end)
 ISimulator::AllStones から GameState::Stones へ変換する. More...
 
static ISimulator::AllStones StonesToAllStones (Stones const &stones, std::uint8_t end)
 GameState::Stones から ISimulator::AllStones へ変換する. More...
 

Public Attributes

std::uint8_t end
 現在のエンド. More...
 
std::uint8_t shot
 現在のショット番号.0以上,15以下.
 
Team hammer
 現在のエンドのハンマー(後攻). More...
 
Stones stones
 各チームのストーンの位置と角度 More...
 
std::array< std::vector< std::optional< std::uint8_t > >, 2 > scores
 各エンドのスコアを格納する More...
 
std::array< std::optional< std::uint8_t >, 2 > extra_end_score
 エクストラエンド(延長戦)のスコア. More...
 
std::array< std::chrono::milliseconds, 2 > thinking_time_remaining
 各チームの残り思考時間 More...
 
std::optional< GameResultgame_result
 試合結果 More...
 

Static Public Attributes

static constexpr std::uint8_t kExtraEndMax = 255
 延長戦を含めたエンド数の最大値 ( GameState::end >= kExtraEndMax のときは無効なエンドを表します)
 
static constexpr size_t kShotPerEnd = 16
 エンド毎のショット数
 

Detailed Description

試合の状態を表す

Note
この構造体はカプセル化していません. これは構造体内部の値を直接書き換えることで様々な盤面の状態を作れるようにするためです. 構造体内部の値を直接書き換えることによって,内部の値が不正になる可能性がありますが, そのような内部の値が不正な GameState インスタンスを使用した場合の動作は保証しません.

Member Typedef Documentation

◆ Stones

using digitalcurling3::GameState::Stones = std::array< std::array<std::optional<Transform>, kShotPerEnd / 2>, 2>

各チームのストーンの位置と角度を格納します

See also
GameState::stones

Constructor & Destructor Documentation

◆ GameState() [1/3]

digitalcurling3::GameState::GameState ( )

デフォルトコンストラクタ.

Note
このコンストラクタは便宜上用意されたものです. このコンストラクタで生成されたインスタンスをそのまま ApplyMove() に渡さないようにしてください. 試合の初期盤面を構築する場合は代わりに GameState(GameSetting const&) を用いてください.
See also
GameState(GameSetting const&) 試合設定に対する初期盤面を構築する

◆ GameState() [2/3]

digitalcurling3::GameState::GameState ( GameSetting const &  setting)

引数で指定された試合設定に対する初期盤面を構築する

Parameters
[in]setting試合設定

◆ GameState() [3/3]

digitalcurling3::GameState::GameState ( GameState &&  )
default

ムーブする

Note
ムーブ済みオブジェクトに対するあらゆる操作は保証されません.

Member Function Documentation

◆ GetNextTeam()

Team digitalcurling3::GameState::GetNextTeam ( ) const

次に行動するチームを得る.

ゲームがすでに終了している場合 Team::kInvalid を返す.

Returns
次に行動するチーム
Exceptions
std::logic_error構造体の内容が不正な場合

◆ GetTotalScore()

std::uint32_t digitalcurling3::GameState::GetTotalScore ( Team  team) const

チームの現在までの合計スコアを得る

Parameters
[in]teamチーム. Team::kInvalid は渡さないでください.
Returns
引数で指定したプレイヤーの合計スコア
Exceptions
std::invalid_argument引数が不正な場合

◆ IsGameOver()

bool digitalcurling3::GameState::IsGameOver ( ) const
inline

ゲームが終了しているかを調べる

Returns
ゲームが終了している場合 true

◆ operator=()

GameState& digitalcurling3::GameState::operator= ( GameState &&  )
default

ムーブする

Note
ムーブ済みオブジェクトに対するあらゆる操作は保証されません.

◆ StonesFromAllStones()

static Stones digitalcurling3::GameState::StonesFromAllStones ( ISimulator::AllStones const &  all_stones,
std::uint8_t  end 
)
static

ISimulator::AllStones から GameState::Stones へ変換する.

Parameters
all_stonesストーン
end現在のエンド
Returns
all_stonesGameState::Stones に変換したもの

◆ StonesIndexFromAllStonesIndex()

static std::pair<Team, size_t> digitalcurling3::GameState::StonesIndexFromAllStonesIndex ( size_t  all_stones_index)
static

ISimulator::AllStones のインデックスから GameState::Stones のインデックスに変換する.

Parameters
all_stones_indexISimulator::AllStones のインデックス
Returns
first: チーム, second: チーム内のストーンのインデックス

◆ StonesIndexToAllStonesIndex()

static size_t digitalcurling3::GameState::StonesIndexToAllStonesIndex ( Team  team,
size_t  team_stone_index 
)
static

GameState::Stones のインデックスから ISimulator::AllStones のインデックスに変換する.

Parameters
teamチーム
team_stone_indexチーム内のストーンのインデックス
Returns
ISimulator::AllStones のインデックス

◆ StonesToAllStones()

static ISimulator::AllStones digitalcurling3::GameState::StonesToAllStones ( Stones const &  stones,
std::uint8_t  end 
)
static

GameState::Stones から ISimulator::AllStones へ変換する.

Parameters
stonesストーン
end現在のエンド
Returns
stonesISimulator::AllStones に変換したもの

Member Data Documentation

◆ end

std::uint8_t digitalcurling3::GameState::end

現在のエンド.

kExtraEndMax になると強制的に引き分けとして処理されます.

◆ extra_end_score

std::array<std::optional<std::uint8_t>, 2> digitalcurling3::GameState::extra_end_score

エクストラエンド(延長戦)のスコア.

インデックスはチームを表します.

extra_end_score[0] // チーム0のエクストラエンドのスコア
extra_end_score[1] // チーム1のエクストラエンドのスコア

スコアが未確定の場合は std::nullopt になります. エクストラエンドの得点が0以外になったとき(つまり延長戦によって勝敗が決定したとき)のみ, 有効な(std::nullopt 以外の)値が格納されます.

◆ game_result

std::optional<GameResult> digitalcurling3::GameState::game_result

試合結果

std::nullopt の値は試合中を意味します

◆ hammer

Team digitalcurling3::GameState::hammer

現在のエンドのハンマー(後攻).

ゲーム終了後は Team::kInvalid になります.

◆ scores

std::array< std::vector<std::optional<std::uint8_t> >, 2> digitalcurling3::GameState::scores

各エンドのスコアを格納する

1つ目のインデックスはチーム,2つ目のインデックスはエンドを表します.

scores[0][0] // チーム0の0エンド目のスコア
scores[1][9] // チーム1の9エンド目のスコア

スコアが未確定の場合は std::nullopt になります.

See also
extra_end_score 延長エンドのスコア

◆ stones

Stones digitalcurling3::GameState::stones

各チームのストーンの位置と角度

1つ目のインデックスはチーム,2つ目のインデックスはストーンのインデックスを表します.

stones[0][0] // チーム0の0番目のストーン
stones[1][7] // チーム1の7番目のストーン

ストーンが盤面に存在しない場合は std::nullopt になります.

座標系はストーンの発射地点(ハックの位置)を原点,ショットする方向(反対側のハウスがある向き)をy軸正方向としています.

◆ thinking_time_remaining

std::array<std::chrono::milliseconds, 2> digitalcurling3::GameState::thinking_time_remaining

各チームの残り思考時間

0になると時間切れ負け


The documentation for this struct was generated from the following file:
digitalcurling3::GameState::extra_end_score
std::array< std::optional< std::uint8_t >, 2 > extra_end_score
エクストラエンド(延長戦)のスコア.
Definition: game_state.hpp:149
digitalcurling3::GameState::stones
Stones stones
各チームのストーンの位置と角度
Definition: game_state.hpp:121
digitalcurling3::GameState::scores
std::array< std::vector< std::optional< std::uint8_t > >, 2 > scores
各エンドのスコアを格納する
Definition: game_state.hpp:136