Ejemplo n.º 1
0
        /// <summary>
        /// 毎回やるには重いが……☆(^~^)
        /// 局面を設定するぜ☆(^~^)
        /// </summary>
        public static void SetRule(
            GameRule gameRule,
            int banYokohaba,
            int banTatehaba,
            string banmen_z1,
            Dictionary <Motigoma, int> motigomaKaisiSettei
            )
        {
            StringBuilder hyoji = PureAppli.syuturyoku1;

            PureSettei.gameRule    = gameRule;
            PureSettei.banYokoHaba = banYokohaba;
            PureSettei.banTateHaba = banTatehaba;

            // 設定を決めたあと、局面の配置をする前に、ビットボードを作り直すぜ☆(^~^)
            Util_Control.UpdateRule(
#if DEBUG
                "Shogi34 SetRule"
#endif
                );

            // 局面のクリアー
            PureMemory.gky_ky.Tukurinaosi_ClearKyokumen();

            if (LisBanmen.TryFail_SetBanjo(
                    banmen_z1
#if DEBUG
                    , PureAppli.syuturyoku1
#endif
                    ))
            {
                throw new Exception(PureAppli.syuturyoku1.ToString());
            }

            // 持駒の枚数をセット☆(^~^)
            foreach (KeyValuePair <Motigoma, int> entry in motigomaKaisiSettei)
            {
                SetMotiKoma(entry.Key, entry.Value);
            }

            //────────────────────────────────────────
            // 現局面を、平手初期局面として登録します
            //────────────────────────────────────────
            MedKyokumen.TorokuHirate();
        }
Ejemplo n.º 2
0
        static PureMemory()
        {
            int taiLn = Conv_Taikyokusya.itiran.Length;

            #region 被王手判定
            // ビットボード
            hot_bb_checkerAr     = new Bitboard[taiLn];
            hot_bb_raion8KinboAr = new Bitboard[taiLn];
            hot_bb_nigemitiWoFusaideiruAiteNoKomaAr = new Bitboard[taiLn];
            hot_bb_nigereruAr = new Bitboard[taiLn];
            hot_bb_nigeroAr   = new Bitboard[taiLn];
            for (int iTai = 0; iTai < taiLn; iTai++)
            {
                hot_bb_checkerAr[iTai]     = new Bitboard();
                hot_bb_raion8KinboAr[iTai] = new Bitboard();
                hot_bb_nigemitiWoFusaideiruAiteNoKomaAr[iTai] = new Bitboard();
                hot_bb_nigereruAr[iTai] = new Bitboard();
                hot_bb_nigeroAr[iTai]   = new Bitboard();
            }

            hot_ms_raionAr             = new Masu[taiLn];
            hot_outeKomasCountAr       = new int[taiLn];
            hot_isNigerarenaiCheckerAr = new bool[taiLn];
            hot_raionCatchChosaAr      = new bool[taiLn];
            #endregion

            #region 指し手生成(シングルスレッドを想定)
            ssss_moveList             = new MoveList[PureMemory.MaxMoveDepth];
            ssss_moveListBad          = new MoveList[PureMemory.MaxMoveDepth];
            ssss_bbVar_idosaki_narazu = new Bitboard();
            ssss_bbVar_idosaki_nari   = new Bitboard();
            ssssTmp_bbVar_ibasho      = new Bitboard();

            ssss_bbBase_idosaki01_checker            = new Bitboard();
            ssss_bbBase_idosaki02_raionCatch         = new Bitboard();
            ssss_bbBase_idosaki03_nigeroTe           = new Bitboard();
            ssss_bbBase_idosaki04_try                = new Bitboard();
            ssss_bbBase_idosaki05_komaWoToruTe       = new Bitboard();
            ssss_bbBase_idosaki06_himodukiOteZasi    = new Bitboard();
            ssss_bbBase_idosaki07_suteOteZasi        = new Bitboard();
            ssss_bbBase_idosaki08_suteOteDa          = new Bitboard();
            ssss_bbBase_idosaki09_himodukiOteDa      = new Bitboard();
            ssss_bbBase_idosaki10_himodukiKanmanDa   = new Bitboard();
            ssss_bbBase_idosaki11_himodukiKanmanZasi = new Bitboard();
            ssss_bbBase_idosaki12_bottiKanmanZasi    = new Bitboard();
            ssss_bbBase_idosaki13_bottiKanmanDa      = new Bitboard();
            ssss_bbBase_idosaki14_suteKanmanZasi     = new Bitboard();
            ssss_bbBase_idosaki15_suteKanmanDa       = new Bitboard();

            ssss_movePickerWoNuketaBasho1 = "";

            for (int iFukasa = 0; iFukasa < PureMemory.MaxMoveDepth; iFukasa++)
            {
                ssss_moveList[iFukasa]    = new MoveList();
                ssss_moveListBad[iFukasa] = new MoveList();
            }
            #endregion

            #region ムーブス
            mvs_ssAr = new Move[KIFU_SIZE];
            #endregion
            #region 棋譜(コンピューター・プレイヤー同時に1つまで)
            kifu_syokiKyokumenFen = "";
            kifu_toraretaKsAr     = new Komasyurui[KIFU_SIZE];
            kifu_moveArray        = new Move[KIFU_SIZE];
            kifu_moveTypeArray    = new MoveType[KIFU_SIZE];
            // 手番☆(^~^)
            kifu_tebanAr_    = new Taikyokusya[KIFU_SIZE];
            kifu_aitebanAr_  = new Taikyokusya[KIFU_SIZE];
            kifu_nTebanAr_   = new int[KIFU_SIZE];
            kifu_nAitebanAr_ = new int[KIFU_SIZE];

            // 初期局面手番を未設定にしておいて、ResetTebanArray( ) すれば、手番配列の初期値が入るぜ☆(^~^)
            kifu_syokikyokumenTeban = Taikyokusya.Yososu;
            ResetTebanArray(Taikyokusya.T1);

            // 配列等の初期化が終わったあとで、手目をリセット
            ClearTeme(
                //kifu_syokikyokumenTeban
                );
            #endregion

            #region 現局面(棋譜カーソルが指している局面)(コンピューター・プレイヤー同時に1つまで)
            gky_kekka   = TaikyokuKekka.Karappo;
            gky_ky      = new Kyokumen();
            gky_hyokati = new Hyokati();
            Util_Control.UpdateRule(
#if DEBUG
                "static PureMemory"
#endif
                );
            #endregion

            #region 探索(tnsk)
            tnsk_kohoMove = Move.Toryo;
            #endregion
        }