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