Esempio n. 1
0
 public BackgammonForm(BackgammonManager.GameMode gameMode, string yourName, string friendName)
 {
     manager = new BackgammonManager(gameMode, yourName, friendName);
     board   = BackgammonBoard.Instance;
     InitializeComponent();
     labelFirstPlayer.Text  = yourName;
     labelSecondPlayer.Text = friendName;
     panels = Controls.OfType <Panel>().Where(panelName => panelName.Name.StartsWith("panel")).
              OrderBy(panelPos => int.Parse(panelPos.Name.Replace("panel", ""))).ToArray();
     isCubePlayed = new bool[4];
     InitBoolPlayedArray();
     InitCubesPictures();
     panelIndex     = -2;
     isPanelClicked = false;
     panelBar       = barPanel;
     InitPanels();
     PaintBoard();
     textBoxMassage.Text = $" {manager.StartGame()} is start the game!";
     SetCubes();
     setPanelsAndCubesEnabled(false);
     isWinner           = false;
     buttonPlay.Enabled = true;
     if (gameMode == BackgammonManager.GameMode.TwoComputers)
     {
         buttonHelp.Enabled = false;
     }
 }
        // --- without authentication

        public long GetState()
        {
            lock (mutex)
            {
                var options = GetOptions();
                var timeout = options.GameOverTimeout;
                if (board != null && board.GameStarted && !board.GameOver)
                {
                    timeout = options.SessionTimeout;
                }
                var now = DateTime.Now;
                foreach (var pair in userTickets)
                {
                    var ctx  = pair.Value;
                    var diff = (int)(now - ctx.LastAccess).TotalSeconds;
                    if (diff > timeout * 60) // reset game after inactivity
                    {
                        board = null;
                        userTickets.Clear();
                        stateChanged = DateTime.UtcNow;
                        break;
                    }
                }
                return(GetStateChanged());
            }
        }
 public long ConfirmNextGame(string ticket, bool ok)
 {
     lock (mutex)
     {
         var ctx = GetContext(ticket);
         if (ctx != null &&
             board != null &&
             board.GameStarted &&
             board.GameOver &&
             board.NextGameRequested)
         {
             if (!ok)
             {
                 foreach (var c in userTickets.Values)
                 {
                     c.StartGameConfirmed = false;
                 }
                 board.NextGameRequested = false;
             }
             else
             {
                 ctx.StartGameConfirmed = true;
                 if (userTickets.Values.All((c) => c.StartGameConfirmed == true))
                 {
                     board = new BackgammonBoard(board.WhitePlayer, board.BlackPlayer);
                 }
             }
             stateChanged = DateTime.UtcNow;
         }
         return(GetStateChanged());
     }
 }
Esempio n. 4
0
 internal override bool IsOutStatus()
 {
     board = BackgammonBoard.Instance;
     bool isOut = false;
     if(board.Out.RedSum > 0)
     {
         isOut = true;
     }
     return isOut;
 }
 public long StartNewGame(string ticket)
 {
     lock (mutex)
     {
         var ctx = GetContext(ticket);
         if (ctx != null && board == null && userTickets.Count == 2)
         {
             var users = userTickets.Values.OrderBy(ctx => ctx.Created).ToList();
             board = new BackgammonBoard(users[0].Name, users[1].Name);
             ctx.StartGameConfirmed = true;
             stateChanged           = DateTime.UtcNow;
         }
         return(GetStateChanged());
     }
 }
 public long Logout(string ticket)
 {
     lock (mutex)
     {
         var ctx = GetContext(ticket);
         if (ctx != null)
         {
             board = null;
             userTickets.Remove(ticket);
             foreach (var c in userTickets.Values)
             {
                 c.StartGameConfirmed = false;
             }
             stateChanged = DateTime.UtcNow;
         }
         return(GetStateChanged());
     }
 }
Esempio n. 7
0
 public bool StartMove(int from, int steps, out int sum)
 {
     board = BackgammonBoard.Instance;
     bool isMoved;
     if((from + steps) < 24)
     {
         if((board.Board[from+steps].CheckersColor == Color.Red) || (board.Board[from + steps].CheckersColor == Color.Transparent))
         {
             isMoved = true;
             board.Board[from].RemoveChecker();
             board.Board[from + steps].CheckersColor = Color.Red;
             board.Board[from + steps].AddChecker();
             sum = steps;
         }
         else if(board.Board[from + steps].Checkers == 1)
         {
             isMoved = true;
             board.Board[from].RemoveChecker();
             board.Out.Add(Color.Blue, 24 - (from + steps));
             board.Board[from + steps].RemoveChecker();
             board.Board[from + steps].CheckersColor = Color.Red;
             board.Board[from + steps].AddChecker();
             sum = steps;
         }
         else
         {
             sum = 0;
             isMoved = false;
         }
     }
     else
     {
         sum = 0;
         isMoved = false;
     }
     return isMoved;
 }
Esempio n. 8
0
 internal override bool IsValidMoveForStart(int cube)
 {
     board = BackgammonBoard.Instance;
     bool isValid = false;
     for(int i = 0; i < 24; i++)
     {
         if(board.Board[i].CheckersColor == Color.Red)
         {
             if ((i + cube) < 24)
             {
                 if ((board.Board[i + cube].CheckersColor == Color.Red) || (board.Board[i + cube].CheckersColor == Color.Transparent)
                     || ((board.Board[i + cube].CheckersColor == Color.Blue) && (board.Board[i + cube].Checkers < 2)))
                 {
                     isValid = true;
                     break;
                 }
             }
         }
     }
     return isValid;
 }
Esempio n. 9
0
 public bool StartMove(int firstCube, int secondCube, out int sum)
 {
     bool isMovedFirst = true;
     bool isMovedSecond = true;
     int firstSum;
     int secondSum;
     board = BackgammonBoard.Instance;
     if (firstCube != secondCube)
     {
         firstSum = OneMoveForStart(firstCube);
         if (firstSum == 0)
         {
             isMovedFirst = false;
         }
         else if (IsInFinishMode())
         {
             secondSum = OneMoveForFinish(secondCube);
             sum = firstSum + secondSum;
             return true;
         }
         secondSum = OneMoveForStart(secondCube);
         if (secondSum == 0)
         {
             isMovedSecond = false;
         }
         if ((!isMovedFirst) && (secondSum != 0))
         {
             sum = OneMoveForStart(firstCube);
         }
         sum = firstSum + secondSum;
     }
     else
     {
         sum = 0;
         for (int i = 0; i < 4; i++)
         {
             if (!IsInFinishMode())
             {
                 sum += OneMoveForStart(firstCube);
                 if (sum == 0)
                 {
                     isMovedFirst = false;
                     isMovedSecond = false;
                     break;
                 }
                 else
                 {
                     isMovedFirst = true;
                 }
             }
             else
             {
                 sum += OneMoveForFinish(firstCube);
             }
         }
     }
     return (isMovedFirst || isMovedSecond);
 }