Exemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="figMovedKoma"></param>
        /// <param name="move">棋譜に記録するために「指す前/指した後」を含めた手。</param>
        /// <param name="kifu"></param>
        /// <param name="isMakimodosi"></param>
        private static void Kifusasi25(
            out Finger figMovedKoma,
            ShootingStarlightable move,
            KifuTree kifu,
            bool isMakimodosi
            ,
            [CallerMemberName] string memberName    = "",
            [CallerFilePath] string sourceFilePath  = "",
            [CallerLineNumber] int sourceLineNumber = 0
            )
        {
            figMovedKoma = Fingers.Error_1;

            SkyConst src_Sky = kifu.CurNode.Value.ToKyokumenConst;

            //------------------------------------------------------------
            // 選択  :  動かす駒
            //------------------------------------------------------------
            if (isMakimodosi)
            {
                // [巻戻し]のとき
                //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                // 打った駒も、指した駒も、結局は将棋盤の上にあるはず。

                RO_Star_Koma koma = Util_Koma.AsKoma(move.Now);

                // 動かす駒
                figMovedKoma = Util_Sky.Finger_AtMasuNow_Shogiban(
                    src_Sky,
                    koma.Pside,
                    koma.Masu//[巻戻し]のときは、先位置が 駒の居場所。
                    );
            }
            else
            {
                // 進むとき
                //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                //------------------------------
                // 符号の追加(一手進む)
                //------------------------------
                KifuNode genKyokumenCopyNode = new KifuNodeImpl(move, new KyokumenWrapper(src_Sky), KifuNodeImpl.GetReverseTebanside(((KifuNode)kifu.CurNode).Tebanside));

                // TODO: ↓?
                ((KifuNode)kifu.CurNode).AppendChildA_New(genKyokumenCopyNode);
                kifu.CurNode = genKyokumenCopyNode;

                if (Util_Sky.IsDaAction(move))
                {
                    //----------
                    // 駒台から “打”
                    //----------

                    RO_Star_Koma srcKoma = Util_Koma.AsKoma(move.LongTimeAgo);
                    RO_Star_Koma dstKoma = Util_Koma.AsKoma(move.Now);


                    figMovedKoma = Util_Sky.FingerNow_BySyuruiIgnoreCase(
                        src_Sky,
                        Util_Masu.GetOkiba(srcKoma.Masu),
                        Haiyaku184Array.Syurui(dstKoma.Haiyaku)
                        );
                }
                else
                {
                    //----------
                    // 将棋盤から
                    //----------

                    RO_Star_Koma srcKoma = Util_Koma.AsKoma(move.LongTimeAgo);
                    RO_Star_Koma dstKoma = Util_Koma.AsKoma(move.Now);


                    figMovedKoma = Util_Sky.Finger_AtMasuNow_Shogiban(
                        src_Sky,
                        dstKoma.Pside,
                        Util_Masu.OkibaSujiDanToMasu(
                            Util_Masu.GetOkiba(Masu_Honshogi.Items_All[Util_Masu.AsMasuNumber(dstKoma.Masu)]),
                            Util_Masu.AsMasuNumber(srcKoma.Masu)
                            )
                        );
                }
            }
        }