Grając ze znajomymi w planszówkę zauważyłem, że dosyć upierdliwe jest podliczanie punktów w tej grze. Co turę każdy graczy zdobywa kartę z "właściwościami", które po prostu się sumuje. Potem za to można zakupić jakieś "jednostki" itp. Może też zdarzyć się tak, że po turze gracz straci kartę. Wtedy przeliczamy punkty od nowa. Bo są tutaj jeszcze jakieś dodatkowe mnożniki itp. Trzeba też pilnować swojej tury czy kolejki (3 ruchy na turę).
Pomyślałem więc, że napiszę w C# aplikację okienkową. C# jest akurat tym językiem, w którym chce się rozwijać.
Myślę, że podejście obiektowe będzie tutaj idealne: każdy gracz to nowy obiekt klasy "gracz" z właściwościami określającymi ile punktów kto ma. Do tego jakaś metoda statyczna, która co turę przelicza liczbę punktów.
Pomysł jest taki:
- odpalam program i wpisuję liczbę graczy
- tworzę po kolei n obiektów
- wyświetlam prostą tabelkę (siatkę textboxów)
- jedna osoba na bieżąco zmienia liczbę punktów i każdy widzi, ile ma punktów do dyspozycji
O ile sama mechanika czy interfejs jeszcze jest do przemyślenia, to na poziomie "programistycznym" widzę już, że to nie takie proste. Zwłaszcza, że chcę po raz I zastosować podejście obiektowe w nieco większym projekcie. Ale inaczej się tego nie nauczę :)
Pytania:
- Widzicie tutaj sens korzystania z bazy typu SQLite?
- Mam do zadeklarowania nieokreśloną liczbę obiektów, dopiero po wpisaniu liczby graczy to będzie wiadomo. Jest jakiś prostszy sposób, niż tablica zawierająca n obiektów klasy "gracz"?
- Skoro deklaruję dynamicznie, to też wypada pamięć zwalniać. W C++ faktycznie jest od tego operator delete. W C# teoretycznie jest GC, więc jeżeli dobrze rozumiem, to po zamknięciu aplikacji (X w okienku) zadeklarowana tablica/obiekty są usuwane i pamięć jest zwalniana?
- Co będzie lepsze: deklaracja klas w osobnych plikach, czy wszystko w jednym pliku, "nad" klasą main?