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)); }
public void Write(Player currentPlayer) { using (PlayerScore.GetCurrentColor(currentPlayer)) Console.Write(current); Console.Write(" / "); using (PlayerScore.GetOtherColor(currentPlayer)) Console.Write(other); }
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(); } }