private void Triangle_Click(object sender, MouseButtonEventArgs e) { if (MovingFromBar) { TriangleUiEl triangle = null; if (sender is Ellipse ellipse) { triangle = List.FirstOrDefault(s => s.Ellipses.Any(c => c.Equals(ellipse))); } if (sender is Path path) { triangle = List.FirstOrDefault(s => s.Path.Equals(path)); } var clickedTriangle = GetIndexForTriangle(triangle); if (BackgammonLogic.IsLegalFinalMove(clickedTriangle)) // trying to move to his color or empty slot { BackgammonLogic.GetOptionsForInitialSet().ForEach(num => { List[num].Path.Fill = List[num].IsRed ? GetColor(Colors.Red) : GetColor(Colors.Gray); }); BackgammonLogic.SetPlayerFinalMove(clickedTriangle, false); try { var pack = BackgammonLogic._RedPlayer.IsMyTurn ? Bar.RemoveRedChecker() : Bar.RemoveBlackChecker(); AddPack(triangle, pack); } catch { } } else if (BackgammonLogic.IsLegalFinalMoveEat(clickedTriangle)) // trying to eat. { BackgammonLogic.GetOptionsForInitialSet().ForEach(num => { List[num].Path.Fill = List[num].IsRed ? GetColor(Colors.Red) : GetColor(Colors.Gray); }); BackgammonLogic.SetPlayerFinalMoveEat(clickedTriangle); try { var pack = BackgammonLogic._RedPlayer.IsMyTurn ? Bar.RemoveRedChecker() : Bar.RemoveBlackChecker(); var packEaten = triangle.Ellipses.Last(); var ind = GetIndexForTriangle(triangle); RemovePack(packEaten, triangle); if (BackgammonLogic.GameBoard.Triangles[ind].CheckersColor == CheckerColor.Red) { Bar.AddRedChecker(packEaten); } else { Bar.AddBlackChecker(packEaten); } AddPack(triangle, pack); } catch { } } else { return; } MovingFromBar = false; } if (!MovingChecker) { TriangleUiEl triangle = null; if (sender is Path p) { triangle = List.FirstOrDefault(t => t.Path.Equals(p)); } if (sender is Ellipse ellipse) { triangle = List.FirstOrDefault(t => t.Ellipses.Any(c => c.Equals(ellipse))); } if (triangle == null) { return; } Current = triangle; int index = GetIndexForTriangle(triangle); if ((BackgammonLogic._RedPlayer.IsMyTurn && BackgammonLogic.GameBoard.GameBar.NumOfRedCheckers > 0) || (BackgammonLogic._BlackPlayer.IsMyTurn && BackgammonLogic.GameBoard.GameBar.NumOfBlackCheckers > 0)) { var ind = BackgammonLogic._RedPlayer.IsMyTurn ? -1 : 24; BackgammonLogic.SetPlayerInitialMove(ind); MovingFromBar = true; //BackgammonLogic.GetOptionsForBarOff().ForEach(num => { List[num].Path.Style = Styles.triangleCheck; }); return; } else if (BackgammonLogic.PlayerHasAvailableMoves()) { if (BackgammonLogic.GetOptionsForInitialMove(index).Count > 0) { BackgammonLogic.SetPlayerInitialMove(index); MovingChecker = true; BackgammonLogic.GetOptionsForInitialSet().ForEach(num => { List[num].Path.Fill = GetColor(Colors.Green); }); return; } } } else { TriangleUiEl triangle = null; if (sender is Ellipse ellipse) { triangle = List.FirstOrDefault(s => s.Ellipses.Any(c => c.Equals(ellipse))); } if (sender is Path path) { triangle = List.FirstOrDefault(s => s.Path.Equals(path)); } var clickedTriangle = GetIndexForTriangle(triangle); if (BackgammonLogic.PlayerInitialTriangleChoice == clickedTriangle) { MovingChecker = false; BackgammonLogic.GetOptionsForInitialSet().ForEach(num => { List[num].Path.Fill = List[num].IsRed ? GetColor(Colors.Red) : GetColor(Colors.Gray); }); return; } else if (BackgammonLogic.IsLegalFinalMove(clickedTriangle)) // trying to move to his color or empty slot { BackgammonLogic.GetOptionsForInitialSet().ForEach(num => { List[num].Path.Fill = List[num].IsRed ? GetColor(Colors.Red) : GetColor(Colors.Gray); }); BackgammonLogic.SetPlayerFinalMove(clickedTriangle, false); try { var pack = Current.Ellipses.Last(); RemovePack(pack, Current); AddPack(triangle, pack); } catch (Exception ex) { Debug.WriteLine(ex.Message); } } else if (BackgammonLogic.IsLegalFinalMoveEat(clickedTriangle)) // trying to eat. { BackgammonLogic.GetOptionsForInitialSet().ForEach(num => { List[num].Path.Fill = List[num].IsRed ? GetColor(Colors.Red) : GetColor(Colors.Gray); }); BackgammonLogic.SetPlayerFinalMoveEat(clickedTriangle); try { var pack = Current.Ellipses.Last(); RemovePack(pack, Current); var packEaten = triangle.Ellipses.Last(); RemovePack(packEaten, triangle); if (BackgammonLogic._BlackPlayer.IsMyTurn) { Bar.AddRedChecker(packEaten); } else { Bar.AddBlackChecker(packEaten); } AddPack(triangle, pack); } catch { } } else { return; } MovingChecker = false; } }