wymyśliłem i zrobiłem taką grę w kości, czekam na opinie i hejty (idealna okazja)
w załączniku instalka
FURA gra w kości
- Rejestracja: dni
- Ostatnio: dni
- Postów: 55
- Rejestracja: dni
- Ostatnio: dni
- Postów: 4883
- nie comituje sie binarek. takze bin/debug bin/release i publish nie powinny byc w repo
- magic numbery
- MainWindow jest za duzo, nie ma klasy ktora obsluguje logike gry. Wszystko sie dzieje w sumie w MainWindow
- z tego co wiem (moge sie mylic) regionow juz sie nie uzywa. Nie sa po prostu uzyteczne
- funkcje powinny wykonywac jedna akcje. Tak wiec funkcja CreateAndFillHoFFile jest po prostu zla (bo robi dwie rzeczy). Lepiej ja rozbic na SetupHoFFile() a w tym zrobic Create a pozniej Fill
- GetRandoms lepiej uzyc tutaj Dictionary i zmapowac dwie kolekcje (wtedy nie bedzie Ci potrzebne to i)
- GetRoundSum spokojnie mogloby zwracac string (uzywasz tylko w jednym miejscu)
- a co jezeli gra kobieta? Wtedy komunikaty nie sa poprawne
- jezeli to wpf to czemu nie bindujesz tylko ciagle robisz toString i dajesz do text? Przeciez to latwo idzie zbindowac.
- pomieszane polskie z angielskimi nazwami
ogolnie projekt jest maly, ale jest czytelny. Dalbym 6/10 bo czytalo sie to ok.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 55
-też to gdzieś wyczytałem już później. Usunąłem te foldery
-starałem się unikać magic numberów ale masz rację, wkradł się jeden
-regiony były dla mnie użyteczne do przemieszczania się po kodzie ale pewnie dlatego bo jak sam napisałeś cała logika jest w klasie MainWindow. Co z tym zrobić? Wyodrębnić do osobnej dllki?
-co do funkcji GetRandoms() to po prostu wiedziałem że da się to zrobić inaczej i kuło mnie w oczy to i, ale nic nie wymyśliłem innego... Spróbuje z tym dictionary
-grafika jest w Windows Formsie
-nazwy zmiennych, funkcji, klas i obiektów nie wypadają z przyjętej konwencji C# ale interfejs gry jest po polsku więc to się gryzie. Następny projekt będzie miał angielski interfejs
Dzięki za opinię
- Rejestracja: dni
- Ostatnio: dni
Poza tym co kolega wyżej napisał, to bym zmienił tego ifa https://github.com/chrzastek/FURA/blob/master/MainWindow.cs#L216
Odwróciłbym warunek do np takiej postaci:
if (hofMembers.Count >= 5 && points < hofMembers.Max.Points) {
return;
}
i tracimy wg mnie zbędne zagnieżdżenie.
Dodatkowo podzieliłbym na foldery cały projekt. Np okna w oddzielnym folderze, klasy związane z logiką biznesową w oddzielnym itp
- Rejestracja: dni
- Ostatnio: dni
- Postów: 10307
- można zmienić, jeżeli dla Ciebie to bardziej czytelne
public int Compare(HoFMember member1, HoFMember member2)
{
if (member1.Points > member2.Points)
return -1;
if (member1.Points < member2.Points)
return 1;
else
return 0;
}
na
public int Compare(HoFMember member1, HoFMember member2)
{
return member2.Points - member1.Points;
}
(Jeżeli koniecznie potrzeba liczby 1 oraz -1 to użyj funkcji Math.Sign)
- Może moje spaczenie z javy ale ja lubię mieć
private Random r = new Random();
zapisany tak private static readonly Random random = new Random();
3. Kurcze szkoda że nie mam visuala pod ręką bo bym Ci to fajnie zrefactorował (a bez IDE trochę strach że coś zepsuje :D) ale ogólnie jedyne co bym zrobił to miejsca w MainWindow takie jak:
linijki 54-62 do nowej metody
linijki 64-72 do nowej metody
linijki 41-74 do nowej metody
4. `buttonPass_Click()` i `odNowaToolStripMenuItem_Click` ma pomieszany widok z logiką. (W jednym miejscu decyduje się co robić oraz np ustawia treść labelkom -> nie ładne)
5. Mógłbyś ogólnie całą logikę dać do innej klasy a widok ewentualnie zostawić w MainWindow. To MainWindow teraz za dużo robi niestety.
6. `ResetDices`, `GetRandoms`, `GetAmountOfUncheckedBoxes`, `CreateAndFillHoFFile`, `SerializeSet` i `GetRoundSum` ładnie wyglądają! Brawo :D