/// <summary> /// 1P玉と、2P玉を取得します。 /// </summary> /// <param name="koma_1PGyoku_orNull"></param> /// <param name="koma_2PGyoku_orNull"></param> /// <param name="src_Sky"></param> public static void Split_1PGyoku_2PGyoku( out RO_Star koma_1PGyoku_orNull, out RO_Star koma_2PGyoku_orNull, SkyConst src_Sky ) { RO_Star koma_1PGyoku_temp = null; RO_Star koma_2PGyoku_temp = null; src_Sky.Foreach_Starlights((Finger finger, IMoveHalf ds, ref bool toBreak) => { RO_Star koma = Util_Starlightable.AsKoma(ds.Now); if ( Okiba.ShogiBan == Conv_SyElement.ToOkiba(koma.Masu) && PieceType.K == koma.Komasyurui ) { if (Playerside.P1 == koma.Pside) { koma_1PGyoku_temp = koma;// 1P玉の位置 } else if (Playerside.P2 == koma.Pside) { koma_2PGyoku_temp = koma;// 2P玉の位置 } } }); koma_1PGyoku_orNull = koma_1PGyoku_temp; koma_2PGyoku_orNull = koma_2PGyoku_temp; }
/// <summary> /// 持駒を取得。 /// </summary> /// <param name="fingers_banjoSeme"></param> /// <param name="fingers_banjoKurau"></param> /// <param name="fingers_motiSeme"></param> /// <param name="fingers_motiKurau"></param> /// <param name="src_Sky"></param> /// <param name="tebanSeme"></param> /// <param name="tebanKurau"></param> public static void Split_Moti1p_Moti2p( out Fingers fingers_moti1p, // 持駒 1P out Fingers fingers_moti2p, // 持駒 2= SkyConst src_Sky ) { Fingers fingers_moti1p_temp = new Fingers(); // (3)持ち駒_攻め手 Fingers fingers_moti2p_temp = new Fingers(); // (4)持ち駒_食らう側 src_Sky.Foreach_Starlights((Finger finger, IMoveHalf dd, ref bool toBreak) => { RO_Star koma = Util_Starlightable.AsKoma(dd.Now); if (Conv_SyElement.ToOkiba(koma.Masu) == Okiba.Sente_Komadai) { // // 1P 駒台 // fingers_moti1p_temp.Add(finger); } else if (Conv_SyElement.ToOkiba(koma.Masu) == Okiba.Gote_Komadai) { // // 2P 駒台 // fingers_moti2p_temp.Add(finger); } }); fingers_moti1p = fingers_moti1p_temp; fingers_moti2p = fingers_moti2p_temp; }
/// <summary> /// 駒のハンドルを返します。 /// </summary> /// <param name="pside"></param> /// <param name="hKomas"></param> /// <returns></returns> public static Fingers InPsideNow(SkyConst srcSky, Playerside pside) { Fingers fingers = new Fingers(); srcSky.Foreach_Starlights((Finger finger, IMoveHalf ds, ref bool toBreak) => { RO_Star koma = Util_Starlightable.AsKoma(ds.Now); if (pside == koma.Pside) { fingers.Add(finger); } }); return(fingers); }
/// <summary> /// 升コレクション。 /// </summary> /// <param name="src_Sky"></param> /// <param name="pside"></param> /// <returns></returns> public static SySet <SyElement> Masus_Now(SkyConst src_Sky, Playerside pside) { SySet_Default <SyElement> masus = new SySet_Default <SyElement>("今の升"); src_Sky.Foreach_Starlights((Finger finger, IMoveHalf mlLight, ref bool toBreak) => { RO_Star koma = Util_Starlightable.AsKoma(mlLight.Now); if (koma.Pside == pside && Conv_SyElement.ToOkiba(koma.Masu) == Okiba.ShogiBan) { masus.AddElement(koma.Masu); } }); return(masus); }
/// <summary> /// ログが多くなるので、1行で出力されるようにします。 /// </summary> /// <returns></returns> public static Json_Val ToJsonVal(SkyConst src_Sky) { Json_Obj obj = new Json_Obj(); Json_Arr arr = new Json_Arr(); src_Sky.Foreach_Starlights((Finger finger, IMoveHalf light, ref bool toBreak) => { if (null != light) { arr.Add(Conv_Starlight.ToJsonVal(light)); } }); obj.Add(new Json_Prop("sprite", arr)); return(obj); }
/// <summary> /// ********************************************************************************************************************** /// 駒のハンドルを返します。 /// ********************************************************************************************************************** /// </summary> /// <param name="okiba"></param> /// <param name="kifuD"></param> /// <returns></returns> public static Fingers InOkibaPsideNow(SkyConst src_Sky, Okiba okiba, Playerside pside) { Fingers fingers = new Fingers(); src_Sky.Foreach_Starlights((Finger finger, IMoveHalf dd, ref bool toBreak) => { RO_Star koma = Util_Starlightable.AsKoma(dd.Now); if (Conv_SyElement.ToOkiba(koma.Masu) == okiba && pside == koma.Pside ) { fingers.Add(finger); } }); return(fingers); }
/// <summary> /// ************************************************************************************************************************ /// 局面上のオブジェクトを返します。置き場、先後サイド、駒の種類で絞りこみます。 /// ************************************************************************************************************************ /// </summary> /// <param name="src_Sky">局面データ。</param> /// <param name="okiba">置き場。</param> /// <param name="pside">先後サイド。</param> /// <param name="komaSyurui">駒の種類。</param> /// <returns></returns> public static Fingers InOkibaPsideKomasyuruiNow(SkyConst src_Sky, Okiba okiba, Playerside pside, PieceType komaSyurui) { Fingers fingers = new Fingers(); src_Sky.Foreach_Starlights((Finger finger, IMoveHalf light, ref bool toBreak) => { RO_Star koma = Util_Starlightable.AsKoma(light.Now); if ( okiba == Conv_SyElement.ToOkiba(koma.Masu) && pside == koma.Pside && komaSyurui == koma.Komasyurui ) { fingers.Add(finger); } }); return(fingers); }
public static void Split_Jigyoku_Aitegyoku( out RO_Star koma_Jigyoku_orNull, out RO_Star koma_Aitegyoku_orNull, SkyConst src_Sky, Playerside jiPside, Playerside aitePside ) { RO_Star koma_Jigyoku_temp = null; RO_Star koma_Aitegyoku_temp = null; src_Sky.Foreach_Starlights((Finger finger, IMoveHalf ds, ref bool toBreak) => { RO_Star koma = Util_Starlightable.AsKoma(ds.Now); if ( Okiba.ShogiBan == Conv_SyElement.ToOkiba(koma.Masu) && jiPside == koma.Pside && PieceType.K == koma.Komasyurui ) { // // 自玉の位置 // koma_Jigyoku_temp = koma; } else if ( Okiba.ShogiBan == Conv_SyElement.ToOkiba(koma.Masu) && aitePside == koma.Pside && PieceType.K == koma.Komasyurui ) { // // 相手玉の位置 // koma_Aitegyoku_temp = koma; } }); koma_Jigyoku_orNull = koma_Jigyoku_temp; koma_Aitegyoku_orNull = koma_Aitegyoku_temp; }
/// <summary> /// ************************************************************************************************************************ /// 駒台の空いている升を返します。 /// ************************************************************************************************************************ /// </summary> /// <param name="okiba">先手駒台、または後手駒台</param> /// <param name="uc_Main">メインパネル</param> /// <returns>置ける場所。無ければヌル。</returns> public static SyElement GetKomadaiKomabukuroSpace(Okiba okiba, SkyConst src_Sky) { SyElement akiMasu = Masu_Honshogi.Query_Basho(Masu_Honshogi.nError); // 先手駒台または後手駒台の、各マスの駒がある場所を調べます。 bool[] exists = new bool[Util_Masu10.KOMADAI_KOMABUKURO_SPACE_LENGTH];//駒台スペースは40マスです。 src_Sky.Foreach_Starlights((Finger finger, IMoveHalf komaP, ref bool toBreak) => { RO_Star koma = Util_Starlightable.AsKoma(komaP.Now); if (Conv_SyElement.ToOkiba(koma.Masu) == okiba) { exists[ Conv_SyElement.ToMasuNumber(koma.Masu) - Conv_SyElement.ToMasuNumber(Conv_Okiba.GetFirstMasuFromOkiba(okiba)) ] = true; } }); //駒台スペースは40マスです。 for (int i = 0; i < Util_Masu10.KOMADAI_KOMABUKURO_SPACE_LENGTH; i++) { if (!exists[i]) { akiMasu = Masu_Honshogi.Masus_All[i + Conv_SyElement.ToMasuNumber(Conv_Okiba.GetFirstMasuFromOkiba(okiba))]; goto gt_EndMethod; } } gt_EndMethod: //Logger.Trace($"ゲット駒台駒袋スペース={akiMasu}"); return(akiMasu); }
/// <summary> /// 「グラフィカル局面ログ」出力用だぜ☆ /// </summary> public static string Json_1Sky( SkyConst src_Sky, string memo, string hint, int temezumi_yomiGenTeban_forLog//読み進めている現在の手目済 //[CallerMemberName] string memberName = "", //[CallerFilePath] string sourceFilePath = "", //[CallerLineNumber] int sourceLineNumber = 0 ) { //...(^▽^)さて、局面は☆? StringBuilder sb = new StringBuilder(); sb.AppendLine("["); // コメント string comment; { StringBuilder cmt = new StringBuilder(); // メモ cmt.Append(memo); comment = cmt.ToString(); } sb.AppendLine($" {{ act:\"drawText\", text:\"{comment}\", x: 20, y:20 }},");//FIXME: \記号が入ってなければいいが☆ int hKoma = 0; int hMasu_sente = 81; int hMasu_gote = 121; // 全駒 src_Sky.Foreach_Starlights((Finger finger, IMoveHalf light, ref bool toBreak) => { RO_Star koma = Util_Starlightable.AsKoma(light.Now); if (Conv_SyElement.ToOkiba(koma.Masu) == Okiba.Gote_Komadai) { // 後手持ち駒 sb.AppendLine($" {{ act:\"drawImg\", img:\"{Util_Converter_LogGraphicEx.PsideKs14_ToString(koma.Pside, koma.Komasyurui, "")}\", masu: {hMasu_gote} }},");//FIXME: \記号が入ってなければいいが☆ hMasu_gote++; } else if (Conv_SyElement.ToOkiba(koma.Masu) == Okiba.Sente_Komadai) { // 先手持ち駒 sb.AppendLine($" {{ act:\"drawImg\", img:\"{Util_Converter_LogGraphicEx.PsideKs14_ToString(koma.Pside, koma.Komasyurui, "")}\", masu: {hMasu_sente} }},");//FIXME: \記号が入ってなければいいが☆ hMasu_sente++; } else if (Conv_SyElement.ToOkiba(koma.Masu) == Okiba.ShogiBan) { // 盤上 sb.AppendLine($" {{ act:\"drawImg\", img:\"{Util_Converter_LogGraphicEx.PsideKs14_ToString(koma.Pside, koma.Komasyurui, "")}\", masu: {Conv_SyElement.ToMasuNumber(koma.Masu)} }},");//FIXME: \記号が入ってなければいいが☆ } hKoma++; }); sb.AppendLine("],"); // ...(^▽^)ドウダッタカナ~☆ return(sb.ToString()); }
/// <summary> /// 4分割します。 /// </summary> /// <param name="fs_banjoSeme">fingers</param> /// <param name="fs_banjoKurau"></param> /// <param name="fs_motiSeme"></param> /// <param name="fs_motiKurau"></param> /// <param name="src_Sky"></param> /// <param name="tebanSeme"></param> /// <param name="tebanKurau"></param> public static void Split_BanjoSeme_BanjoKurau_MotiSeme_MotiKurau( out Fingers fs_banjoSeme, //戦駒(利きを調べる側) out Fingers fs_banjoKurau, //戦駒(喰らう側) out Fingers fs_motiSeme, // 持駒(利きを調べる側) out Fingers fs_motiKurau, // 持駒(喰らう側) SkyConst src_Sky, Playerside tebanSeme, Playerside tebanKurau ) { Fingers fs_banjoSeme_temp = new Fingers(); // (1)盤上駒_攻め手 Fingers fs_banjoKurau_temp = new Fingers(); // (2)盤上駒_食らう側 Fingers fs_motiSeme_temp = new Fingers(); // (3)持ち駒_攻め手 Fingers fs_motiKurau_temp = new Fingers(); // (4)持ち駒_食らう側 src_Sky.Foreach_Starlights((Finger finger, IMoveHalf light, ref bool toBreak) => { RO_Star star = Util_Starlightable.AsKoma(light.Now);//駒 if (Conv_SyElement.ToOkiba(star.Masu) == Okiba.ShogiBan) { // // 盤上 // if (tebanSeme == star.Pside) { fs_banjoSeme_temp.Add(finger);// (1)盤上駒_攻め手 } else if (tebanKurau == star.Pside) { fs_banjoKurau_temp.Add(finger);// (2)盤上駒_食らう側 } } else if (Conv_SyElement.ToOkiba(star.Masu) == Okiba.Sente_Komadai) { // // P1駒台 // if (tebanSeme == Playerside.P1) { // 攻手がP1のとき、P1駒台は。 fs_motiSeme_temp.Add(finger);// (3)持ち駒_攻め手 } else if (tebanSeme == Playerside.P2) { // 攻手がP2のとき、P1駒台は。 fs_motiKurau_temp.Add(finger);// (4)持ち駒_食らう側 } else { throw new Exception("駒台の持ち駒を調べようとしましたが、先手でも、後手でもない指定でした。"); } } else if (Conv_SyElement.ToOkiba(star.Masu) == Okiba.Gote_Komadai) { // // P2駒台 // if (tebanSeme == Playerside.P1) { // 攻手がP1のとき、P2駒台は。 fs_motiKurau_temp.Add(finger);// (3)持ち駒_攻め手 } else if (tebanSeme == Playerside.P2) { // 攻手がP2のとき、P2駒台は。 fs_motiSeme_temp.Add(finger);// (4)持ち駒_食らう側 } else { throw new Exception("駒台の持ち駒を調べようとしましたが、先手でも、後手でもない指定でした。"); } } else { throw new Exception("駒台の持ち駒を調べようとしましたが、盤上でも、駒台でもない指定でした。"); } }); fs_banjoSeme = fs_banjoSeme_temp; // (1)盤上駒_攻め手 fs_banjoKurau = fs_banjoKurau_temp; // (2)盤上駒_食らう側 fs_motiSeme = fs_motiSeme_temp; // (3)持ち駒_攻め手 fs_motiKurau = fs_motiKurau_temp; // (4)持ち駒_食らう側 }