コード例 #1
0
        /* Alternative development for introducing errors to play.
         * private List<PlayHint> Errorify(GameState gamestate, List<PlayHint> play_hints)
         * {
         *      if (play_hints.Count <= 1)
         *              return play_hints;
         *
         *      double best_equity = play_hints[0].Equity;
         *
         *      double diff = best_equity - play_hints[1].Equity;
         *      if (diff > 0.015)
         *              return play_hints;
         *
         *      List<PlayHint> swapped = new List<PlayHint>();
         *
         *      double doubtful = 0.04;
         *      double bad = 0.08;
         *      double very_bad = 0.16;
         *
         *      // Handle special cases like 6 or 5-prime completion, bearoff, hitting
         *
         *      for (int i = 1; i < play_hints.Count; i++)
         *      {
         *              diff = best_equity - play_hints[i].Equity;
         *
         *      }
         *
         *      return swapped;
         * }*/

        public override List <PlayHint> PlayHint(GameState gamestate, int max_hints)
        {
            Stopwatch sw = Stopwatch.StartNew();

            if (gamestate.Board.IsPureRace() && gamestate.Board.IsBearoff(gamestate.PlayerOnRoll))
            {
                List <PlayHint> play_hints = gnubg.PlayHint(gamestate, max_hints);

                for (int i = 0; i < play_hints.Count; i++)
                {
                    bool all_bearoffs = true;
                    foreach (Move move in play_hints[i].Play)
                    {
                        if (!move.IsBearOff)
                        {
                            all_bearoffs = false;
                            break;
                        }
                    }

                    if (all_bearoffs)
                    {
                        PlayHint tmp = play_hints[i];
                        play_hints[i] = play_hints[0];
                        play_hints[0] = tmp;
                    }
                }

                Console.WriteLine("[Play Hints] " + sw.ElapsedMilliseconds + "ms.");

                return(play_hints);
            }

            List <PlayHint> hints = gnubg.PlayHint(gamestate, max_hints);

            Console.WriteLine("[Play Hints] " + sw.ElapsedMilliseconds + "ms.");

            return(hints);
        }
コード例 #2
0
        public override PlayHint PlayHint(GameState gamestate)
        {
            if (gamestate.Board.IsPureRace() && gamestate.Board.IsBearoff(gamestate.PlayerOnRoll))
            {
                List <PlayHint> play_hints = gnubg.PlayHint(gamestate, 500);

                foreach (PlayHint play_hint in play_hints)
                {
                    bool all_bearoffs = true;
                    foreach (Move move in play_hint.Play)
                    {
                        if (!move.IsBearOff)
                        {
                            all_bearoffs = false;
                            break;
                        }
                    }

                    if (all_bearoffs)
                    {
                        return(play_hint);
                    }
                }

                // Didn't find anything qualifying, just return the first.
                return(play_hints[0]);
            }

            Stopwatch sw = Stopwatch.StartNew();

            PlayHint hint = gnubg.PlayHint(gamestate);

            Console.WriteLine("[Play Hint] " + sw.ElapsedMilliseconds + "ms.");

            return(hint);
        }