/// <summary> /// Wyznaczanie celu podrozy poprzez wybranie wioski ktora ma najmniej surowca ktory posiada handlarz /// </summary> /// <param name="handlarz"></param> /// <returns></returns> public Osada wyznaczCelPodrozy(Handlarz handlarz) { Osada cel = listaOsad.FirstOrDefault(); Zasob najmniej = new Zasob(handlarz.zwrocWoz().NazwaPrzewozonegoZasobu(), 10000, 0); foreach (Osada osada in listaOsad) { bool warunekWolnosciOsady = false; foreach (Handlarz temp in listaHandlarzy) { if (temp.zwrocCelPodrozy() == osada && temp.zwrocWoz().NazwaPrzewozonegoZasobu() == handlarz.zwrocWoz().NazwaPrzewozonegoZasobu()) { warunekWolnosciOsady = true; break; } } if (warunekWolnosciOsady) { continue; } Magazyn magazyn = osada.magazyny(); foreach (KeyValuePair<string, Zasob> para in magazyn.pobierzStanMagazynu()) { if (para.Key.Equals(najmniej.nazwaZasobu())) { if (najmniej.iloscZasobu() > para.Value.iloscZasobu()) { najmniej = para.Value; cel = osada; break; } } } } return cel; }
/// <summary> /// metoda generujaca handlarzy na podstawie strategi /// </summary> /// <returns>lista Handlarzy</returns> private List <Handlarz> generujHandlarzy() { List <Handlarz> lista = new List <Handlarz>(); for (int i = 0; i < strategiaGenerowania.iloscHandlarzyDoWygenerowania(); i++) { Handlarz handlarz = fabrykaHandlarzy.generujHandlarza(); lista.Add(handlarz); } return(lista); }
/// <summary> /// Obecna wymiana polega na tym ze handlarz wymienia sie z targiem porowno, tj rozladowuje swoje zasoby i sa /// ladowane do magazynua potem z magazynu bierzemy surowiec ktorego jest najwiecej i ladujemy mu na woz /// Pożadana strategia jest raczej inna, pozniewaz obecna jest strasznie trywialna. /// </summary> /// <param name="magazyn"></param> /// <param name="handlarz"></param> public void wymianaTowaru(Magazyn magazyn, Handlarz handlarz, List<string> coSprzedawac) { Console.WriteLine(String.Format("Co sprzedawac: {0}",coSprzedawac.First())); KeyValuePair<string, Zasob> towarHandlarza = handlarz.rozladujTowar(); Dictionary<string, Zasob> stanMagazynu = magazyn.pobierzStanMagazynu(); Zasob towarDoMagazynu = stanMagazynu[towarHandlarza.Key]; towarDoMagazynu.zmienIloscZasobu(towarHandlarza.Value.iloscZasobu()); KeyValuePair<string, Zasob> towarZMagazynu = new KeyValuePair<string,Zasob>(); string towarZakupowany = coSprzedawac.First(); foreach (KeyValuePair<string, Zasob> para in stanMagazynu) { if (para.Key.Equals(towarZakupowany)) { towarZMagazynu = para; } } Console.WriteLine(String.Format("Zaladowal : {0}",towarZMagazynu.Key)); towarZMagazynu.Value.zmienIloscZasobu(-towarHandlarza.Value.iloscZasobu()); handlarz.ladujTowar(new KeyValuePair<string, Zasob>(towarZMagazynu.Key, new Zasob(towarZMagazynu.Key, towarHandlarza.Value.iloscZasobu(), towarZMagazynu.Value.zwrocWageZasobu()))); }
/// <summary> /// Obecna wymiana polega na tym ze handlarz wymienia sie z targiem porowno, tj rozladowuje swoje zasoby i sa /// ladowane do magazynua potem z magazynu bierzemy surowiec ktorego jest najwiecej i ladujemy mu na woz /// Pożadana strategia jest raczej inna, pozniewaz obecna jest strasznie trywialna. /// </summary> /// <param name="magazyn"></param> /// <param name="handlarz"></param> public void wymianaTowaru(Magazyn magazyn, Handlarz handlarz, List <string> coSprzedawac) { Console.WriteLine(String.Format("Co sprzedawac: {0}", coSprzedawac.First())); KeyValuePair <string, Zasob> towarHandlarza = handlarz.rozladujTowar(); Dictionary <string, Zasob> stanMagazynu = magazyn.pobierzStanMagazynu(); Zasob towarDoMagazynu = stanMagazynu[towarHandlarza.Key]; towarDoMagazynu.zmienIloscZasobu(towarHandlarza.Value.iloscZasobu()); KeyValuePair <string, Zasob> towarZMagazynu = new KeyValuePair <string, Zasob>(); string towarZakupowany = coSprzedawac.First(); foreach (KeyValuePair <string, Zasob> para in stanMagazynu) { if (para.Key.Equals(towarZakupowany)) { towarZMagazynu = para; } } Console.WriteLine(String.Format("Zaladowal : {0}", towarZMagazynu.Key)); towarZMagazynu.Value.zmienIloscZasobu(-towarHandlarza.Value.iloscZasobu()); handlarz.ladujTowar(new KeyValuePair <string, Zasob>(towarZMagazynu.Key, new Zasob(towarZMagazynu.Key, towarHandlarza.Value.iloscZasobu(), towarZMagazynu.Value.zwrocWageZasobu()))); }
/// <summary> /// Wyznaczanie celu podrozy poprzez wybranie wioski ktora ma najmniej surowca ktory posiada handlarz /// </summary> /// <param name="handlarz"></param> /// <returns></returns> public Osada wyznaczCelPodrozy(Handlarz handlarz) { Osada cel = listaOsad.FirstOrDefault(); Zasob najmniej = new Zasob(handlarz.zwrocWoz().NazwaPrzewozonegoZasobu(), 10000, 0); foreach (Osada osada in listaOsad) { bool warunekWolnosciOsady = false; foreach (Handlarz temp in listaHandlarzy) { if (temp.zwrocCelPodrozy() == osada && temp.zwrocWoz().NazwaPrzewozonegoZasobu() == handlarz.zwrocWoz().NazwaPrzewozonegoZasobu()) { warunekWolnosciOsady = true; break; } } if (warunekWolnosciOsady) { continue; } Magazyn magazyn = osada.magazyny(); foreach (KeyValuePair <string, Zasob> para in magazyn.pobierzStanMagazynu()) { if (para.Key.Equals(najmniej.nazwaZasobu())) { if (najmniej.iloscZasobu() > para.Value.iloscZasobu()) { najmniej = para.Value; cel = osada; break; } } } } return(cel); }
public void dodajHandlarza(Handlarz handlarz) { this.listaHandlarzy.Add(handlarz); }
//###################################### METODY ######################################## /// <summary> /// wymiany uzywam ze strategi handlu /// </summary> /// <param name="handlarz"></param> public void WymianaTowaru(Handlarz handlarz) { strategia.wymianaTowaru(magazyn, handlarz, coSprzedawac); }