Projekt: Gra 2048 - konsolowa implementacja gry w C++

Oto projekt gry 2048, który zrealizowałam w ramach projektu indywidualnego. Poniżej znajduje się wideo prezentujące działanie gry, skrócona dokumentacja projektu oraz kod programu.

Celem projektu programistycznego była implementacja gry logicznej "2048" jako aplikacji konsolowej za pomocą języka C++. Oryginalna gra "2048", stworzona przez Gabriele Cirulli w 2014 roku, szybko zdobyła popularność jako wciągająca gra logiczna, w której gracz łączy płytki o takich samych wartościach liczbowych, by osiągnąć płytkę o wartości 2048. Gra, będąca inspiracją dla tego projektu, ma na celu zapewnienie rozrywki oraz rozwijanie umiejętności logicznego myślenia i planowania strategii.

W ramach realizacji projektu zaimplementowano podstawową mechanikę gry, podobną do tej w oryginale, dodano także dodatkowe funkcjonalności, takie jak wybór języka (polskiego lub angielskiego), zapisywanie wyników graczy oraz wyświetlanie tablicy wyników w celu śledzenia postępów gry.

Kod programu

Zasady gry

Gra 2048 polega na przesuwaniu płytek na planszy o wymiarach 4x4. Przesuwanie można wykonać w czterech kierunkach: góra, dół, lewo i prawo. Przy każdym ruchu na planszy pojawia się nowa płytka o wartości 2 lub 4. Płytki o tej samej wartości, które zderzą się podczas ruchu, zostaną połączone w jedną płytkę o wartości będącej sumą wartości dwóch połączonych płytek. Celem gry jest osiągnięcie płytki o wartości 2048, co oznacza zwycięstwo. W przypadku zapełnienia planszy bez możliwości wykonania ruchu, przed osiągnięciem wartości 2048, gracz przegrywa.

Opis programu

Program został napisany w języku C++. Składa się z plików źródłowych i nagłówkowych: main.cpp, functions.h, functions.cpp, colors.h oraz colors.cpp. Korzysta z plików tekstowych: scores.txt, pl_instruction.txt, eng_instruction.txt.

Plik main.cpp zawiera główną pętlę programu oraz funkcje obsługujące: pobieranie nazwy użytkownika i sprawdzanie poprawności wprowadzonych danych, wybór języka i zmiana języka, wyświetlanie głównego menu, logikę głównego mechanizmu gry, inicjalizacji nowej planszy, generowania nowych płytek, pobranie decyzji o ruchu gracza i obsługę mechanizmu przesuwania płytek w lewo, prawo, w górę lub w dół, wyświetlanie planszy, obliczanie zdobytych punktów, sprawdzanie, czy osiągnięto koniec gry, wyświetlanie powiadomienia o końcu gry, aktualizowanie wyników graczy.

Pliki functions.h i functions.cpp zawierają deklaracje i definicje funkcji obsługujących odczytywanie plików z instrukcjami, pobieranie liczby od użytkownika, sprawdzanie obecności polskich znaków w wejściu oraz wyświetlanie wyników graczy.

Pliki colors.h i colors.cpp zawierają deklaracje i definicje manipulatorów formatowania tekstu, które umożliwiają zmianę koloru wyświetlanego tekstu w konsoli.

Program działa w pętli, która obsługuje menu gry. Umożliwia interakcję z graczem w głównym menu poprzez wyświetlanie instrukcji, rozpoczęcie nowej gry, wyświetlenie wyników graczy, zmianę nick'u (nazwy użytkownika), zmianę języka i zakończenie gry. Gracz może podejmować decyzje poprzez wybór opcji odpowiadającej danym klawiszom na klawiaturze, a program reaguje na te ruchy, sprawdzając poprawność danych, aktualizując planszę i sprawdzając warunki zakończenia gry.

Wyniki graczy są zapisywane w pliku scores.txt”. Pliki pl_instruction.txt i eng_instruction.txt zawierają instrukcje gry.

Instrukcja obsługi

Po uruchomieniu gry, pokazują się opcje wyboru języka. Wyświetlane dalej treści są dobierane odpowiednio do wybranego języka. Język można również zmienić dalej, z pozycji menu. Należy podać odpowiednią cyfrę 1 lub 2. W przypadku, gdy podano niepoprawne dane, program prosi o ponowne ich wprowadzenie.

Następnie na ekranie pojawią się instrukcje dotyczące zasad gry odpowiednie do wybranego języka. Należy przeczytać instrukcje i nacisnąć klawisz Enter, aby przejść dalej.

Gra prosi użytkownika o wpisanie swojego nicku. Po poprawnym podaniu nazwy, następuje przejście do menu. W przypadku, gdy podano niepoprawne dane, program prosi o ponowne ich wprowadzenie.

Po podaniu nicku, następuje przejście do menu programu, które wyświetla również nick aktualnego gracza. W menu programu użytkownik ma 6 opcji interakcji do wyboru. Wybór podejmuje poprzez wpisanie odpowiedniej cyfry. W przypadku, gdy podano niepoprawne dane, program prosi o ponowne ich wprowadzenie.

Po wybraniu opcji nowej gry, jest tworzona i wyświetlana w konsoli nowa plansza gry wraz z instrukcjami dot. sterowania. Sterowanie odbywa się poprzez wpisanie litery i zatwierdzenie jej klawiszem Enter. W przypadku, gdy podano niepoprawne dane, program prosi o ponowne ich wprowadzenie. Po każdym ruchu na planszy pojawia się nowa płytka o wartości 2 lub 4 (2 pojawia się z prawdopodobieństwem 80%). Płytki na planszy są wyświetlane w odpowiednich kolorach do wartości, co sprawia, że gra jest bardziej czytelna i przyjemniejsza dla oka. Wyświetlana jest również aktualna ilość zdobytych punktów.

Grę można skończyć na 3 sposoby: osiągnięcie wartości 2048 (wygrana), zapełnienie planszy bez możliwości ruchu (przegrana) lub powrót do menu. Dla odpowiedniego zdarzenia jest wyświetlany odpowiedni komunikat wraz z liczbą zdobytych punktów oraz czasem gry.

Po zakończonej grze użytkownik wraca do menu, w którym może wybrać opcję wyświetlenia tablicy wyników. Wyniki są wczytywane z pliku txt i aktualizowane po każdej grze.

Po wciśnięciu przycisku Enter, gracz wraca do menu. Po wybraniu opcji wyjścia z gry, wyświetlany jest pożegnalny komunikat. Po wyświetleniu komunikatu, program kończy swoją pracę.

Wykorzystane pomoce i inspiracje:

Gra „2048” autorstwa Gabriele Cirulli

Ostatnia aktualizacja: 12.06.2023 r.