public static SyElement OkibaSujiDanToMasu(Okiba okiba, int masuHandle) { switch (Conv_SyElement.ToOkiba(masuHandle)) { case Okiba.Sente_Komadai: masuHandle -= Conv_SyElement.ToMasuNumber(Conv_Okiba.GetFirstMasuFromOkiba(Okiba.Sente_Komadai)); break; case Okiba.Gote_Komadai: masuHandle -= Conv_SyElement.ToMasuNumber(Conv_Okiba.GetFirstMasuFromOkiba(Okiba.Gote_Komadai)); break; case Okiba.KomaBukuro: masuHandle -= Conv_SyElement.ToMasuNumber(Conv_Okiba.GetFirstMasuFromOkiba(Okiba.KomaBukuro)); break; case Okiba.ShogiBan: // そのんまま break; default: // エラー break; } masuHandle = masuHandle + Conv_SyElement.ToMasuNumber(Conv_Okiba.GetFirstMasuFromOkiba(okiba)); return(Conv_MasuHandle.ToMasu(masuHandle)); }
/// <summary> /// /// </summary> /// <param name="okiba"></param> /// <param name="suji"></param> /// <param name="dan"></param> /// <returns></returns> public static int Handle_OkibaSujiDanToMasu(Okiba okiba, int suji, int dan) { int masuHandle = -1; switch (okiba) { case Okiba.ShogiBan: if (1 <= suji && suji <= Util_Masu10.SHOGIBAN_LAST_SUJI && 1 <= dan && dan <= Util_Masu10.SHOGIBAN_LAST_DAN) { masuHandle = (suji - 1) * Util_Masu10.SHOGIBAN_LAST_DAN + (dan - 1); } break; case Okiba.Sente_Komadai: case Okiba.Gote_Komadai: case Okiba.KomaBukuro: if (1 <= suji && suji <= Util_Masu10.KOMADAI_LAST_SUJI && 1 <= dan && dan <= Util_Masu10.KOMADAI_LAST_DAN) { masuHandle = (suji - 1) * Util_Masu10.KOMADAI_LAST_DAN + (dan - 1); masuHandle += Conv_SyElement.ToMasuNumber(Conv_Okiba.GetFirstMasuFromOkiba(okiba)); } break; default: break; } return(masuHandle); }
/// <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); }