Obiektowe TicTacToe

0

Witam,
jako, że właśnie zacząłem się uczyć obiektowości w języku C++, napisałem sobie grę, Kółko i Krzyżyk. Program ma 3 klasy(wymóg wykładowcy). Wszystko z pozoru działa, jednak wydaje mi się, że wiele trzeba poprawić. Dodatkowo mam problem z destruktorem w klasie Board, ponieważ gdy go zadeklaruje to gra się wywala :/

Bardzo proszę o ocenę programu, wskazanie błędów i udzielenie rad :)

Mam nadzieję, że nikt się nie obrazi, jeżeli kod wkleję tutaj: http://wklej.org/hash/20ffbf13ee2/

Z góry dziękuję :)

5
  1. Poczytaj o różnicach między kompozycją i dziedziczeniem. Logic dziedziczy po Board? Bez sensu kompletnie.
  2. Klasy po których dziedziczymy (Board) muszą mieć ** virtualny destruktor **.
  3. Używasz raw pointerów. Niedobrze. Poczytaj o smart pointerach.
  4. Używasz const char * zamiast std::string. Też niedobrze.
  5. W konstruktorze Board zajmujesz jakąś pamięć. Bez destruktora i zwalniania tejże pamięci masz memory leak.
  6. Magic values. Dlaczego nie zrobisz sobie zmiennej char first_player_indicator = 'X', tylko w dziesięciu miejscach piszesz to 'X'?
4
  1. Git (+github/bitbucket)/wandbox zamiast dziwnych wklejek do projektów większych niż paredziesiąt linii kodu.
  2. Jeżeli musisz użyć new żeby utworzyć tablicę... to nie musisz. Użyj normalnych kontenerów (w tym wypadku std::vector), a odpadnie Ci sprzątanie po sobie.
  3. Wszystkiemu co statyczne na początku zabawy z programowaniem mówimy nie ma takiej opcji.
  4. Poczytaj o const correctness, to key-feature jeśli chodzi o C++; Przy okazji zmusi Cie to do lepszego przemyślenia twoich hmm... rozwiązań.
(((tab[0] == tab[1]) && (tab[1] == tab[2])) ||
		((tab[3] == tab[4]) && (tab[4] == tab[5])) ||
		((tab[6] == tab[7]) && (tab[7] == tab[8])) ||
		((tab[0] == tab[4]) && (tab[4] == tab[8])) ||
		((tab[2] == tab[4]) && (tab[4] == tab[6])) ||
		((tab[0] == tab[3]) && (tab[3] == tab[6])) ||
		((tab[1] == tab[4]) && (tab[4] == tab[7])) ||
		((tab[2] == tab[5]) && (tab[5] == tab[8])))

Spróbuj z tablicą o wymiarach 10 x 10, 100 x 100 oraz n x n (i ewentualnie n x m)
6. Mieszasz warstwy logiki i prezentacji; to złe
7. Podziel to jak człowiek na nagłówki i pliki źródłowe (powiązanie z pkt. 1)
8. Najważniejsza zasada dla Ciebie na najbliższe miesiące (możesz ją sobie darować jak będziesz miał wprawę, na ten moment to powinna być dla Ciebie świętość):
każda funkcja może zawierać nie więcej niż 10 linijek kodu (albo 5, jeśli czujesz się na siłach; dobrze Ci to zrobi)

1 użytkowników online, w tym zalogowanych: 0, gości: 1