示例#1
0
 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);
            }
        }