Exemplo n.º 1
0
        public static Dictionary <ShootingStarlightable, KyokumenWrapper> KomabetuMasusToMovebetuSky(
            List_OneAndMulti <Finger, SySet <SyElement> > sMs, SkyConst src_Sky, Playerside pside)
        {
            Dictionary <ShootingStarlightable, KyokumenWrapper> result = new Dictionary <ShootingStarlightable, KyokumenWrapper>();


            sMs.Foreach_Entry((Finger key, SySet <SyElement> value, ref bool toBreak) =>
            {
                RO_Star_Koma koma = Util_Koma.AsKoma(src_Sky.StarlightIndexOf(key).Now);


                foreach (SyElement dstMasu in value.Elements)
                {
                    ShootingStarlightable move = Util_Sky.New(
                        //key,
                        new RO_Star_Koma(pside, koma.Masu, koma.Haiyaku),
                        new RO_Star_Koma(pside, dstMasu, koma.Haiyaku),//FIXME:配役は適当。
                        PieceType.None
                        );

                    result.Add(move, new KyokumenWrapper(Util_Sasu.Sasu(src_Sky, key, dstMasu, pside)));
                }
            });


            return(result);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 取った駒を差替えます。
        ///
        /// 棋譜読取時用です。マウス操作時は、流れが異なるので使えません。
        /// </summary>
        public void AppendChildB_Swap(
            PieceType tottaSyurui,
            SkyConst src_Sky,
            string hint
            )
        {
            if (this.CountTesumi(this.CurNode) < 1)
            {
                // ルートしか無いなら
                goto gt_EndMethod;
            }

            if (null == src_Sky)
            {
                throw new Exception("ノードを追加しようとしましたが、指定されたnewSkyがヌルです。");
            }


            Playerside genTebanside = ((KifuNode)this.CurNode).Tebanside;
            // 現在のノードを削除します。そのとき、もともとのキー を覚えておきます。
            ShootingStarlightable motoKey = (ShootingStarlightable)this.PopCurrentNode().Key;

            // もともとのキーの、取った駒の種類だけを差替えます。
            RO_ShootingStarlight sasikaeKey = Util_Sky.New(motoKey.LongTimeAgo, motoKey.Now, tottaSyurui);//motoKey.Finger,

            // キーを差替えたノード
            Node <ShootingStarlightable, KyokumenWrapper> sasikaeNode = new KifuNodeImpl(sasikaeKey, new KyokumenWrapper(src_Sky), genTebanside);

            System.Diagnostics.Debug.Assert(!this.CurNode.ContainsKey_NextNodes(Util_Sky.ToSfenMoveText(sasikaeNode.Key)));


            // さきほど カレントノードを削除したので、
            // 今、カレントノードは、1つ前のノードになっています。
            // ここに、差替えたノードを追加します。
            this.CurNode.Add_NextNode(Util_Sky.ToSfenMoveText(sasikaeNode.Key), sasikaeNode);
            sasikaeNode.PreviousNode = this.CurNode;


            this.CurNode = sasikaeNode;

            Logger.Trace("リンクトリストの、最終ノードは差し替えられた hint=[" + hint + "] item=[" + Util_Sky.ToSfenMoveText(sasikaeKey) + "]");
            // memberName=[" + memberName + "] sourceFilePath=[" + sourceFilePath + "] sourceLineNumber=[" + sourceLineNumber + "]

gt_EndMethod:
            ;
        }