/// <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); } }
/// <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); }
/// <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); } }
/// <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); } }
/// <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; } }
/// <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); } }
/// <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); } }