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