Witajcie, mam taki oto problem, z którym chciałbym sobie od strony programistycznej jak najoptymalniej poradzić.
Mianowicie postanowiłem sobie napisać prosty kalkulator produkcji (łańcuchów produkcyjnych) do gierki online, w którą grywam. Kalkulator ma mieć prostą (prawie jak cep) budowę: na wejściu ma przyjmować nazwę przedmiotu, który chcemy wyprodukować oraz jego ilość; na wyjściu zaś mamy dostawać listę produktów, które są potrzebne do zrobienia tego podanego przez nas wraz z ich ilościami.
Próbowałem rozwiązanie to zaimplementować w Excelu, ale się tam zamotałem, więc chcę to napisać w C++.
Gdzie wg mnie tkwi problem? Ano w tym, iż niektóre produkty występują w wielu łańcuchach produkcyjnych jako substraty do wyprodukowania innych rzeczy, inne zaś są produktami podstawowymi, których nie robi się z czegoś innego. I ni w ząb nie wiem, jak to ugryźć w sensowny sposób.
Najpierw myślałem o tym, żeby zrobić całą masę zmiennych, które miałyby przechowywać ilości danych produktów, ale to by było chyba najmniej optymalne rozwiązanie, jakie sobie można wyobrazić (ze względu na mnogość zasobów w tej grze). Poza tym byłoby to pójście na łatwiznę i brak możliwości nauczenia się (lub potrenowania) dobrego zaprojektowania programu obiektowego.
Wpadłem więc na pomysł, aby zrobić klasę, która będzie symulować produkt podstawowy - i w niej pola o nazwach takich jak te produkty, które byłyby inkrementowane poprzez wywołanie metody klasowej z podanym odpowiednim argumentem. Z drugiej znów strony nie wiem, czy to ma sens, czy może każdy produkt podstawowy powinien być osobnym obiektem... podejrzewam też, że powinien być tam dla ułatwienia zostać zastosowany jakiś typ wyliczeniowy :( pogubiłem się już w tym zupełnie - o ile jestem w stanie jakoś poskładać w całość mechanizm obliczeń, o tyle zaprojektowanie tego z sensem znowu sprawia mi problem pomimo tego, iż programuję już od kilku ładnych lat.... :x
Czytałem ostatnio książkę z serii Head First o projektowaniu obiektowym i niby coś tam zaczęło świtać, ale w praktyce nadal nie wiem jak sobie z tym poradzić. Dlatego będę wdzięczny za wszelkie sugestie, w jaki sposób to zaprojektować i na co w pierwszej kolejności zwrócić uwagę. :)
Pozdrawiam
Łukasz