Beispiel #1
0
            GameMove GetMove(bool best)
            {
                var moves         = tree.Keys;
                var possibleMoves = moves.Select(k => Tuple.Create(k, k.Worth())).Order(pr => pr.Item2);

                if (best)
                {
                    return(possibleMoves.First().Item1);
                }
                else
                {
                    int pos = rng.Next(possibleMoves.Count());
                    return(possibleMoves.Nth(pos).Item1);
                }
                return(GameMove.Random(board));
            }
Beispiel #2
0
            public GameMove GetMove(GameBoard board, GameBoard.Player player, bool best)
            {
                //Get stored moves for this board position with their associated worthiness values
                var moves         = tree.ContainsKey(board.Key) ? tree[board.Key] : new Dictionary <int, Tuple <GameMove, MoveStats> >();
                var possibleMoves = moves.Select(kvp => Tuple.Create(kvp.Key, kvp.Value.Item1, kvp.Value.Item2.Worth())).OrderByDescending(pr => pr.Item3);

                if (possibleMoves.Count() == 0)
                {
                    return(GameMove.Random(board, Game.MoveFromPlayer(player)));
                }
                if (best)
                {
                    //Get Best Move
                    return(possibleMoves.First().Item2);
                }
                else
                {
                    // get nth move in order of decreasing worth
                    int pos = rng.Next(possibleMoves.Count());
                    return(possibleMoves.ElementAt(pos).Item2);
                }
                //return GameMove.Random(board, Game.MoveFromPlayer(player));
            }