Пример #1
0
 private Style GetEllipseStyle(int i)
 {
     if (FirstRow(i))
     {
         return(gameUserControl.FindResource("EllipsePlayer1") as Style);
     }
     else if (LastRow(i))
     {
         return(gameUserControl.FindResource("EllipsePlayer2") as Style);
     }
     else
     {
         return(gameUserControl.FindResource("EllipseNeutron") as Style);
     }
 }
Пример #2
0
        public void HandleTokenClick(object sender)
        {
            if (sender is Button)
            {
                if (IllegalMove(sender))
                {
                    return;
                }

                UpdateEnumBoard(sender);
                SetGameVar();
                enumMoveDirection = GetMoveDirection(sender);
                new MoveToken(sender, ellipseSelected, enumMoveDirection);
                SetLabelsColor();
                SetAllButtonsStyleToDefault();
                CheckEndGame();

                if (ai && !player1Turn && !neutronMoved)
                {
                    for (int i = 0; i < 5; i++)
                    {
                        Ellipse tokenNeutron;
                        // Display neutron available
                        for (int j = 0; j < 5; j++)
                        {
                            if (enumBoard[j, i] == EnumBoard.NeutronToken)
                            {
                                tokenNeutron = GameUserControl.Instance.GameBoard.Children
                                               .OfType <Ellipse>()
                                               .Where(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i)
                                               .FirstOrDefault();

                                SetAllButtonsStyleToDefault();
                                ellipseSelected = tokenNeutron;
                                DisplayPieceSelected();
                                break;
                            }
                        }
                    }
                    // move the neutron
                    byte       index = 0;
                    List <int> numberOfAvailableMove = new List <int>();
                    foreach (var item in gameUserControl.GameBoard.Children.OfType <Button>())
                    {
                        if (item.Style == gameUserControl.FindResource("SelectedButton") as Style)
                        {
                            // AI can Win
                            if (Grid.GetRow(item) == 4)
                            {
                                HandleTokenClick(item);
                                return;
                            }
                            numberOfAvailableMove.Add(index);
                        }
                        index++;
                    }

                    for (int i = 0; i < numberOfAvailableMove.Count; i++)
                    {
                        // remove sucidal play
                        if (numberOfAvailableMove[i] < 5)
                        {
                            numberOfAvailableMove.Remove(numberOfAvailableMove[i]);
                            break;
                        }
                    }

                    // play the neutron randomly
                    Random random    = new Random();
                    int    indexMove = random.Next(0, numberOfAvailableMove.Count);
                    index = 0;
                    foreach (var item in gameUserControl.GameBoard.Children.OfType <Button>())
                    {
                        if (index == numberOfAvailableMove[indexMove])
                        {
                            HandleTokenClick(item);
                            break;
                        }
                        index++;
                    }

                    // selected a random token from player2
                    index = 0;
                    Random random2    = new Random();
                    int    indexMove2 = random.Next(0, 4);
                    foreach (var item in gameUserControl.GameBoard.Children.OfType <Ellipse>())
                    {
                        if (item.Style == gameUserControl.FindResource("EllipsePlayer2") as Style)
                        {
                            if (index == indexMove2)
                            {
                                HandleTokenClick(item);
                            }
                            index++;
                        }
                    }

                    // populate the random list of move for the token
                    index = 0;
                    List <int> numberOfAvailableMove2 = new List <int>();
                    foreach (var item in gameUserControl.GameBoard.Children.OfType <Button>())
                    {
                        if (item.Style == gameUserControl.FindResource("SelectedButton") as Style)
                        {
                            numberOfAvailableMove2.Add(index);
                        }
                        index++;
                    }

                    // play the token randomly
                    Random random3    = new Random();
                    int    indexMove3 = random.Next(0, numberOfAvailableMove2.Count);
                    index = 0;
                    foreach (var item in gameUserControl.GameBoard.Children.OfType <Button>())
                    {
                        if (index == numberOfAvailableMove2[indexMove3])
                        {
                            HandleTokenClick(item);
                            break;
                        }
                        index++;
                    }
                }
            }
            else if (sender is Ellipse)
            {
                if (Player1SelectPlayer2Token(sender) || Player2SelectPlayer1Token(sender))
                {
                    return;
                }

                if (NeutronMovedAndEllipseIsNotNeutron(sender) || NeutronNotMovedAndEllipseIsNeutron(sender))
                {
                    SetAllButtonsStyleToDefault();
                    gameTimer.StartTimer();
                    ellipseSelected = sender as Ellipse;
                    DisplayPieceSelected();
                }
            }
        }