/// <summary> /// 差分更新は、対局者1 の視点の盤で行えなんだぜ☆(^▽^) /// </summary> /// <param name="ky"></param> /// <param name="km"></param> /// <param name="ms"></param> /// <param name="fueta"></param> public void FuyasuBanjoKoma(Kyokumen ky, Koma km, Masu ms) { if (DebugOptions.AddPiecesOnBoard) { var optionalPiece = OptionalPiece.From(km); Debug.Assert(Conv_Koma.IsOk(optionalPiece), "");//空白とか禁止☆(^~^)! Util_NikomaKankei.MakeKoumokuBangoHairetu_Subete(ky, Util_NikomaKankei.KoumokuBangoHairetu1); Increase( Util_NikomaKankei.Kazoeru_NikomaKankeiHyokati_ItiTaiTa_SabunKosinYou(ky, Util_NikomaKankei.GetKoumokuBango_Banjo(ky, km, ms),// 駒の位置(評価関数の項目番号)をリストに入れておくぜ☆ Util_NikomaKankei.KoumokuBangoHairetu1 )); } }
/// <summary> /// /// </summary> /// <param name="ms">どの(0~80)升に</param> /// <param name="km">先後付きの駒</param> /// <returns></returns> public static ulong GetBanjoKey(Masu ms, Koma km, Kyokumen.Sindanyo kys) { var optionalPiece = OptionalPiece.From(km); Debug.Assert(Conv_Koma.IsOk(optionalPiece), ""); if (Dirty) { Tukurinaosi(kys); } if (!Conv_Koma.IsOk(optionalPiece)) { throw new Exception("エラー☆(>_<) 盤上の駒じゃないぜ☆"); } else if (kys.IsBanjo(ms)) { return(m_banjoKeys_[(int)ms, (int)km]); } else { throw new Exception("エラー☆(>_<) 盤上のどこに置いてある駒なんだぜ☆"); } }
/* * /// <summary> * /// 空白、要素数以外の駒 * /// </summary> * /// <param name="km"></param> * /// <returns></returns> * public static bool IsOk(Koma km) * { * return Koma.King1 <= km && km < Koma.PieceNum; * } */ /// <summary> /// 空白、要素数以外の駒 /// </summary> /// <param name="optionalPiece"></param> /// <returns></returns> public static bool IsOk(Option <Piece> optionalPiece) { var pieceIndex = OptionalPiece.IndexOf(optionalPiece); return((int)Koma.King1 <= pieceIndex && pieceIndex < (int)Koma.PieceNum); }