public static Dictionary <ShootingStarlightable, KyokumenWrapper> KomabetuMasus_ToMovebetuSky( Maps_OneAndOne <Finger, SySet <SyElement> > komabetuSusumuMasus, SkyConst src_Sky, Playerside pside ) { Dictionary <ShootingStarlightable, KyokumenWrapper> resultMovebetuSky = new Dictionary <ShootingStarlightable, KyokumenWrapper>(); komabetuSusumuMasus.Foreach_Entry((Finger key, SySet <SyElement> value, ref bool toBreak) => { RO_Star_Koma koma = Util_Koma.AsKoma(src_Sky.StarlightIndexOf(key).Now); foreach (SyElement dstMasu in value.Elements) { ShootingStarlightable move = Util_Sky.New( //key, new RO_Star_Koma(pside, koma.Masu, koma.Haiyaku), new RO_Star_Koma(pside, dstMasu, koma.Haiyaku),//FIXME:配役は適当。 PieceType.None ); resultMovebetuSky.Add(move, new KyokumenWrapper(Util_Sasu.Sasu(src_Sky, key, dstMasu, pside))); } }); return(resultMovebetuSky); }
public void AddRange_New(Maps_OneAndOne <T1, T2> oo) { oo.Foreach_Entry((T1 key, T2 value, ref bool toBreak) => { this.AddNew(key, value); }); }
public static string Kamd_ToTerm(Maps_OneAndOne <Finger, SySet <SyElement> > kamd) { StringBuilder sb = new StringBuilder(); kamd.Foreach_Entry((Finger key, SySet <SyElement> value, ref bool toBreak) => { sb.AppendLine("entry.Key=" + key); sb.AppendLine(ShogibanTermDisplay.Masus_ToTerm(value)); sb.AppendLine(" ");//空行 }); return(sb.ToString()); }
public static string LogString_Set( Maps_OneAndOne <Finger, SySet <SyElement> > komabetuMasus ) { StringBuilder sb = new StringBuilder(); // 全要素 komabetuMasus.Foreach_Entry((Finger key, SySet <SyElement> value, ref bool toBreak) => { sb.AppendLine("駒=[" + key + "]"); sb.AppendLine(Util_Masus <Basho> .LogString_Concrete(value)); }); return(sb.ToString()); }
public static string Dump( Maps_OneAndOne <Finger, SySet <SyElement> > komabetuMasus ) { StringBuilder sb = new StringBuilder(); komabetuMasus.Foreach_Entry((Finger key, SySet <SyElement> value, ref bool toBreak) => { foreach (Basho masu in value.Elements) { sb.AppendLine("finger=[" + key.ToString() + "] masu=[" + value.ToString() + "]"); } }); return(sb.ToString()); }
/// <summary> /// 変換「自駒が動ける升」→「自駒が動ける手」 /// </summary> /// <param name="kmDic_Self"></param> /// <returns></returns> public static Maps_OneAndMulti <Finger, ShootingStarlightable> KomabetuMasusToKomabetuMove( Maps_OneAndOne <Finger, SySet <SyElement> > kmDic_Self, Node <ShootingStarlightable, KyokumenWrapper> siteiNode_genzai ) { Maps_OneAndMulti <Finger, ShootingStarlightable> komaTe = new Maps_OneAndMulti <Finger, ShootingStarlightable>(); // // kmDic_Self.Foreach_Entry((Finger key, SySet <SyElement> value, ref bool toBreak) => { foreach (SyElement masuHandle in value.Elements) { RO_Star_Koma koma = Util_Koma.AsKoma(siteiNode_genzai.Value.ToKyokumenConst.StarlightIndexOf(key).Now); ShootingStarlightable move = new RO_ShootingStarlight( //key, // 元 koma, // 先 new RO_Star_Koma( koma.Pside, Masu_Honshogi.Items_All[Util_Masu.AsMasuNumber(masuHandle)], koma.Haiyaku //TODO:成るとか考えたい ), PieceType.None //取った駒不明 ); //sbSfen.Append(sbSfen.ToString()); if (komaTe.ContainsKey(key)) { // すでに登録されている駒 komaTe.AddExists(key, move); } else { // まだ登録されていない駒 komaTe.AddNew(key, move); } } }); return(komaTe); }
/// <summary> /// 駒別マスをJSON化します。 /// </summary> /// <param name="enableLog"></param> /// <param name="src_Sky_base"></param> /// <param name="km_move"></param> /// <param name="comment"></param> /// <returns></returns> public static string JsonKyokumens_MultiKomabetuMasus(bool enableLog, SkyConst src_Sky_base, Maps_OneAndOne <Finger, SySet <SyElement> > km_move, string comment) { StringBuilder sb = new StringBuilder(); if (!enableLog) { goto gt_EndMethod; } km_move.Foreach_Entry((Finger key, SySet <SyElement> value, ref bool toBreak) => { // 駒1つ RO_Star_Koma koma = Util_Koma.AsKoma(src_Sky_base.StarlightIndexOf(key).Now); PieceType ks14 = Haiyaku184Array.Syurui(koma.Haiyaku); sb.AppendLine(" ["); // マスの色 sb.AppendLine(" { act:\"colorMasu\", style:\"rgba(100,240,100,0.5)\" },"); // 全マス foreach (Basho masu in value.Elements) { sb.AppendLine(" { act:\"drawMasu\" , masu:" + Util_Masu.AsMasuNumber(masu) + " },"); } string komaImg = Util_GraphicalLog.Finger_ToString(src_Sky_base, key, ""); sb.AppendLine(" { act:\"drawImg\", img:\"" + komaImg + "\", masu: " + Util_Masu.AsMasuNumber(koma.Masu) + " },");//FIXME:おかしい? // コメント sb.AppendLine(" { act:\"drawText\", text:\"" + comment + "\" , x:0, y:20 },"); sb.AppendLine(" ],"); }); gt_EndMethod: return(sb.ToString()); }
/// <summary> /// マージします。 /// </summary> /// <param name="right"></param> public static void Merge( Maps_OneAndOne <Finger, SySet <SyElement> > komabetuMasus, Maps_OneAndOne <Finger, SySet <SyElement> > right ) { right.Foreach_Entry((Finger key, SySet <SyElement> value, ref bool toBreak) => { Util_KomabetuMasus.AddOverwrite(komabetuMasus, key, value); //if (komabetuMasus.entries.ContainsKey(entry.Key)) //{ // // キーが重複していれば、value同士でマージします。 // komabetuMasus.entries[entry.Key].AddSupersets(entry.Value); //} //else //{ // // 新キーなら // komabetuMasus.entries.Add(entry.Key, entry.Value); //} }); }
public static string LogString_Concrete( Maps_OneAndOne <Finger, SySet <SyElement> > komabetuMasus ) { StringBuilder sb = new StringBuilder(); komabetuMasus.Foreach_Entry((Finger key, SySet <SyElement> value, ref bool toBreak) => { sb.Append("[駒"); sb.Append(key); sb.Append("]"); foreach (Basho masu in value.Elements) { sb.Append(Util_Masus <Basho> .LogString_Concrete(value)); //sb.Append(Masu81Array.Items[hMasu].ToString()); } }); return(sb.ToString()); }
public void Log4( SkyConst src_Sky, Playerside tebanSeme,//手番(利きを調べる側) Maps_OneAndOne <Finger, SySet <SyElement> > kmMove_seme_IKUSA ) { // 戦駒の移動可能場所 GraphicalLog_Board boardLog_clone = new GraphicalLog_Board(this.BrdMove); kmMove_seme_IKUSA.Foreach_Entry((Finger key, SySet <SyElement> value, ref bool toBreak) => { RO_Star_Koma koma = Util_Koma.AsKoma(src_Sky.StarlightIndexOf(key).Now); string komaImg = Util_GraphicalLog.PsideKs14_ToString(tebanSeme, Haiyaku184Array.Syurui(koma.Haiyaku), ""); foreach (Basho masu in value.Elements) { boardLog_clone.Masu_theMove.Add((int)masu.MasuNumber); } }); this.BrdMove = boardLog_clone; }
/// <summary> /// 指定された局面で、指定された手番の駒の、利きマスを算出します。 /// 持ち駒は盤上にないので、利きを調べる必要はありません。 /// /// 「手目」は判定できません。 /// /// </summary> /// <param name="kouho"></param> /// <param name="sbGohosyu"></param> /// <param name="logger"></param> public static List_OneAndMulti <Finger, SySet <SyElement> > LAAAA_GetEffect( bool enableLog, bool isHonshogi, SkyConst src_Sky, Playerside pside_genTeban3, bool isAiteban, GraphicalLog_File logF_kiki, string logBrd_caption, int yomuDeep_forLog,//脳内読み手数 int tesumi_yomiCur_forLog, ShootingStarlightable move_forLog ) { GraphicalLog_Board logBrd_kiki = new GraphicalLog_Board(); logBrd_kiki.Caption = logBrd_caption;// "利き_" logBrd_kiki.Tesumi = tesumi_yomiCur_forLog; logBrd_kiki.NounaiYomiDeep = yomuDeep_forLog; //logBrd_kiki.Score = 0.0d; logBrd_kiki.GenTeban = pside_genTeban3;// 現手番 logF_kiki.boards.Add(logBrd_kiki); // 《1》 List_OneAndMulti <Finger, SySet <SyElement> > sMs_effect = new List_OneAndMulti <Finger, SySet <SyElement> >();//盤上の駒の利き { // 《1.1》 Playerside tebanSeme; //手番(利きを調べる側) Playerside tebanKurau; //手番(喰らう側) { if (isAiteban) { tebanSeme = Converter04.AlternatePside(pside_genTeban3); tebanKurau = pside_genTeban3; } else { tebanSeme = pside_genTeban3; tebanKurau = Converter04.AlternatePside(pside_genTeban3); } if (Playerside.P1 == tebanSeme) { logBrd_kiki.NounaiSeme = Gkl_NounaiSeme.Sente; } else if (Playerside.P2 == tebanSeme) { logBrd_kiki.NounaiSeme = Gkl_NounaiSeme.Gote; } } // 《1.2》 Fingers fingers_seme_IKUSA; //戦駒(利きを調べる側) Fingers fingers_kurau_IKUSA; //戦駒(喰らう側) Fingers dust1; Fingers dust2; Util_Things.AAABAAAA_SplitGroup( out fingers_seme_IKUSA, out fingers_kurau_IKUSA, out dust1, out dust2, src_Sky, tebanSeme, tebanKurau ); // 攻め手の駒の位置 GraphicalLog_Board boardLog_clone = new GraphicalLog_Board(logBrd_kiki); foreach (Finger finger in fingers_seme_IKUSA.Items) { RO_Star_Koma koma = Util_Koma.AsKoma(src_Sky.StarlightIndexOf(finger).Now); Gkl_KomaMasu km = new Gkl_KomaMasu( Util_GraphicalLog.PsideKs14_ToString(tebanSeme, Haiyaku184Array.Syurui(koma.Haiyaku), ""), Util_Masu.AsMasuNumber(koma.Masu) ); boardLog_clone.KomaMasu1.Add(km); } foreach (Finger finger in fingers_kurau_IKUSA.Items) { RO_Star_Koma koma = Util_Koma.AsKoma(src_Sky.StarlightIndexOf(finger).Now); logBrd_kiki.KomaMasu2.Add(new Gkl_KomaMasu( Util_GraphicalLog.PsideKs14_ToString(tebanKurau, Haiyaku184Array.Syurui(koma.Haiyaku), ""), Util_Masu.AsMasuNumber(koma.Masu) )); } logBrd_kiki = boardLog_clone; // 《1.3》 SySet <SyElement> masus_seme_IKUSA = Converter04.Fingers_ToMasus(fingers_seme_IKUSA, src_Sky); // 盤上のマス(利きを調べる側の駒) SySet <SyElement> masus_kurau_IKUSA = Converter04.Fingers_ToMasus(fingers_kurau_IKUSA, src_Sky); // 盤上のマス(喰らう側の駒) // 駒のマスの位置は、特にログに取らない。 // 《1.4》 Maps_OneAndOne <Finger, SySet <SyElement> > kmEffect_seme_IKUSA = Util_Things.Get_KmEffect_seme_IKUSA( fingers_seme_IKUSA,//この中身がおかしい。 masus_seme_IKUSA, masus_kurau_IKUSA, src_Sky, enableLog, Converter04.MoveToStringForLog(move_forLog, pside_genTeban3) );// 利きを調べる側の利き(戦駒) // 戦駒の利き logBrd_kiki = new GraphicalLog_Board(logBrd_kiki); kmEffect_seme_IKUSA.Foreach_Entry((Finger key, SySet <SyElement> value, ref bool toBreak) => { RO_Star_Koma koma = Util_Koma.AsKoma(src_Sky.StarlightIndexOf(key).Now); string komaImg = Util_GraphicalLog.PsideKs14_ToString(tebanSeme, Haiyaku184Array.Syurui(koma.Haiyaku), ""); foreach (Basho masu in value.Elements) { boardLog_clone.Masu_theEffect.Add((int)masu.MasuNumber); } }); logBrd_kiki = boardLog_clone; // 《1》 = 《1.4》の戦駒+持駒 sMs_effect.AddRange_New(kmEffect_seme_IKUSA); } return(sMs_effect); }