Exemple #1
0
        public Result_Ajimi Ajimi(SkyConst src_Sky)
        {
            Result_Ajimi result_Ajimi = Result_Ajimi.Empty;

            RO_Star_Koma koma1 = Util_Koma.AsKoma(src_Sky.StarlightIndexOf(Finger_Honshogi.SenteOh).Now);
            RO_Star_Koma koma2 = Util_Koma.AsKoma(src_Sky.StarlightIndexOf(Finger_Honshogi.GoteOh).Now);

            Logger.Trace("将棋サーバー「ではここで、王さまがどこにいるか確認してみましょう」");
            Logger.Trace("▲王の置き場=" + Util_Masu.GetOkiba(koma1.Masu));
            Logger.Trace("△王の置き場=" + Util_Masu.GetOkiba(koma2.Masu));

            if (Util_Masu.GetOkiba(koma1.Masu) != Okiba.ShogiBan)
            {
                // 先手の王さまが将棋盤上にいないとき☆
                result_Ajimi = Result_Ajimi.Lost_SenteOh;
            }
            else if (Util_Masu.GetOkiba(koma2.Masu) != Okiba.ShogiBan)
            {
                // または、後手の王さまが将棋盤上にいないとき☆
                result_Ajimi = Result_Ajimi.Lost_GoteOh;
            }
            else
            {
                result_Ajimi = Result_Ajimi.Empty;
            }

            return(result_Ajimi);
        }
Exemple #2
0
        public void Go(string btime, string wtime, string byoyomi, string binc, string winc)
        {
            // ┏━━━━サンプル・プログラム━━━━┓

            int latestTesumi = this.Game.Kifu.CountTesumi(this.Game.Kifu.CurNode); //現・手目済

            this.PlayerInfo.Playerside = this.Game.Kifu.CountPside(latestTesumi);  // 先後

            //#if DEBUG
            //                MessageBox.Show("["+latestTesumi+"]手目済 ["+this.owner.PlayerInfo.Playerside+"]の手番");
            //#endif

            SkyConst src_Sky = this.Game.Kifu.NodeAt(latestTesumi).Value.ToKyokumenConst;//現局面

            // + line
            Logger.Trace("将棋サーバー「" + latestTesumi + "手目、きふわらべ さんの手番ですよ!」 ");


            Result_Ajimi result_Ajimi = this.AjimiEngine.Ajimi(src_Sky);


            //------------------------------------------------------------
            // わたしの手番のとき、王様が 将棋盤上からいなくなっていれば、投了します。
            //------------------------------------------------------------
            //
            //      将棋GUI『きふならべ』用☆ 将棋盤上に王さまがいないときに、本将棋で go コマンドが送られてくることは無いのでは☆?
            //
            switch (result_Ajimi)
            {
            case Result_Ajimi.Lost_SenteOh:   // 先手の王さまが将棋盤上にいないとき☆
            case Result_Ajimi.Lost_GoteOh:    // または、後手の王さまが将棋盤上にいないとき☆
            {
                //------------------------------------------------------------
                // 投了
                //------------------------------------------------------------
                //
                // 図.
                //
                //      log.txt
                //      ┌────────────────────────────────────────
                //      ~
                //      │2014/08/02 2:36:21< bestmove resign
                //      │
                //

                // この将棋エンジンは、後手とします。
                // 20手目、投了  を決め打ちで返します。
                Playing.Send("bestmove resign");        //投了
            }
            break;

            default:    // どちらの王さまも、まだまだ健在だぜ☆!
            {
                //------------------------------------------------------------
                // 指し手のチョイス
                //------------------------------------------------------------
                bool enableLog  = false;
                bool isHonshogi = true;

                // 指し手を決めます。
                ShootingStarlightable bestMove = this.shogisasi.WA_Bestmove(
                    enableLog,
                    isHonshogi,
                    this.Game.Kifu,
                    this.PlayerInfo
                    );



                if (Util_Sky.isEnableSfen(bestMove))
                {
                    string sfenText = Util_Sky.ToSfenMoveText(bestMove);
                    Logger.Trace("(Warabe)指し手のチョイス: bestmove=[" + sfenText + "]" +
                                 " 棋譜=" + KirokuGakari.ToJapaneseKifuText(this.Game.Kifu));

                    Playing.Send("bestmove " + sfenText); //指し手を送ります。
                }
                else                                      // 指し手がないときは、SFENが書けない☆ 投了だぜ☆
                {
                    Logger.Trace("(Warabe)指し手のチョイス: 指し手がないときは、SFENが書けない☆ 投了だぜ☆ww(>_<)" +
                                 " 棋譜=" + KirokuGakari.ToJapaneseKifuText(this.Game.Kifu));

                    // 投了w!
                    Playing.Send("bestmove resign");
                }
            }
            break;
            }
            // ┗━━━━サンプル・プログラム━━━━┛
        }