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