Projekt: tworzymy własną grę (7): Koniec gry i tablica wyników

Pierwsza część projektu             Poprzednia część projektu      

W tym odcinku kończy się przygoda z główną częścią gry, do której będziemy w następnych odcinkach dopisywać nowe funkcjonalności. Dodam dzisiaj jedną metodę do klasy Player oraz stworze osobną klasę obsługującą tylko i wyłącznie obsługę wyników gry w tym tabelę wyników i zapisywanie/odczyt wyników do pliku.

Tablica wyników

Najpierw nowa klasa, która obsłuży tablicę wyników. Zdecydowałem się umieścić ją osobno, bo to bardzo uniwersalny kawałek kodu, który może się przydać w innych projektach. Poniżej link do kodu, który zaraz będę omawiać: 

ScoreBoard.h + ScoreBoard.cpp

W tej klasie bardzo dużo pracy wykonuje konstruktor i destruktor. To w konstruktorze dochodzi do odczytu danych z pliku do tablicy wyników lub stworzenia pustej tablicy oraz następuje sortowanie wyników od najmniejszego, do największego. Zdecydowałem się na sortowanie „bąbelkowe” – jest to najprostsze i najszybsze w zapisie sortowanie, a w wypadku tylko 10 pozycji nie ustępuje szybkością innym, bardziej zaawansowanym algorytmom. Zastosowałem tu też najwygodniejszy i zarazem najbezpieczniejszy zapis kodu służący do odczytu/zapisu całej tablicy: for(auto& i: tab) i = 0– wypełnianie po kolei wszystkich komórek tablicy tab liczbą zero. Polecam zapamiętać ten zapis, bywa bardzo przydatny. Tablica wyników tworzona jest tylko dla wysokiej trudności gry, oczywiście można to zmienić albo na tej samej tablicy, albo tworząc dodatkowy plik wyników, lub zapisując dwie tablice wyników w jednym pliku, co możliwe, że w dalszej części tworzenia projektu zostanie wprowadzone.

Metoda showScoreBoard odpowiada za wyświetlanie wyników na ekranie oraz jeśli wynik gracza mieści się w pierwszej dziesiątce zapisuje ten wynik na ostatnim miejscu tablicy (czyli nadpisuje wynik, który opuszcza tabelę). 

W destruktorze dochodzi do zapisu tablicy wyników do pliku, a jeśli nie ma takiego pliku jest on tworzony i zapisywany. Zastosowana jest najprostsza forma zapisu pliku, bardzo użyteczna w przypadku małych ilości danych.

Koniec gry

Pora uzupełnić grę o zakończenie. Do klasy Player dodaje metodę o wdzięcznej nazwie gameOver i używam jej jako wyjście z funkcji startGame (plik game.cpp linia 40)  return p_player->gameOver(); zamykając w ten sposób główną pętlę gry. Jeszcze kilka drobnych poprawek, które z łatwością można znaleźć przy pomocy GitHuba i gra w wersji beta już gotowa (dla niektórych firm to już wersja Release, a cała reszta to DLC 😉 )

Link do aktualnej wersji gry na GitHub.

W następnej części zatrzymam się jeszcze nad kodem i postaram się go w miarę własnej wiedzy „udoskonalić”, szczególnie że w międzyczasie pisania sam nauczyłem się kilku nowych rzeczy, które warto by zastosować, oraz usłyszałem kilka uwag do kodu, które wypada wziąć pod uwagę. Tak więc, zamiast pisać DLC biorę się za Patch 0.2 🙂 

 

Inne:

W kodzie czasem w komentarzach używam na początku określenia TODO: – to bardzo wygodna opcja, dla osób korzystających z reShapera, taki komentarz podświetla się na niebiesko, oraz zaznacza na pasku bocznym reShapera, co bardzo pomaga odnaleźć takie miejsce.

Przyznam się do grzechu… uparłem się, zrobić interfejs graficzny gry przy pomocy biblioteki windows.h tak jak „Microsoft to wymyślił”. Wiem, że są łatwiejsze i bardziej eleganckie metody i że ten sposób to pisanie w C, a nie C++, ale niestety, założyłem się, że dam radę, więc nie mam wyjścia. Jak skończę, to opiszę moją walkę w osobnym artykule.

 

Następna część projektu

 

2 myśli na temat “Projekt: tworzymy własną grę (7): Koniec gry i tablica wyników

  1. Chyba to nie dla mnie😉

Dodaj komentarz