Beispiel #1
0
        /// <summary>
        /// 0.0d ~100.0d の範囲で、評価値を返します。数字が大きい方がグッドです。
        /// </summary>
        /// <param name="input_node"></param>
        /// <param name="playerInfo"></param>
        /// <returns></returns>
        public override void Keisan(out KyHyokaItem kyokumenScore, KyHandanArgs args)
        {
            double   score   = 0.0d;
            SkyConst src_Sky = args.Node.Value.ToKyokumenConst;

            //
            // どの駒(のある場所)が
            // 指定のマスより、どれぐらい離れているか(距離)
            //
            int kyori = Util_KomanoKyori.GetKyori(args.TenonagareGenjo.Masu, args.TenonagareGenjo.Koma1.Masu);

            score = 100.0d - 3.0d * kyori;//てきとーな数字です。


            //// ログ
            //{
            //    string move = Converter04.Move_ToString_ForLog(args.Input_node.Key);// どの指し手の局面で
            //    ((ShogiEngine)args.Owner).Log_Engine.WriteLine_AddMemo("駒[" + Haiyaku184Array.Name[(int)koma.Haiyaku].Trim() + "(No." + (int)((Atamanosumi)args.atamanosumi).Finger + ")]が、マス[" + Converter04.Masu_ToKanji(((Atamanosumi)args.Input_atamanosumi).Masu) + "]を目指したいんだぜ~☆。指し手が[" + move + "]なら、距離は[" + kyori + "]、スコアは[" + score + "]だぜ☆");
            //}

            string meisai = "";

#if DEBUG
            // 明細
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("100.0d - 3.0d * (距離 " + kyori + ")");
                meisai = sb.ToString();
            }
#endif

            kyokumenScore = new KyHyoka100limitItemImpl(args.TenonagareGenjo.ScoreKeisu, score, meisai);
        }
Beispiel #2
0
        /// <summary>
        /// 0.0d ~100.0d の範囲で、評価値を返します。数字が大きい方がグッドです。
        /// </summary>
        /// <param name="input_node"></param>
        /// <param name="playerInfo"></param>
        /// <returns></returns>
        public override void Keisan(out KyHyokaItem kyokumenScore, KyHandanArgs args)
        {
            double   score   = 0.0d;
            SkyConst src_Sky = args.Node.Value.ToKyokumenConst;

            //
            // 指定された駒。
            //
            RO_Star_Koma koma1 = args.TenonagareGenjo.Koma1;

            if (Okiba.ShogiBan != Util_Masu.Masu_ToOkiba(koma1.Masu))
            {
                // 指定された駒が将棋盤の上になければ、無視。
                goto gt_EndMethod;
            }

            //
            // 初期位置にいると、点数が低いものとします。
            //
            if (koma1.Masu == args.TenonagareGenjo.Masu)
            {
                score = 0.0d;
            }
            else
            {
                score = 100.0d;
            }

            ////
            //// 先手から見た盤に回転。
            ////
            //SyElement komaMasu = Util_Masu.BothSenteView(koma1.Masu, koma1.Pside);
            //int dan;
            //Util_MasuNum.MasuToDan(komaMasu, out dan);

gt_EndMethod:
            string meisai = "";

#if DEBUG
            // 明細
            {
                StringBuilder sb = new StringBuilder();
                // 初期位置にいると、点数が低いものとします。
                if (koma1.Masu == args.TenonagareGenjo.Masu)
                {
                    sb.Append("(初期位置 0.0d)");
                }
                else
                {
                    sb.Append("(初期位置から離れている 100.0d)");
                }
                meisai = sb.ToString();
            }
#endif
            kyokumenScore = new KyHyoka100limitItemImpl(args.TenonagareGenjo.ScoreKeisu, score, meisai);
        }
Beispiel #3
0
        /// <summary>
        /// レッツ☆判断!
        ///
        /// (1)ノードは、局面であるとともに、点数を覚えておくこともできます。
        /// (2)考え方の条件を指定します。
        /// (3)このメソッドは、「指定の駒が、指定のマスより、どれぐらい離れているか」で点数付けします。
        /// (4)ノードに、点数を設定します。
        /// </summary>
        public KyHyokaItem LetHandan(
            Tenonagare tenonagare,
            KifuNode node,
            PlayerInfo playerInfo
            )
        {
            KyHyokaItem scoreExp;

            if (this.KyHyokas.ContainsKey(tenonagare.Name))
            {
                this.KyHyokas[tenonagare.Name].Keisan(out scoreExp, new KyHandanArgsImpl(tenonagare, node, playerInfo));
            }
            else
            {
                scoreExp = new KyHyoka100limitItemImpl(1.0d, 0.0d, "ヌル");
            }

            return(scoreExp);
        }
Beispiel #4
0
        /// <summary>
        /// 0.0d ~100.0d の範囲で、評価値を返します。数字が大きい方がグッドです。
        /// </summary>
        /// <param name="input_node"></param>
        /// <param name="playerInfo"></param>
        /// <returns></returns>
        public override void Keisan(out KyHyokaItem kyokumenScore, KyHandanArgs keisanArgs)
        {
            Util_Lua_KifuWarabe.Perform("score_kimagure");


            string meisai = "";
            double score;

#if DEBUG
            // 明細
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("きまぐれ ");
                sb.Append(Util_Lua_KifuWarabe.Score);
                meisai = sb.ToString();
                score  = Util_Lua_KifuWarabe.Score;
            }
#else
            score = LarabeRandom.Random.NextDouble() * 100.0d;
#endif


            kyokumenScore = new KyHyoka100limitItemImpl(keisanArgs.TenonagareGenjo.ScoreKeisu, score, meisai);
        }