public GameManagmentUI() { PlugableHumanPlayer = new ConsolePlayer(); Model = new BackgammonModel(); BoardUI = new Pawn[12, 12]; }
// --- with authentication public BackgammonModel GetBackgammonModel(string ticket) { lock (mutex) { var options = GetOptions(); var ret = new BackgammonModel { State = GetState(), AllUsers = GetAllUsers(), IsBoardFull = userTickets.Count == 2 }; var ctx = GetContext(ticket); if (ctx != null) { ret.CurrentUser = GetCurrentUser(ctx); } if (board != null) { ret.Board = new BoardModel(); // board options and status ret.Board.WhitePlayer = board.WhitePlayer; ret.Board.BlackPlayer = board.BlackPlayer; ret.Board.GameOver = board.GameOver; ret.Board.GameStarted = board.GameStarted; ret.Board.NextGameRequested = board.NextGameRequested; ret.Board.CurrentColor = ConvertCheckerColor(board.CurrentColor); // reasons for game over and the winner ret.Board.GiveUp = board.GiveUp; ret.Board.Gammon = board.Gammon; ret.Board.Backgammon = board.Backgammon; if (board.Winner.HasValue) { ret.Board.Winner = board.Winner.Value == CheckerColor.White ? ret.Board.WhitePlayer : ret.Board.BlackPlayer; } ret.Board.HasStartRoll = false; ret.Board.CurrentRollNumbers = new List <int>(); ret.Board.RemainingRollNumbers = new List <int>(); ret.Board.DoubleRoll = null; ret.Board.Items = new List <ItemModel>(); ret.Board.Moves = new List <MoveModel>(); if (!board.GameStarted) { // start rolls var playerColor = ctx != null?GetPlayerColor(ctx.Name) : CheckerColor.White; var opponentColor = GetOpponentColor(playerColor); var startRollPlayer = board.GetStartRollNumber(playerColor); var startRollOpponent = board.GetStartRollNumber(opponentColor); ret.Board.HasStartRoll = startRollPlayer.HasValue; if (startRollPlayer.HasValue) { ret.Board.CurrentRollNumbers.Add(startRollPlayer.Value); } else if (startRollOpponent.HasValue) { ret.Board.CurrentRollNumbers.Add(startRollOpponent.Value); } else if (board.CurrentRoll != null) { ret.Board.DoubleRoll = board.CurrentRoll.Number1; } } else // game started { if (board.CurrentRoll != null) { // current rolls and remaining rolls ret.Board.CurrentRollNumbers.Add(board.CurrentRoll.Number1); ret.Board.CurrentRollNumbers.Add(board.CurrentRoll.Number2); ret.Board.RemainingRollNumbers.AddRange(board.GetRemainingRollNumbers()); } // moves foreach (var move in board.GetAllMoves()) { ret.Board.Moves.Add(new MoveModel { From = move.Item1, To = move.Item2 }); } } // items foreach (var item in board.GetItems()) { ret.Board.Items.Add(new ItemModel { Color = ConvertCheckerColor(item.Color), Count = item.Count, Position = item.Position }); } } return(ret); } }