예제 #1
0
        /// <summary>
        /// この左上
        /// </summary>
        /// <param name="ms"></param>
        /// <param name="tb"></param>
        /// <returns></returns>
        static void TasuKonoHidariue(Piece km, Masu ms)
        {
            switch (Med_Koma.KomaToTaikyokusya(km))
            {
            case Taikyokusya.T1:
                if (!BitboardsOmatome.YomiBitboardsOmatome.IsIntersect_UeHajiDan(ms) && !BitboardsOmatome.YomiBitboardsOmatome.IsIntersect_HidariHajiSuji(ms))
                {
                    Masu ms_tmp = ms - PureSettei.banYokoHaba - 1;
                    if (Conv_Masu.IsBanjo(ms_tmp))
                    {
                        BitboardsOmatome.KomanoUgokikataYk00.StandupElement(km, ms, ms_tmp);
                    }
                }
                break;

            case Taikyokusya.T2:
                if (!BitboardsOmatome.YomiBitboardsOmatome.IsIntersect_SitaHajiDan(ms) && !BitboardsOmatome.YomiBitboardsOmatome.IsIntersect_MigiHajiSuji(ms))
                {
                    Masu ms_tmp = ms + PureSettei.banYokoHaba + 1;
                    if (Conv_Masu.IsBanjo(ms_tmp))
                    {
                        BitboardsOmatome.KomanoUgokikataYk00.StandupElement(km, ms, ms_tmp);
                    }
                }
                break;

            default: break;
            }
        }
예제 #2
0
        /// <summary>
        /// 駒を打った指し手☆(^▽^)
        /// 空き升に打ち込む前提だぜ☆(^~^)!
        /// </summary>
        /// <param name="ms_dst"></param>
        /// <param name="mkUtta"></param>
        /// <param name="natta"></param>
        /// <returns></returns>
        public static Move ToMove01cUtta(Masu ms_dst, MotigomaSyurui mkUtta)
        {
            Debug.Assert(MotigomaSyurui.Yososu != mkUtta, "");

            // バリュー
            int v = 0;

            // 元筋と元段☆(^▽^)「打」のときは何もしないぜ☆(^▽^)

            // 先筋と先段☆(^▽^)
            AbstractConvMove.SetDstMasu_WithoutErrorCheck(ref v, ms_dst);


            //必ず指定されているはず☆ if (MotiKomasyurui.Yososu != mkUtta)
            {
                // 変換(列挙型→ビット)
                // ぞう 0 → 1
                // きりん 1 → 2
                // ひよこ 2 → 3
                // ~中略~
                // いのしし 6 → 7
                // なし 7 → 0
                // 1 足して 8 で割った余り☆
                v |= (((int)mkUtta + 1) % Conv_MotigomaSyurui.SETS_LENGTH) << (int)MoveShift.UTTA_KOMASYURUI;
            }

            // 打ったときは成れないぜ☆(^▽^)

            return((Move)v);
        }
예제 #3
0
        /// <summary>
        /// 桂馬跳び左
        /// </summary>
        /// <param name="ms"></param>
        /// <param name="tb"></param>
        /// <returns></returns>
        static void TasuKeimatobiHidari(Piece km, Masu ms)
        {
            Taikyokusya tai = Med_Koma.KomaToTaikyokusya(km);

            if (!BitboardsOmatome.YomiBitboardsOmatome.IsIntersect_UsagigaHidariniToberu(tai, ms))
            {
                switch (tai)
                {
                case Taikyokusya.T1:
                {
                    Masu ms_tmp = ms - 2 * PureSettei.banYokoHaba - 1;
                    if (Conv_Masu.IsBanjo(ms_tmp))
                    {
                        BitboardsOmatome.KomanoUgokikataYk00.StandupElement(km, ms, ms_tmp);
                    }
                }
                break;

                case Taikyokusya.T2:
                {
                    Masu ms_tmp = ms + 2 * PureSettei.banYokoHaba + 1;
                    if (Conv_Masu.IsBanjo(ms_tmp))
                    {
                        BitboardsOmatome.KomanoUgokikataYk00.StandupElement(km, ms, ms_tmp);
                    }
                }
                break;

                default: break;
                }
            }
        }
예제 #4
0
        /// <summary>
        /// 2017-04-19 作成
        ///
        /// パースに失敗してもエラーではない。
        /// </summary>
        /// <param name="line"></param>
        /// <param name="caret"></param>
        /// <param name="out_ms"></param>
        /// <returns></returns>
        public static bool MatchMasu
            (string line, ref int caret, out Masu out_ms
#if DEBUG
            , IDebugMojiretu dbg_reigai
#endif
            )
        {
            Match m = Itiran_FenParser.GetMasuPattern(PureSettei.fenSyurui).Match(line, caret);

            if (m.Success)
            {
                // キャレットを進める
                Util_String.SkipMatch(line, ref caret, m);

                int suji = LisInt.FenSuji_Int(PureSettei.fenSyurui, m.Groups[1].Value);
                int dan  = LisInt.FenDan_Int(PureSettei.fenSyurui, m.Groups[2].Value);

                // 升を返す
                out_ms = Conv_Masu.ToMasu(suji, dan);

                return(true);
            }
            else
            {
                // 該当なし(エラーではない)
                out_ms = Conv_Masu.masu_error;
                return(false);
            }
        }
예제 #5
0
        public static void Setumei_Discovered(Masu ms_removed, StringBuilder hyoji)
        {
            Piece[] kmHairetu_control;
            PureMemory.gky_ky.yomiKy.TryInControl(ms_removed, out kmHairetu_control);

            Bitboard bb_relative = new Bitboard();//関連のある飛び利き駒

            // 飛び利きを計算し直す
            foreach (Piece km_var in kmHairetu_control)
            {
                if (Piece.Yososu == km_var)
                {
                    break;
                }

                // 駒の居場所
                Bitboard bb_ibasho = new Bitboard();
                PureMemory.gky_ky.yomiKy.yomiShogiban.yomiIbashoBan.ToSet_Koma(km_var, bb_ibasho);

                Masu ms_ibasho;
                while (bb_ibasho.Ref_PopNTZ(out ms_ibasho))
                {
                    bb_relative.Standup(ms_ibasho);
                }
            }

            Setumei_Bitboard("関連する飛び利き駒", bb_relative, hyoji);
        }
예제 #6
0
 public static bool IsLegalMove(Koma km, Masu dstMs, Masu attackerMs, Shogiban shogiban)
 {
     // KomanoUgokikata komanoUgokikata
     return(shogiban.GetKomanoUgokikata(km, attackerMs).IsIntersect( // 相手の利き
                dstMs                                                // 調べる升
                ));
 }
예제 #7
0
        public static bool MatchSrcMs(string line, ref int caret, out Masu out_ms
#if DEBUG
                                      , IDebugMojiretu hyoji
#endif
                                      )
        {
            Match m = GetSrcMsPattern(PureSettei.fenSyurui).Match(line, caret);

            if (m.Success)
            {
                // キャレットを進めます
                Util_String.SkipMatch(line, ref caret, m);
                string ms_moji = m.Groups[1].Value;

                int caret2 = 0;
                return(LisMasu.MatchMasu(ms_moji, ref caret2, out out_ms
#if DEBUG
                                         , hyoji
#endif
                                         ));
            }
            else
            {
                out_ms = Conv_Masu.masu_error;
                return(false);
            }
        }
예제 #8
0
        public static void Setumei_Discovered(Masu ms_removed, Kyokumen.Sindanyo kys, StringBuilder syuturyoku)
        {
            kys.TryInControl(ms_removed, out Koma[] kmHairetu_control);

            Bitboard bb_relative = new Bitboard();//関連のある飛び利き駒

            // 飛び利きを計算し直す
            foreach (Koma km in kmHairetu_control)
            {
                if (Koma.PieceNum == km)
                {
                    break;
                }

                // 駒の居場所
                Bitboard bb_ibasho = new Bitboard();
                kys.ToSetIbasho(km, bb_ibasho);
                while (bb_ibasho.Ref_PopNTZ(out Masu ms_ibasho))
                {
                    bb_relative.Standup(ms_ibasho);
                }
            }

            Setumei_1Bitboard("関連する飛び利き駒", bb_relative, syuturyoku);
        }
예제 #9
0
 /// <summary>
 /// 自殺手チェック☆
 /// 相手番の利きに入っていたら真顔で真だぜ☆(^▽^)
 /// </summary>
 /// <param name="gky"></param>
 /// <param name="targetMs"></param>
 /// <returns></returns>
 public static bool IsJisatusyu(Masu targetMs)
 {
     return(PureMemory.gky_ky.yomiKy.yomiShogiban.yomiKikiBan.IsIntersect_KikiZenbu(
                PureMemory.kifu_aiteban, // 相手の駒の利き☆
                targetMs                 //調べる升
                ));
 }
예제 #10
0
        /// <summary>
        /// Number Of Trailing Zeros
        /// 右から見て最初に立っているビットの桁を返す。そのビットは 0 にするぜ☆
        ///
        /// ビットボードが変更されるという目印に Ref_ と関数名の頭に付けたぜ☆(^~^)
        /// </summary>
        /// <param name="x">任意の2進数</param>
        /// <param name="out_result">右から数えた桁。該当しない場合、NTZ_NOT_FOUND</param>
        /// <returns></returns>
        public bool Ref_PopNTZ(out Masu out_result)
        {
            if (IsEmpty())
            {
                out_result = NTZ_FOUND_ZERO;
                return(false);
            }

            if (0UL < value063)
            {
                //ulong bbRight = (this.Value063 & -this.Value063);
                ulong bbRight = (value063 & (~value063 + 1));
                ulong i       = (bbRight * 0x03F566ED27179461UL) >> 58;

                out_result = (Masu)m_ntzTable_[i];
                Sitdown(out_result);//(2017-04-22 Add)立っているビットを降ろすぜ☆
                return(true);
            }

            {
                //ulong bbRight = (ulong)(this.Value64127 & -this.Value64127);
                ulong bbRight = (value64127 & (~value64127 + 1));
                ulong i       = (bbRight * 0x03F566ED27179461UL) >> 58;

                //out_result = (Masu)m_ntzTable_[i]; // FIXME: 64 足し忘れてないか?
                out_result = (Masu)m_ntzTable_[i] + MASU64; // FIXME: 64 足し忘れてないか?
                Sitdown(out_result + MASU64);
                return(true);
            }
        }
예제 #11
0
        /// <summary>
        /// ナナメ段を抜き出してビットボードにします。
        /// </summary>
        /// <param name="yomiSg"></param>
        /// <param name="tai"></param>
        /// <param name="kikiDir"></param>
        /// <param name="ms"></param>
        /// <returns></returns>
        public static Bitboard GetOjhsh(
            TobikikiDirection kikiDir,
            Masu ms
            )
        {
            bool           sakasa_forZHs  = Conv_TobikikiDirection.sakasa_forZHs[(int)kikiDir];
            OjamaBanSyurui ojamaBanSyurui = Conv_TobikikiDirection.ojamaBanSyuruiItiran[(int)kikiDir];

            int[] masuSpans = new int[]
            {
                MasSpanKT,
                MasSpanKY,
                MasSpanKT,
                MasSpanZHa,
                MasSpanZHs,
            };
            int masuSpan = masuSpans[(int)kikiDir];

            int  nanamedanD;
            Masu atama_reverseRotateChikanhyo;
            Masu atama_noRotateMotohyo;
            Masu siri_noRotateMotohyo;
            int  haba;

            FromMasu(kikiDir, masuSpan, sakasa_forZHs, ms,
                     out nanamedanD,
                     out atama_reverseRotateChikanhyo,
                     out atama_noRotateMotohyo,
                     out siri_noRotateMotohyo,
                     out haba
                     );
#if DEBUG
            PureMemory.ssssDbg_sakasa_forZHs  = sakasa_forZHs;
            PureMemory.ssssDbg_ojamaBanSyurui = ojamaBanSyurui;
            PureMemory.ssssDbg_masuSpan       = masuSpan;
            PureMemory.ssssDbg_nanamedanD     = nanamedanD;
            PureMemory.ssssDbg_atama_reverseRotateChikanhyo = atama_reverseRotateChikanhyo;
            PureMemory.ssssDbg_atama_noRotateMotohyo        = atama_noRotateMotohyo;
            PureMemory.ssssDbg_siri_noRotateMotohyo         = siri_noRotateMotohyo;
            PureMemory.ssssDbg_haba = haba;
#endif

            if (ojamaBanSyurui == OjamaBanSyurui.None)
            {
                // 横型と想定
                // 本将棋の場合、9一が再下位ビット
                // [ 0][ 1][ 2][ 3][ 4][ 5][ 6][ 7][ 8]
                // [ 9]...
                Bitboard bb = PureMemory.gky_ky.yomiKy.yomiShogiban.yomiIbashoBan.CloneKomaZenbuBothTai();
#if DEBUG
                PureMemory.ssssDbg_bb_ojamaTai = bb.Clone();
#endif
                return(OjamaBan.YomiOjamaBan.Nukidasi_1(atama_reverseRotateChikanhyo, haba, bb));
            }
            else
            {
                OjamaBan.YomiOjamaBan yomiOjamaBan = PureMemory.gky_ky.yomiKy.yomiShogiban.GetYomiOjamaBan(ojamaBanSyurui);
                return(yomiOjamaBan.Nukidasi(atama_reverseRotateChikanhyo, haba));
            }
        }
예제 #12
0
        public static string ToSetumei_New(Masu ms)
        {
            StringBuilder tmp = new StringBuilder();

            AppendSetumei(ms, tmp);
            return(tmp.ToString());
        }
예제 #13
0
        /// <summary>
        /// 項目番号 K を返すぜ☆(^~^)
        /// </summary>
        /// <returns>該当なければ -1</returns>
        public static int GetKoumokuBango_Banjo(Kyokumen ky, Koma km_jissai, Masu ms_jissai)
        {
            return(-1);
            //// 盤上の駒1
            //int iMs_jissai = (int)ms_jissai;
            //if (Conv_Koma.IsOk(km_jissai))
            //{
            //    // 盤上のパラメーター

            //    // まず、大きく10区画「RZKHNrzkhn」に分かれているので、
            //    // komaArea = ( 0 ~ 10 ) に分けるぜ☆
            //    int komaArea;
            //    switch (km_jissai)
            //    {
            //        case Koma.King1: komaArea = 0; break; // area = 0 の場合、 0 以上 1 未満だぜ☆(^~^)
            //        case Koma.Bishop1: komaArea = 1; break;
            //        case Koma.Rook1: komaArea = 2; break;
            //        case Koma.Pawn1: komaArea = 3; break;
            //        case Koma.ProPawn1: komaArea = 4; break;
            //        case Koma.King2: komaArea = 5; break;
            //        case Koma.Bishop2: komaArea = 6; break;
            //        case Koma.Rook2: komaArea = 7; break;
            //        case Koma.Pawn2: komaArea = 8; break;
            //        case Koma.ProPawn2: komaArea = 9; break;
            //        default: throw new Exception("未定義の駒");
            //    }

            //    // K2 の方も、 K1 と同じように分かれているぜ☆(^▽^)
            //    return komaArea * KyokumenImpl.MASUS + iMs_jissai;
            //}

            //return -1;
        }
예제 #14
0
 /// <summary>
 /// 下側に自分の陣地がある視点の段番号だぜ☆(^▽^)
 /// 例:対局者1でも2でも、トライルールは らいおん が1段目に入ったときだぜ☆(^▽^)
 /// </summary>
 /// <param name="ms"></param>
 /// <returns></returns>
 public static int ToDanO1_JibunSiten(Taikyokusya tb, Masu ms)
 {
     if (tb == Taikyokusya.T1)
     {
         return(ToDanO1_WithoutErrorCheck((int)ms));
     }
     return(ToDanO1_WithoutErrorCheck(PureSettei.banHeimen - 1 - (int)ms));
 }
예제 #15
0
        void OkuKoma(Masu ms, Piece km)
        {
            ibashoBan_yk00.N240_OkuKoma(km, ms);

            ojamaBan_ha45.N240_OkuKoma(RotateChikanhyo.chikanHyo_ha45[(int)ms]);
            ojamaBan_hs45.N240_OkuKoma(RotateChikanhyo.chikanHyo_hs45[(int)ms]);
            ojamaBan_ht90.N240_OkuKoma(RotateChikanhyo.chikanHyo_ht90[(int)ms]);
        }
예제 #16
0
 /// <summary>
 /// 対人表示用☆(^~^)
 /// </summary>
 /// <param name="ms"></param>
 /// <returns></returns>
 public static int ToSuji_WithError(Masu ms)
 {
     if (Conv_Masu.IsBanjo(ms))
     {
         return(((int)ms) % PureSettei.banYokoHaba + 1);
     }
     return(Conv_Masu.ERROR_SUJI);
 }
예제 #17
0
 /// <summary>
 /// 対人表示用☆(^~^)
 /// </summary>
 /// <param name="ms"></param>
 /// <returns></returns>
 public static int ToDan_WithError(Masu ms)
 {
     if (Conv_Masu.IsBanjo(ms))
     {
         return(((int)ms) / PureSettei.banYokoHaba + 1);
     }
     return(Conv_Masu.ERROR_DAN);
 }
예제 #18
0
            public Bitboard Nukidasi(Masu atama, int haba)
            {
                Bitboard bb = CloneBB();

#if DEBUG
                PureMemory.ssssDbg_bb_ojamaTai = bb.Clone();
#endif
                return(Nukidasi_1(atama, haba, bb));
            }
예제 #19
0
    private void Update()
    {
        if (m_iMovableCount <= 0)
        {
            return;
        }

        if (true == m_playerPosition?.IsMoving)
        {
            return;
        }


        Masu.DIR dir = GetMoveDir();

        GameObject target_masu_object = m_masuCurrent.GetConnectedMasuObject(dir);

        if (target_masu_object != null)
        {
            Masu temp           = target_masu_object.GetComponent <Masu>();
            int  target_masu_id = temp.masu_id;
            if (0 < m_iMoveCount)
            {
                // 戻る
                if (target_masu_id == m_iMoveHistory[m_iMoveCount - 1])
                {
                    m_iMoveHistory[m_iMoveCount] = 0;
                    m_iMoveCount    -= 1;
                    m_iMovableCount += 1;
                }
                else
                {
                    m_iMoveCount    += 1;
                    m_iMovableCount -= 1;
                    m_iMoveHistory[m_iMoveCount] = target_masu_id;
                }
            }
            else
            {
                m_iMoveCount    += 1;
                m_iMovableCount -= 1;
                m_iMoveHistory[m_iMoveCount] = target_masu_id;
            }

            m_playerData.masu_id = target_masu_id;
            m_masuCurrent        = MasuManager.Instance.GetMasu(m_playerData.masu_id);
            m_evMovableCount.Invoke(m_iMovableCount);

            if (m_iMovableCount <= 0)
            {
                m_evMovableCount.Invoke(-1);
                OnMoveEnd.Invoke();
                OnMoveEnd = null;
            }
        }
    }
예제 #20
0
        /// <summary>
        /// 移動元の盤の升から、自分の駒を取るぜ☆(^▽^)
        /// </summary>
        /// <returns></returns>
        public static bool TryFail_SrcOff(
            Move ss,
            Masu ms_t0,
            Piece km_t0,
            Motigoma mk_t0,
            Masu ms_t1 // 移動先升
#if DEBUG
            , FenSyurui f
            , IDebugMojiretu dbg_reigai
#endif
            )
        {
            //────────────────────────────────────────
            // T1   [1]  移動元に 手番の駒 が在る
            //────────────────────────────────────────

            //────────────────────────────────────────
            // T1   [遷移]    移動元の 手番の駒 を除外する
            //────────────────────────────────────────
            {
                // TODO: 駒割りを評価値減らすならここだぜ☆(^~^)

                // FIXME: ここに問題のコードがあった★★★★★★★★★★★★★★★★★★★
            }

            //DoMove1( isSfen, ss, ssType, ref konoTeme, syuturyoku, out gt_EndMethod);


            // ローカル変数はグローバル変数に移動した。
            {
                // この下の HerasuBanjoKoma で指し手件数が動くようだ。

                // 盤上はこのステップが多い
                Debug.Assert(Conv_Koma.IsOk(km_t0), "km_t0 can not remove");
                if (PureMemory.gky_ky.shogiban.TryFail_TorinozokuKoma(
                        ms_t0, km_t0,
                        ms_t1, // (2017-05-02 22:19 Add)移動先の升(将来駒を置く升)を指定しておくぜ☆(^~^)
                        true
#if DEBUG
                        , dbg_reigai
#endif
                        ))
                {
                    return(Pure.FailTrue("TryFail_Torinozoku(2)"));
                }
                // 駒が無かった、というキャッシュは取らないぜ☆(^▽^)

                // この上の HerasuBanjoKoma で指し手件数が動くようだ。
            }

            //────────────────────────────────────────
            // T1   [2]      移動元に 手番の駒 が無い
            //────────────────────────────────────────

            return(Pure.SUCCESSFUL_FALSE);
        }
예제 #21
0
        /// <summary>
        /// 下側に自分の陣地がある視点の段番号だぜ☆(^▽^)
        /// 例:対局者1でも2でも、トライルールは らいおん が1段目に入ったときだぜ☆(^▽^)
        /// </summary>
        /// <param name="ms"></param>
        /// <returns></returns>
        public static int ToDan_JibunSiten(Option <Phase> optionalPhase, Masu ms, Kyokumen.Sindanyo kys)
        {
            var phase = optionalPhase.Unwrap();

            if (phase == Phase.Black)
            {
                return(Conv_Masu.ToDan_WithoutErrorCheck((int)ms));
            }
            return(Conv_Masu.ToDan_WithoutErrorCheck(kys.MASU_YOSOSU - 1 - (int)ms));
        }
예제 #22
0
            public Piece GetBanjoKoma(Taikyokusya tai, Masu ms)
            {
                Komasyurui ks;

                if (ExistsKoma(tai, ms, out ks))
                {
                    return(Med_Koma.KomasyuruiAndTaikyokusyaToKoma(ks, tai));
                }
                return(Piece.Kuhaku);
            }
예제 #23
0
 public bool Exists(Taikyokusya tai, Masu ms)
 {
     for (int iKm = 0; iKm < Conv_Koma.itiranTai[(int)tai].Length; iKm++)
     {
         if (valueKm[(int)Conv_Koma.itiranTai[(int)tai][iKm]].IsOn(ms))
         {
             return(true);
         }
     }
     return(false);
 }
예제 #24
0
 public void Standup(Masu masu)
 {
     if ((int)masu < MASU64)
     {
         m_value063_ |= 1UL << (int)masu;
     }
     else
     {
         m_value64127_ |= 1UL << ((int)masu - MASU64);
     }
 }
예제 #25
0
 public void Sitdown(Masu ms)// 立っているビットを降ろすぜ☆
 {
     if ((int)ms < MASU64)
     {
         m_value063_ &= ~0UL ^ (1UL << (int)ms); // 全ビット立ってるのが ~0UL
     }
     else
     {
         m_value64127_ &= ~0UL ^ (1UL << ((int)ms - MASU64));// 全ビット立ってるのが ~0UL
     }
 }
예제 #26
0
 public bool IsOff(Masu ms)
 {
     if ((int)ms < MASU64)
     {
         return(0UL == (value063 & (1UL << (int)ms)));
     }
     else
     {
         return(0UL == (value64127 & (1UL << ((int)ms - MASU64))));
     }
 }
예제 #27
0
 public bool IsIntersect(Masu ms)
 {
     if ((int)ms < MASU64)
     {
         return(0UL != (value063 & (1UL << (int)ms)));
     }
     else
     {
         return(0UL != (value64127 & (1UL << ((int)ms - MASU64))));
     }
 }
예제 #28
0
 public bool Exists(Masu ms)
 {
     for (int iTai = 0; iTai < Conv_Taikyokusya.itiran.Length; iTai++)
     {
         if (valueTai[iTai].IsOn(ms))
         {
             return(true);
         }
     }
     return(false);
 }
예제 #29
0
 public static void Setumei_Kiki(Kyokumen ky, Masu attackerMs, StringBuilder syuturyoku)
 {
     var(exists, optionalPhase) = ky.Shogiban.ExistsBBKomaZenbu(attackerMs);
     if (exists)
     {
         ky.Shogiban.ExistsBBKoma(optionalPhase, attackerMs, out Komasyurui ks);
         Util_Information.Setumei_1Bitboard("利き",
                                            Util_Application.Kiki_BB(Med_Koma.KomasyuruiAndTaikyokusyaToKoma(ks, optionalPhase), attackerMs, ky.Shogiban)//利き
                                            , syuturyoku);
     }
 }
예제 #30
0
 public static void AppendLine_Data_Kyokumen(Kyokumen ky, int dan, StringBuilder syuturyoku)
 {
     syuturyoku.Append("│");
     for (int iMs_offset = 0; iMs_offset < Option_Application.Optionlist.BanYokoHaba; iMs_offset++)
     {
         Masu ms = (Masu)(dan * Option_Application.Optionlist.BanYokoHaba + iMs_offset);
         Koma km = ky.GetBanjoKoma(ms);
         Conv_Koma.Setumei(km, syuturyoku);
         syuturyoku.Append("│");
     }
     syuturyoku.AppendLine();
 }
예제 #31
0
 // マスをセットする。
 public void set_masu(int number, Masu masu)
 {
     dict_number_kara_masu[number] = masu;
 }