示例#1
0
        /// <summary>
        /// W przypadku za dużej różnicy w wartościach ilością posiadanych zasobów zostaje zmniejszona
        /// ilość przechowywanej wartości Gold.ResourceAmount
        /// </summary>
        /// <param name="store"></param>
        public void HandlePeople(Village.Store store)
        {
            uint toBigDiffrence = 20;

            // Sprawdza czy wieśniaków jest maksymalnie 20 razy wiecej
            if (store.Citizens.BuildingLevel * store.Citizens.ProducedResourcesPerLevel / store.SoldierUnits.SoldiersAmount > toBigDiffrence)
            {
                // Losuje wartosc ile zabrac zasobow
                int stolenValue = new Random().Next(0, (int)store.Gold.ProduceResources());
                // Warunek żeby nie dać wartości ujemnej
                if (store.Gold.ResourceAmount < (uint)stolenValue)
                {
                    store.Gold.ResourceAmount = 0;
                }
                else
                {
                    store.Gold.ResourceAmount -= (uint)stolenValue;
                }
                String message = "Panie, w mieście jest za mało straży."
                                 + Environment.NewLine + "Nie jesteśmy wstanie upilnować motłochu,"
                                 + Environment.NewLine + "a wczoraj w nocy okradziono skarbiec."
                                 + Environment.NewLine + "Nikt tego nie zauważył. Powinniśmy poważnie"
                                 + Environment.NewLine + "zastanowaić się nad zrekrutowaniem wojaków"
                                 + Environment.NewLine + Environment.NewLine + "Straciliśmy złoto";
                new FormEvent(message);
            }
        }
示例#2
0
 /// <summary>
 /// Sprawdza czy jakieś zdarzenie zachodzi w grze
 /// </summary>
 /// <param name="store"></param>
 public void EventHandler(Village.Store store)
 {
     HandleWood(store);
     HandlePeople(store);
     HandleMine(store);
     HandleGold(store);
 }
示例#3
0
        /// <summary>
        /// Funkcja wywolana w przypadku ataku przeciwnikow
        /// </summary>
        /// <param name="store"></param>
        /// <returns></returns>
        internal bool BattleHandler(Village.Store store)
        {
            // zwieksza ilosc dotychczasowych atakow
            ++attackAmount;
            bool winBottom = false;
            bool winTop    = false;

            // Czy odparto atak na poludniu
            winBottom = IsWinnigFight(ArmyOnBottom, new Soldiers(attackAmount * 30 + (uint)new Random().Next((int)attackAmount * 30 / 2), 2));
            //czy odparto atak na polnocy
            winTop = IsWinnigFight(ArmyOnTop, new Soldiers(attackAmount * 30 + (uint)new Random().Next((int)attackAmount * 30 / 2), 2));

            // Jeśli wszystkie 3 wioski na polnocy lub poludniu sa zniszczone to atakowana jest stolica
            if (DestoyedTopVillages == 3 | DestoyedBottomVillages == 3)
            {
                return(AttackCapitol(store, new Soldiers(attackAmount * 30 + (uint)new Random().Next((int)attackAmount * 30 / 2), 2)));
            }
            // Gdy przegralo poludnie
            if (!winBottom)
            {
                // zmniejsza ilosc funkcjonujących wiosek
                DestoyedBottomVillages++;
            }
            if (!winTop)
            {
                // zmniejsza ilosc funkcjonujących wiosek
                DestoyedTopVillages++;
            }

            if (winBottom && winTop)
            {
                String message = "Gdy kurz już opadł, a ranni przestali płakać"
                                 + Environment.NewLine + "dostrzec można było że wygraliśmy..."
                                 + Environment.NewLine + "tym razem. Jednak nie obyło się bez strat";
                new FormEvent(message);
                return(true);
            }
            if (winBottom || winTop)
            {
                String message = "Gdy kurz już opadł, a ranni przestali płakać"
                                 + Environment.NewLine + "dostrzec można było że wygraliśmy..."
                                 + Environment.NewLine + "tym razem. Jednak nie obyło się bez strat";
                new FormEvent(message);
                return(true);
            }
            else
            {
                String message = "Tego dnia krzykom nie było końca"
                                 + Environment.NewLine + "Najeźdźcy plądrowali wszystko co mogli"
                                 + Environment.NewLine + "żadne cenności czy kobiety nie umknęły"
                                 + Environment.NewLine + "im tego dnia."
                                 + Environment.NewLine + "Nie pozwólmy by i nas dopadł ten los";
                new FormEvent(message);
                return(true);
            }
        }
示例#4
0
        /// <summary>
        /// W przypadku niewystarczającej ilości store.Gold.ResourcesAmount
        /// zostaje zmniejszona ogólna ilość SoldierUnits.SoldiersAmount
        /// </summary>
        /// <param name="store"></param>
        public void HandleSoldier(Village.Store store)
        {
            // sprawdza czy można opłacić żołnierzy
            bool isPayed = store.SoldierUnits.PaySoldiers(store.Gold);

            if (isPayed == false)
            {
                // Losowa ilosc miedzy 1 a 1/3 posiadanych żołnierzy zostanie usunieta
                store.SoldierUnits.SoldiersAmount -= (uint)new Random().Next(1, (int)store.SoldierUnits.SoldiersAmount / 3);
                String message = "Panie, zabrakło nam złota, aby opłacić"
                                 + Environment.NewLine + "tygodniowy żołd wojów."
                                 + Environment.NewLine + "Musimy zacząć oszczędzać, bo nasze wojska"
                                 + Environment.NewLine + "zaczynają dezerterować";
                new FormEvent(message);
            }
        }
示例#5
0
        /// <summary>
        /// Funkcja aktywowana daje bonusy do zasobow w zależnosci ile
        /// wiosek jest jeszcze nie zniszcoznych
        /// </summary>
        /// <param name="store"></param>
        public void ActivateBonuses(Village.Store store)
        {
            // Zyski z wiosek z polnocy
            switch (DestoyedTopVillages)
            {
            case 0:
                store.Wood.ResourceAmount     += store.Wood.ProduceResources();
                store.Gold.ResourceAmount     += store.Gold.ProduceResources();
                store.Citizens.ResourceAmount += 10;
                break;

            case 1:
                store.Gold.ResourceAmount     += store.Gold.ProduceResources();
                store.Citizens.ResourceAmount += 10;
                break;

            case 2:
                store.Citizens.ResourceAmount += 10;
                break;

            default:
                break;
            }

            // Zyski z wiosek z poludnia
            switch (DestoyedBottomVillages)
            {
            case 0:
                store.Gold.ResourceAmount         += store.Gold.ProduceResources();
                store.SoldierUnits.SoldiersAmount += 1;
                store.Mine.ResourceAmount         += store.Mine.ProduceResources();
                break;

            case 1:
                store.Mine.ResourceAmount         += store.Mine.ProduceResources();
                store.SoldierUnits.SoldiersAmount += 1;
                break;

            case 2:
                store.Mine.ResourceAmount += store.Mine.ProduceResources();
                break;

            default:
                break;
            }
        }
示例#6
0
        /// <summary>
        /// W przypadku za dużej różnicy w wartościach BuildingLevel zostaje zmniejszona
        /// ilość Citizens.ResourceAmount o pewną wartość
        /// </summary>
        /// <param name="store"></param>
        public void HandleMine(Village.Store store)
        {
            // Wartość graniczna
            uint toBigDiffrence = 5;


            if (store.Citizens.BuildingLevel - store.Mine.BuildingLevel < toBigDiffrence)
            {
                if (store.Citizens.ResourceAmount > 10)
                {
                    store.Citizens.ResourceAmount -= 10;
                }
                else
                {
                    store.Citizens.ResourceAmount = 0;
                }
                String message = "Panie, nasze kopalnie nie wyrabiają"
                                 + Environment.NewLine + "z produkcją materiałów. Rodziny zaczynają"
                                 + Environment.NewLine + "się wyprowadzać, bo nie mają z czego budować"
                                 + Environment.NewLine + "domów. Powinniśmy rozbudować kopalnie";
                new FormEvent(message);
            }
        }
示例#7
0
        /// <summary>
        /// w przypadku dużej różnicy w BuildingLevel wartość tejże BuildingLevel
        /// zostanie zmniejszona
        /// </summary>
        /// <param name="store"></param>
        public void HandleWood(Village.Store store)
        {
            uint toBigDiffrence = 3;

            // Jeśli jest za duża rożnica w poziomach
            if (store.Wood.BuildingLevel - store.Mine.BuildingLevel > toBigDiffrence)
            {
                // Budynek nie może zawalić się całkowicie tzn. zejsc do poziomu 0
                if (store.Mine.BuildingLevel != 1)
                {
                    store.Mine.BuildingLevel--;
                }
                String message = "Panie, mamy za mało drwali."
                                 + Environment.NewLine + "Brakuje budulca, przez co oszczędni"
                                 + Environment.NewLine + "górnicy oszczędzali na materiale do"
                                 + Environment.NewLine + "utrzymywania konstrukcji tuneli"
                                 + Environment.NewLine + "przez co jedna z odnóch zawaliła się"
                                 + Environment.NewLine + "spróbujmy do tego nie dopuścić następnym razem"
                                 + Environment.NewLine + Environment.NewLine + "Poziom kopalni zmniejszył się o jeden poziom";

                new FormEvent(message);
            }
        }