public static bool SetSsssMotMks_AndHasMotigoma(MotigomaSyurui val) { ssss_mot_mks_ = val; ssss_mot_mg_ = Med_Koma.MotiKomasyuruiAndTaikyokusyaToMotiKoma(val, kifu_teban); if (gky_ky.motigomaItiran.yomiMotigomaItiran.HasMotigoma(ssss_mot_mg_)) { // 持ち駒を持っているときだけセットするぜ☆(^~^) ssss_mot_km_ = Med_Koma.MotiKomasyuruiAndTaikyokusyaToKoma(ssss_mot_mks_, kifu_teban); ssss_mot_ks_ = Med_Koma.MotiKomasyuruiToKomasyrui(ssss_mot_mks_); return(true); } return(false); }
/// <summary> /// 指し手情報を分解するぜ☆(^~^) /// 駒を動かす方を手番、相手を相手番と考えるぜ☆(^~^) /// </summary> public static void BunkaiMoveDmv(Move ss) { // // 動かす駒を t0 と呼ぶとする。 // 移動元を t0、移動先を t1 と呼ぶとする。 // 取られる駒を c と呼ぶとする。 // 取られる駒の元位置は t1 、駒台は 3 と呼ぶとする。 // // 変数をグローバルに一時退避 // 移動先升 PureMemory.dmv_ms_t1 = AbstractConvMove.GetDstMasu_WithoutErrorCheck((int)ss); // あれば、移動先の相手の駒(取られる駒; capture) PureMemory.dmv_km_c = PureMemory.gky_ky.yomiKy.yomiShogiban.yomiIbashoBan.GetBanjoKoma(PureMemory.kifu_aiteban, PureMemory.dmv_ms_t1); PureMemory.dmv_ks_c = Med_Koma.KomaToKomasyurui(PureMemory.dmv_km_c); PureMemory.dmv_mk_c = Med_Koma.BanjoKomaToMotiKoma(PureMemory.dmv_km_c); if (AbstractConvMove.IsUtta(ss)) { // 打 PureMemory.dmv_ms_t0 = Conv_Masu.masu_error; // 指し手から「持駒」を判別 PureMemory.dmv_mks_t0 = AbstractConvMove.GetUttaKomasyurui(ss); PureMemory.dmv_mk_t0 = Med_Koma.MotiKomasyuruiAndTaikyokusyaToMotiKoma(PureMemory.dmv_mks_t0, PureMemory.kifu_teban); // 「持駒」から「駒」へ変換 PureMemory.dmv_km_t0 = Med_Koma.MotiKomasyuruiAndTaikyokusyaToKoma(PureMemory.dmv_mks_t0, PureMemory.kifu_teban); // 持ち駒は t0 も t1 も同じ。 PureMemory.dmv_km_t1 = PureMemory.dmv_km_t0; PureMemory.dmv_ks_t0 = Med_Koma.MotiKomasyuruiToKomasyrui(PureMemory.dmv_mks_t0); //おまとめ☆(^~^) PureMemory.dmv_ks_t1 = PureMemory.dmv_ks_t0; //追加 //#if DEBUG // if (!gky.ky.motiKomas.sindanMK.HasMotiKoma(mk_t0)) // { // CommandK.Ky(isSfen, "ky", gky, syuturyoku); // Util_Machine.Flush(syuturyoku); // } //#endif Debug.Assert(PureMemory.gky_ky.motigomaItiran.yomiMotigomaItiran.HasMotigoma(PureMemory.dmv_mk_t0), $"持っていない駒を打つのか☆(^~^)!? mks_src=[{ PureMemory.dmv_mks_t0 }] mk_utu=[{ PureMemory.dmv_mk_t0 }]"); } else { // 指し PureMemory.dmv_ms_t0 = AbstractConvMove.GetSrcMasu_WithoutErrorCheck((int)ss); PureMemory.dmv_km_t0 = PureMemory.gky_ky.yomiKy.yomiShogiban.yomiIbashoBan.GetBanjoKoma(PureMemory.dmv_ms_t0); PureMemory.dmv_ks_t0 = Med_Koma.KomaToKomasyurui(PureMemory.dmv_km_t0);//移動元の駒の種類 PureMemory.dmv_mks_t0 = MotigomaSyurui.Yososu; PureMemory.dmv_mk_t0 = Motigoma.Yososu; if (AbstractConvMove.IsNatta(ss)) // 駒が成るケース { PureMemory.dmv_ks_t1 = Conv_Komasyurui.ToNariCase(PureMemory.dmv_ks_t0); PureMemory.dmv_km_t1 = Med_Koma.KomasyuruiAndTaikyokusyaToKoma(PureMemory.dmv_ks_t1, PureMemory.kifu_teban); } else // 駒が成らないケース { PureMemory.dmv_km_t1 = PureMemory.gky_ky.yomiKy.yomiShogiban.yomiIbashoBan.GetBanjoKoma(PureMemory.dmv_ms_t0); PureMemory.dmv_ks_t1 = PureMemory.dmv_ks_t0; } } }