/// <summary> /// 自動再生の途中停止を行います。 /// </summary> public void Stop() { if (ShogiElement != null) { ShogiElement.AutoPlayOpacity = 0.0; } Board = StartBoard.Clone(); Position = TimeSpan.Zero; BasePosition = TimeSpan.Zero; this.enumerator = null; this.moveIndex = 0; RaiseStopped(); }
/// <summary> /// 現在読み込まれている差し手から、局面を作成します。 /// </summary> public Board CreateBoard() { var board = StartBoard.Clone(); MoveList.ForEachWithIndex((move, n) => { if (!board.DoMove(move)) { throw new InvalidOperationException( string.Format( "{0}手目: 差し手が正しくありません。", n + 1)); } }); return(board); }
/// <summary> /// オブジェクトの妥当性を検証します。 /// </summary> public bool Validate() { if (StartBoard == null || !StartBoard.Validate()) { return(false); } if (AutoPlayType == AutoPlayType.Normal) { if (this.moveList == null) { return(false); } return(StartBoard.CanMoveList(this.moveList)); } return(true); }
/// <summary> /// 棋譜の確認と指し手の正規化を行います。 /// </summary> public void Validate() { if (Header == null) { throw new ShogiException( "ヘッダーが設定されていません。"); } if (RootNode == null) { throw new ShogiException( "指し手が設定されていません。"); } if (StartBoard == null || !StartBoard.Validate()) { throw new ShogiException( "開始局面が正しくありません。"); } }
protected bool Equals(Game other) { return(StartBoard.Equals(other.Board) && Equals(Board, other.Board) && Generation == other.Generation); }
public override int GetHashCode() { return(StartBoard.GetHashCode()); }