示例#1
0
文件: Client.cs 项目: Castux/onitama
    public void Setup(int ttsize, int threads)
    {
        // Who are we?

        var tmp = server.Receive();

        us = tmp == "You are Top" ? Player.Top : Player.Bottom;

        Console.WriteLine("We are " + us);

        // What are the cards?

        tmp = server.Receive();
        var match = Regex.Match(tmp, @"Cards: (\w+),(\w+),(\w+),(\w+),(\w+)");

        if (!match.Success)
        {
            Console.WriteLine("Failed at: " + tmp);
            return;
        }

        var cardNames = new List <string>();

        for (int i = 1; i < match.Groups.Count; i++)
        {
            cardNames.Add(match.Groups[i].Value);
        }

        Console.WriteLine("Cards are " + string.Join(", ", cardNames));

        // Who starts?

        tmp = server.Receive();
        var startPlayer = tmp == "Top starts" ? Player.Top : Player.Bottom;

        Console.WriteLine("Starting player is " + startPlayer);

        // Setup game

        var board = Board.FromString("ttTtt ..... ..... ..... bbBbb");
        var cards = CardState.FromNames(cardNames[0], cardNames[1], cardNames[2], cardNames[3], cardNames[4]);

        game = new GameState(board, cards, startPlayer);

        // Power up the THINK MACHINE

        solver = new ThreadedSolver(threads, ttsize);
    }
示例#2
0
文件: Tester.cs 项目: Castux/onitama
    public static void Main(string[] args)
    {
        // Arguments parsing

        if (args.Length < 7)
        {
            Console.WriteLine("Usage: mono onitamaTester.exe <board> <cards> <startPlayer> <depth> <timeout> <ttsize> <threads>");
            Exit();
        }

        var boardString       = args[0];
        var cards             = args[1];
        var startPlayerString = args[2];

        if (boardString == "default")
        {
            boardString = "ttTtt...............bbBbb";
        }

        var board = Board.FromString(boardString);

        var match = Regex.Match(cards, @"(\w+),(\w+),(\w+),(\w+),(\w+)");

        if (!match.Success)
        {
            Console.WriteLine("Failed to parse cards: " + cards);
            Exit();
        }

        var cardNames = new List <string>();

        for (int i = 1; i < match.Groups.Count; i++)
        {
            cardNames.Add(match.Groups[i].Value);
        }

        var cardState = CardState.FromNames(cardNames[0], cardNames[1], cardNames[2], cardNames[3], cardNames[4]);

        var startPlayer = startPlayerString.ToLower() == "top" ? Player.Top : Player.Bottom;

        var gameState = new GameState(board, cardState, startPlayer);

        Console.WriteLine(gameState);

        // Solver arguments

        var depth   = int.Parse(args[3]);
        var timeout = TimeSpan.FromSeconds(int.Parse(args[4]));
        var ttsize  = int.Parse(args[5]);

        Console.WriteLine("Depth: {0}, timeout: {1}, TT size: {2}", depth, timeout, ttsize);

        // GOGOGO

        var numThreads = int.Parse(args[6]);

        Console.WriteLine("Using {0} threads", numThreads);

        var solver = new ThreadedSolver(numThreads, ttsize);

        solver.Run(gameState, depth, timeout);

        var best = solver.Result(gameState);

        Console.WriteLine("Best move: {0}, value {1}, depth {2}", best.move, best.value, best.depth);

        Exit();
    }