• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pierwsza aplikacja w qt-TicTacToe

VPS Starter Arubacloud
0 głosów
426 wizyt
pytanie zadane 25 lutego 2018 w Nasze projekty przez chucksqll Stary wyjadacz (12,930 p.)
Witam.

Zrobiłem swoją pierwszą aplikację okienkową w Qt, TicTacToe. Sama aplikacja jest bardzo prosta oraz wymaga jeszcze sporo pracy, żeby doprowadzić to do porządnego stanu, choć i tak już spotkałem dużo problemów, których się nie spodziewałem w tak prostym projekcie, z niektórymi poradziłem sobie lepiej z innymi gorzej. Prosiłbym o jakiś feedback, powiedzenie co jest zrobione tragicznie, źle, średnio, dobrze. Czego się wystrzegać, tak aby od początku mój kod dążył do jak najlepszego stanu, z góry dziękuję.

https://github.com/chucksqll/TicTacToe
komentarz 25 lutego 2018 przez mokrowski Mędrzec (155,460 p.)
Projektu nie da się skompilować bo brakuje zasobów (katalog pictures i pliki wewnątrz).

Pliku *.user bym także nie publikował bo każdy ma swoje ulubione ustawienia. Dodaj do plików ignorowanych np. to https://github.com/github/gitignore/blob/master/Qt.gitignore
komentarz 25 lutego 2018 przez chucksqll Stary wyjadacz (12,930 p.)

Dodałem katalog pictures.

Co do pliku *.user, to chodzi w tym przypadku o  TicTacToe1.pro.user, mam go po prostu usunąć z listy? 

komentarz 25 lutego 2018 przez mokrowski Mędrzec (155,460 p.)

No to zacznij od usunięcia ostrzeżeń:

mainwindow.cpp:108:13: warning: variable 'PB' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized]
    else if(i==2&&j==2)
            ^~~~~~~~~~
mainwindow.cpp:110:12: note: uninitialized use occurs here
    return PB;
           ^~
mainwindow.cpp:108:10: note: remove the 'if' if its condition is always true
    else if(i==2&&j==2)
         ^~~~~~~~~~~~~~
mainwindow.cpp:108:13: warning: variable 'PB' is used uninitialized whenever '&&' condition is false [-Wsometimes-uninitialized]
    else if(i==2&&j==2)
            ^~~~
mainwindow.cpp:110:12: note: uninitialized use occurs here
    return PB;
           ^~
mainwindow.cpp:108:13: note: remove the '&&' if its condition is always true
    else if(i==2&&j==2)
            ^~~~~~
mainwindow.cpp:91:20: note: initialize the variable 'PB' to silence this warning
    QPushButton *PB;
                   ^
                    = nullptr
2 warnings generated.

Warunki które widzisz w komunikatach, warto także otaczać nawiasami:

if((i==2) && (j==2))

Usuń także kod w komentarzach. Nie wiadomo jak go traktować. Ma być/nie być to testy?

To na szybko i na gorąco... 

komentarz 25 lutego 2018 przez chucksqll Stary wyjadacz (12,930 p.)
Poprawione.

1 odpowiedź

+2 głosów
odpowiedź 26 lutego 2018 przez mokrowski Mędrzec (155,460 p.)
wybrane 26 lutego 2018 przez chucksqll
 
Najlepsza
No to kilka uwag.. jak prosiłeś.

1. To zła praktyka stosować magiczne wartości 0, 1, 2 do oznaczania pól (puste/kółko/krzyżyk). Lepiej stosować wartości enum.

2. Funkcje są zbyt obszerne. Co oznacza że mają zbyt wiele odpowiedzialności (za dużo robią). Tego nie załatwia się komentarzem tylko sugestywną nazwą funkcji.

3. Znany jest algorytm wygrywający dla tej gry. Skąd pomysł na "random"? Jeśli nawet random, to może warto losować spośród pól pustych a nie "próbować wylosować i jeśli puste to ok".

4. Zainteresuj się nagłówkiem <random> aby lepiej obsłużyć losowość.

5. Jeśli pojawiają Ci się struktury typu współrzędne pola, powinien to być oddzielny typ danych a nie "magiczne wartości 0,1,2" podawane w metodach.

6. Łamana jest reguła DRY (ang. Don't Repeat Yourself). Powtarzają Ci się ciała metod ze zmianą jednego parametru (np. Mode). To powinna być 1 metoda z parametrem.

7. Nie lepiej wywołać metody w rodzaju: bool chceckDiagonal(FieldType), bool checkColumn(FieldType), bool checkRow(FieldType) zwracające wynik testu czy w danym wierszu/kolumnie/przekątnej są takie same elementy?

8. Qt posiada wywołanie child*() zwracające listę widgetów umieszczonych w danym rodzicu. Ułatwi to iterowanie po elementach (teraz to "wklepujesz na piechotę").

Ogólna rada, spróbuj napisać tę grę na dowolnej wielkości planszy. Np. 4x4 tak aby zmiana wielkości wykonana była w 1 miejscu. To wymusi lepszą strukturę projektu.

Podobne pytania

0 głosów
0 odpowiedzi 497 wizyt
0 głosów
1 odpowiedź 461 wizyt
0 głosów
2 odpowiedzi 593 wizyt
pytanie zadane 11 września 2016 w Inne języki przez Kuchar Nowicjusz (140 p.)

92,453 zapytań

141,262 odpowiedzi

319,087 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...