示例#1
0
文件: Program.cs 项目: dedale/wordox
        private Rack ReadRack(IList <char> list, Player current)
        {
            string newRack = null;

            while (!Rack.Check(newRack))
            {
                using (DisposableColor.Prompt)
                    Console.Write("rack? ");
                if (list.Count > 0)
                {
                    Console.Write("[");
                    using (PlayerScore.GetCurrentColor(current))
                        Console.Write(new string(list.ToArray()));
                    Console.Write("] ");
                }
                using (PlayerScore.GetCurrentColor(current))
                    newRack = GetNewRack(graph, list, ReadLine());
            }
            using (new DisposableColor(ConsoleColor.White))
                Console.Write("rack:");
            using (PlayerScore.GetCurrentColor(current))
                Console.WriteLine(" " + newRack);
            Console.WriteLine();
            return(new Rack(newRack));
        }
示例#2
0
文件: Score.cs 项目: dedale/wordox
 public void Write(Player currentPlayer)
 {
     using (PlayerScore.GetCurrentColor(currentPlayer))
         Console.Write(current);
     Console.Write(" / ");
     using (PlayerScore.GetOtherColor(currentPlayer))
         Console.Write(other);
 }
示例#3
0
文件: Program.cs 项目: dedale/wordox
        public void Run()
        {
            Rack rack = null;

            while (true)
            {
                try
                {
                    bool skipped = false;
                    var  pending = new List <char>();
                    while (!board.Score.Other.Wins)
                    {
                        board.Write();
                        Console.WriteLine();

                        if (!skipped)
                        {
                            rack = ReadRack(pending, board.Current);
                        }
                        skipped = false;
                        PlayPath move = ReadMove(board, rack);
                        if (move == null)
                        {
                            board   = board.Skip();
                            skipped = true;
                            continue;
                        }
                        using (PlayerScore.GetCurrentColor(board.Current))
                            move.Write();
                        board = board.Play(move);
                        pending.Clear();
                        pending.AddRange(move.Pending);

                        bool vortex = false;
                        foreach (LetterPlay lp in move.Played)
                        {
                            vortex |= lp.Cell.IsVortex;
                        }
                        if (vortex)
                        {
                            board.Write();
                            Console.WriteLine();
                            board = board.Clear();
                            pending.Clear();
                        }
                    }
                    board.Write();
                    rack = null;
                    using (new DisposableColor(PlayerScore.GetColor(board.Other)))
                        Console.WriteLine("{0} wins", board.Other);
                    Console.WriteLine();
                }
                catch (GiveUpException)
                {
                    if (board.IsEmpty && rack == null)
                    {
                        return;
                    }
                    rack = null;
                }
                board = new Board();
            }
        }