diff --git a/PenaltyMaster3000/View/MainView.xaml b/PenaltyMaster3000/View/MainView.xaml index ad8099e..b15650c 100644 --- a/PenaltyMaster3000/View/MainView.xaml +++ b/PenaltyMaster3000/View/MainView.xaml @@ -175,9 +175,9 @@ + - - + @@ -194,34 +194,119 @@ + Grid.Row="1"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Foreground="White" + FontSize="80" + HorizontalAlignment="Center" + VerticalAlignment="Center" + Grid.Column="1"/> + Foreground="White" + FontSize="80" + HorizontalAlignment="Center" + VerticalAlignment="Center" + Margin="0,0,20,0" + Grid.Column="2"/> - + - + diff --git a/PenaltyMaster3000/ViewModel/MainVM.cs b/PenaltyMaster3000/ViewModel/MainVM.cs index 1e3ca57..dc693f5 100644 --- a/PenaltyMaster3000/ViewModel/MainVM.cs +++ b/PenaltyMaster3000/ViewModel/MainVM.cs @@ -32,6 +32,12 @@ namespace PenaltyMaster3000.ViewModel private bool isSaveCompleted; + private bool isResultCompleted; + + private bool isPlayer1Goalkeeper = false; + + private int numberOfShoots = 0; + public string ActionText { get; private set; } public Visibility ActionTextVisibility { get; private set; } @@ -40,6 +46,8 @@ namespace PenaltyMaster3000.ViewModel public Visibility ScoreBoardVisibility { get; private set; } + public Visibility FinalResultVisibility { get; private set; } + public Visibility BallStartingVisibility { get; private set; } public Visibility GoalStartingVisibility { get; private set; } @@ -65,6 +73,8 @@ namespace PenaltyMaster3000.ViewModel public string Player2ScoreText { get; private set; } + public string FinalWinnerText { get; private set; } + public BitmapImage CurrentImageSource { get @@ -104,6 +114,21 @@ namespace PenaltyMaster3000.ViewModel } } + public bool IsResultCompleted + { + get { return isResultCompleted; } + set + { + if (SetProperty(ref isResultCompleted, value)) + { + if (value) + { + ShootCommand.Execute(null); + } + } + } + } + public ICommand ShootCommand { get; private set; } public ICommand SaveCommand { get; private set; } @@ -117,6 +142,7 @@ namespace PenaltyMaster3000.ViewModel goalTimer.Start(); ActionTextVisibility = Visibility.Hidden; WhistleImageVisibility = Visibility.Hidden; + FinalResultVisibility = Visibility.Hidden; ShootCommand = new RelayCommand(Shoot); SaveCommand = new RelayCommand(Save); ResultCommand = new RelayCommand(Result); @@ -178,6 +204,7 @@ namespace PenaltyMaster3000.ViewModel RefereeTimer_Tick(sender, args); // Après que le timer a expiré, marquez le tir comme terminé IsShootCompleted = true; + OnPropertyChanged(nameof(IsShootCompleted)); }; refereeTimer.Start(); @@ -213,6 +240,9 @@ namespace PenaltyMaster3000.ViewModel OnPropertyChanged(nameof(GoalDownRightVisibility)); OnPropertyChanged(nameof(GoalDownMiddleVisibility)); OnPropertyChanged(nameof(GoalDownLeftVisibility)); + + IsShootCompleted = false; + OnPropertyChanged(nameof(IsShootCompleted)); } private void Save() @@ -236,13 +266,49 @@ namespace PenaltyMaster3000.ViewModel refereeTimer.Tick += (sender, args) => { RefereeTimer_Tick(sender, args); - // Après que le timer a expiré, marquez le tir comme terminé + // Après que le timer a expiré, marquez l'arrêt comme terminé IsSaveCompleted = true; + OnPropertyChanged(nameof(IsSaveCompleted)); }; refereeTimer.Start(); // Arrêter le timer du déplacement automatique du Goal goalTimer.Stop(); + + // Liste des propriétés de visibilité des éléments Ball [TEMPORAIRE !] + List ballVisibilities = new List + { + BallTopRightVisibility, BallTopMiddleVisibility, BallTopLeftVisibility, + BallDownRightVisibility, BallDownMiddleVisibility, BallDownLeftVisibility + }; + + // Générez un index aléatoire pour choisir l'élément Goal à rendre visible + int randomIndex = random.Next(ballVisibilities.Count); + + // Définissez la visibilité de l'élément Goal choisi sur Visible + ballVisibilities[randomIndex] = Visibility.Visible; + + BallStartingVisibility = Visibility.Hidden; + GoalStartingVisibility = Visibility.Hidden; + OnPropertyChanged(nameof(BallStartingVisibility)); + OnPropertyChanged(nameof(GoalStartingVisibility)); + + BallTopRightVisibility = ballVisibilities[0]; + BallTopMiddleVisibility = ballVisibilities[1]; + BallTopLeftVisibility = ballVisibilities[2]; + BallDownRightVisibility = ballVisibilities[3]; + BallDownMiddleVisibility = ballVisibilities[4]; + BallDownLeftVisibility = ballVisibilities[5]; + + OnPropertyChanged(nameof(BallTopRightVisibility)); + OnPropertyChanged(nameof(BallTopMiddleVisibility)); + OnPropertyChanged(nameof(BallTopLeftVisibility)); + OnPropertyChanged(nameof(BallDownRightVisibility)); + OnPropertyChanged(nameof(BallDownMiddleVisibility)); + OnPropertyChanged(nameof(BallDownLeftVisibility)); + + IsSaveCompleted = false; + OnPropertyChanged(nameof(IsSaveCompleted)); } private void Result() @@ -255,12 +321,12 @@ namespace PenaltyMaster3000.ViewModel AreElementsVisible(BallDownLeftVisibility, GoalDownLeftVisibility); // Vérifiez si toutes les paires d'éléments Ball et Goal sont visibles - if (isBallAndGoalVisible) + if (!isPlayer1Goalkeeper && !isBallAndGoalVisible) { // Une paire d'éléments est visible, incrémentation du score du Shooter player1Score++; } - else + else if (isPlayer1Goalkeeper && !isBallAndGoalVisible) { // Aucune paire d'éléments est visible, incrémentation du score du Goalkeeper player2Score++; @@ -283,10 +349,31 @@ namespace PenaltyMaster3000.ViewModel // Démarrer un nouveau timer pour rendre le texte invisible après 2 secondes scoreBoardTimer = new DispatcherTimer(); scoreBoardTimer.Interval = TimeSpan.FromSeconds(2); - scoreBoardTimer.Tick += ScoreBoardTimer_Tick; + scoreBoardTimer.Tick += (sender, args) => + { + ScoreBoardTimer_Tick(sender, args); + + numberOfShoots++; + if (numberOfShoots >= 10 && numberOfShoots % 2 == 0 && player1Score != player2Score) + { + GameEnded(); + } + else + { + // Après que le timer a expiré, marquez l'affichage du résultat comme terminé + IsResultCompleted = true; + OnPropertyChanged(nameof(IsResultCompleted)); + } + }; scoreBoardTimer.Start(); + isPlayer1Goalkeeper = !isPlayer1Goalkeeper; + StartupVisibility(); + goalTimer.Start(); + + IsResultCompleted = false; + OnPropertyChanged(nameof(IsResultCompleted)); } // Méthode utilitaire pour vérifier si deux éléments sont visibles @@ -327,5 +414,21 @@ namespace PenaltyMaster3000.ViewModel OnPropertyChanged(nameof(BallDownLeftVisibility)); OnPropertyChanged(nameof(GoalDownLeftVisibility)); } + + private void GameEnded() + { + if(player1Score > player2Score) + { + FinalWinnerText = "Player 1 wins the game !"; + OnPropertyChanged(nameof(FinalWinnerText)); + } + else + { + FinalWinnerText = "Player 2 wins the game !"; + OnPropertyChanged(nameof(FinalWinnerText)); + } + FinalResultVisibility = Visibility.Visible; + OnPropertyChanged(nameof(FinalResultVisibility)); + } } }