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()); } }
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()); } }
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; }
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; }
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); }