public GameStatusViewModel(OutbreakCounter outbreakCounter, InfectionRateCounter infectionRateCounter, ResearchStationCounter researchStationCounter, IEnumerable<IDiseaseCounterViewModel> diseaseCounterViewModels, Notifier notifier)
        {
            if (diseaseCounterViewModels == null)
                throw new ArgumentNullException("DiseaseCounterViewModels");

            this.outbreakCounter = outbreakCounter;
            this.infectionRateCounter = infectionRateCounter;
            this.researchStationCounter = researchStationCounter;
            this.diseaseCounterViewModels = diseaseCounterViewModels;
            notifier.SubscribeToViewModel(this);
        }
예제 #2
0
        public Game(IDataAccess dataAccess, IList<string> playerNames, Difficulty difficulty)
        {
            OutbreakCounter = new OutbreakCounter();

            Diseases = dataAccess.GetDiseases();
            Nodes = dataAccess.GetNodes();
            Players = PlayerFactory.GetPlayers(playerNames);

            NodeCounters = GetNodeDiseaseCounter(Nodes, Diseases, OutbreakCounter);
            DiseaseCounters = GetDiseaseCounters(Diseases, NodeCounters, OutbreakCounter);

            SubscribeNodesToMovers();
            SubscribeToPlayerCounters();

            InfectionRateCounter = new InfectionRateCounter();
            ResearchStationCounter = new ResearchStationCounter();

            cityCards = GetCityCards(Nodes);
            infectionCards = GetInfectionCards(NodeCounters);

            infectionDeck = new InfectionDeck(infectionCards.ToList());

            ActionCardManager = new ActionCardManager(Nodes, Players, ResearchStationCounter, infectionDeck);

            playerDeck = new PlayerDeck(new List<Card>(cityCards), new List<Card>() { ActionCardManager.GovernmentGrant, ActionCardManager.Airlift });

            epidemicCards = GetEpidemicCards(InfectionRateCounter, infectionDeck);

            StartGame((int)difficulty);

            playerQueue = new PlayerQueue(Players.ToList());
            Players = Players.OrderBy(i => i.TurnOrder);

            ActionManager = new ActionManager();
            DrawManager = new DrawManager(playerDeck);
            DrawManager.DrawPhaseCompleted += DrawPhaseComplete;
            InfectionManager = new InfectionManager(InfectionRateCounter, infectionDeck);
            InfectionManager.InfectionPhaseCompleted += InfectionPhaseCompleted;

            //game over
            OutbreakCounter.GameOver += GameOverNotified;
            playerDeck.GameOver += GameOverNotified;

            foreach (DiseaseCounter dc in DiseaseCounters)
            {
                dc.GameOver += GameOverNotified;
            }

            //game won
            CureTracker = new CureTracker(Diseases);
            CureTracker.GameWon += GameWonNotified;

            NextPlayer();
        }
예제 #3
0
        public DiseaseCounter(Disease disease, IEnumerable<NodeDiseaseCounter> nodeCounters, OutbreakCounter outbreakCounter)
        {
            this.nodeCounters = nodeCounters;
            this.outbreakCounter = outbreakCounter;

            Disease = disease;
            Count = 24;

            foreach (NodeDiseaseCounter nodeCounter in nodeCounters)
            {
                nodeCounter.Infected += Infection;
                nodeCounter.ChainInfected += Infection;
                nodeCounter.Treated += Treatment;
                nodeCounter.Outbreak += Outbreak;
                nodeCounter.ChainOutbreak += ChainOutbreak;
            }
        }
예제 #4
0
 private IEnumerable<NodeDiseaseCounter> GetNodeDiseaseCounter(IEnumerable<Node> nodes, IEnumerable<Disease> diseases, OutbreakCounter outbreakCounter)
 {
     List<NodeDiseaseCounter> nodeDiseaseCounters = new List<NodeDiseaseCounter>();
     foreach (Disease disease in diseases)
     {
         foreach (Node node in nodes)
         {
             NodeDiseaseCounter ndc = new NodeDiseaseCounter(disease, node);
             nodeDiseaseCounters.Add(ndc);
             outbreakCounter.SubcribeToNodeDiseaseCounter(ndc);
         }
     }
     return nodeDiseaseCounters;
 }
예제 #5
0
 private IEnumerable<DiseaseCounter> GetDiseaseCounters(IEnumerable<Disease> diseases, IEnumerable<NodeDiseaseCounter> nodeCounters, OutbreakCounter outbreakCounter)
 {
     List<DiseaseCounter> diseaseCounters = new List<DiseaseCounter>();
     foreach (Disease disease in diseases)
     {
         diseaseCounters.Add(new DiseaseCounter(disease, nodeCounters.Where(i => i.Disease == disease).ToList(), outbreakCounter));
     }
     return diseaseCounters;
 }