Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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);
        }