using System; using System.Collections.Generic; using System.ComponentModel; using TheGameExtreme.model; using TheGameExtreme.model.@event; using TheGameExtreme.model.manager; using Xamarin.Forms; namespace TheGameExtreme.viewmodel { public class Main : INotifyPropertyChanged { private List players; private GameManager gameManager; private int currentIndexPlayer; public event PropertyChangedEventHandler PropertyChanged; private string stack0; public String Stack0 { get { return stack0; } set { stack0 = value; OnPropertyChanged("Stack0"); } } public string stack1; public String Stack1 { get { return stack1; } set { stack1 = value; OnPropertyChanged("Stack1"); } } public string stack2; public String Stack2 { get { return stack2; } set { stack2 = value; OnPropertyChanged("Stack2"); } } public string stack3; public String Stack3 { get { return stack3; } set { stack3 = value; OnPropertyChanged("Stack3"); } } private int valueCard1; public int ValueCard1 { get { return valueCard1; } set { valueCard1 = value; OnPropertyChanged("ValueCard1"); } } private void OnPropertyChanged(string v) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(v)); } public Main() { stack0 = "1"; stack1 = "1"; stack2 = "100"; stack3 = "100"; players = new List { new Player("Clément"), new Player("Baptiste") }; gameManager = new SoloGameManager(2, players); gameManager.TopRangeChanged += OnTopRangeChanged; players.ForEach(player => { player.HandCardChanged += OnHandCardChanged; }); gameManager.CurrentPlayerChanged += OnCurrentPlayerChanged; valueCard1 = players[currentIndexPlayer].getCardList()[0].Value; } public void OnTopRangeChanged(object source, TopRangeChangedEventArgs args) { switch (args.NumStackChanged) { case 0: stack0 = args.NewTopRangeCard.Value.ToString(); break; case 1: Stack1 = args.NewTopRangeCard.Value.ToString(); break; case 2: Stack2 = args.NewTopRangeCard.Value.ToString(); break; case 3: Stack3 = args.NewTopRangeCard.Value.ToString(); break; } } private void OnHandCardChanged(object source, HandCardChangedEventArgs args) // Double les appels car les joueurs sont les mêmes dans le model et ici { players[currentIndexPlayer].getCardList().ForEach(card => { }); valueCard1 = players[currentIndexPlayer].getCardList()[0].Value; } private void OnCurrentPlayerChanged(object source, CurrentPlayerChangedEventArgs args) { currentIndexPlayer = args.NewCurrentPlayer; } public void played(string text) { if (players[currentIndexPlayer].getCardList().Count != 0) { int r = new Random().Next(0, 3); playOneCard(text, r); } else { // Throw Exception } } private void playOneCard(string text, int r) { switch (text) { case "card1": gameManager.joue(players[currentIndexPlayer].getCardList()[0], r); break; case "card2": gameManager.joue(players[currentIndexPlayer].getCardList()[1], r); break; case "card3": gameManager.joue(players[currentIndexPlayer].getCardList()[2], r); break; case "card4": gameManager.joue(players[currentIndexPlayer].getCardList()[3], r); break; case "card5": gameManager.joue(players[currentIndexPlayer].getCardList()[4], r); break; case "card6": gameManager.joue(players[currentIndexPlayer].getCardList()[5], r); break; case "card7": gameManager.joue(players[currentIndexPlayer].getCardList()[6], r); break; } } public void endTurn() { gameManager.endTurn(); } } }