public static SyElement OkibaSujiDanToMasu(Okiba okiba, int masuHandle) { switch (Util_Masu.GetOkiba(Masu_Honshogi.Items_All[masuHandle])) { case Okiba.Sente_Komadai: masuHandle -= Util_Masu.AsMasuNumber(Util_Masu.GetFirstMasuFromOkiba(Okiba.Sente_Komadai)); break; case Okiba.Gote_Komadai: masuHandle -= Util_Masu.AsMasuNumber(Util_Masu.GetFirstMasuFromOkiba(Okiba.Gote_Komadai)); break; case Okiba.KomaBukuro: masuHandle -= Util_Masu.AsMasuNumber(Util_Masu.GetFirstMasuFromOkiba(Okiba.KomaBukuro)); break; case Okiba.ShogiBan: // そのんまま break; default: // エラー break; } masuHandle = masuHandle + Util_Masu.AsMasuNumber(Util_Masu.GetFirstMasuFromOkiba(okiba)); return(Util_Masu.HandleToMasu(masuHandle)); }
/// <summary> /// 将棋盤、駒台に筋があります。 /// </summary> /// <param name="masu"></param> /// <returns>該当なければ-1</returns> public static bool MasuToDan(SyElement masu, out int result) { bool successful = true; Okiba okiba = Util_Masu.GetOkiba(masu); switch (okiba) { case Okiba.ShogiBan: result = (Util_Masu.AsMasuNumber(masu) - Util_Masu.AsMasuNumber(Util_Masu.GetFirstMasuFromOkiba(okiba))) % 9 + 1; break; case Okiba.Sente_Komadai: case Okiba.Gote_Komadai: result = (Util_Masu.AsMasuNumber(masu) - Util_Masu.AsMasuNumber(Util_Masu.GetFirstMasuFromOkiba(okiba))) % 10 + 1; break; case Okiba.KomaBukuro: result = (Util_Masu.AsMasuNumber(masu) - Util_Masu.AsMasuNumber(Util_Masu.GetFirstMasuFromOkiba(okiba))) % 10 + 1; break; default: // エラー result = -1; successful = false; goto gt_EndMethod; } gt_EndMethod: return(successful); }
public static SyElement OkibaSujiDanToMasu(Okiba okiba, int suji, int dan) { int masuHandle = -1; switch (okiba) { case Okiba.ShogiBan: if (1 <= suji && suji <= Util_Masu.SHOGIBAN_LAST_SUJI && 1 <= dan && dan <= Util_Masu.SHOGIBAN_LAST_DAN) { masuHandle = (suji - 1) * Util_Masu.SHOGIBAN_LAST_DAN + (dan - 1); } break; case Okiba.Sente_Komadai: case Okiba.Gote_Komadai: case Okiba.KomaBukuro: if (1 <= suji && suji <= Util_Masu.KOMADAI_LAST_SUJI && 1 <= dan && dan <= Util_Masu.KOMADAI_LAST_DAN) { masuHandle = (suji - 1) * Util_Masu.KOMADAI_LAST_DAN + (dan - 1); masuHandle += Util_Masu.AsMasuNumber(Util_Masu.GetFirstMasuFromOkiba(okiba)); } break; default: break; } SyElement masu = Masu_Honshogi.Error;//範囲外が指定されることもあります。 if (Util_Masu.Yuko(masuHandle)) { masu = Masu_Honshogi.Items_All[masuHandle]; } return(masu); }
/// <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.Error; // 先手駒台または後手駒台の、各マスの駒がある場所を調べます。 bool[] exists = new bool[Util_Masu.KOMADAI_KOMABUKURO_SPACE_LENGTH];//駒台スペースは40マスです。 src_Sky.Foreach_Starlights((Finger finger, Starlight komaP, ref bool toBreak) => { RO_Star_Koma koma = Util_Koma.AsKoma(komaP.Now); if (Util_Masu.GetOkiba(koma.Masu) == okiba) { exists[ Util_Masu.AsMasuNumber(koma.Masu) - Util_Masu.AsMasuNumber(Util_Masu.GetFirstMasuFromOkiba(okiba)) ] = true; } }); //駒台スペースは40マスです。 for (int i = 0; i < Util_Masu.KOMADAI_KOMABUKURO_SPACE_LENGTH; i++) { if (!exists[i]) { akiMasu = Masu_Honshogi.Items_All[i + Util_Masu.AsMasuNumber(Util_Masu.GetFirstMasuFromOkiba(okiba))]; goto gt_EndMethod; } } gt_EndMethod: //System.C onsole.WriteLine("ゲット駒台駒袋スペース=" + akiMasu); return(akiMasu); }