Witam
Dzisiaj zaczniemy tworzyć nową grę. Jednak tym razem będzie to aplikacja okienkowa. Ponownie stworzymy grę w statki jednak tym razem będzie ona wyglądać w ten sposób
Aplikacje pisałem przy użyciu biblioteki SFML 2.0, ale powinna ona działać również z późniejszymi wersjami dej biblioteki, ponieważ zachowuje ona kompatybilność wsteczną. Jeśli pierwszy raz słyszysz o tej bibliotece koniecznie odwiedź oficjalną stronę i zapoznaj się ze znajdującym tam tutorialem lub jeśli nie znasz angielskiego odwiedź blog Szymona Siarkiewicza. Oprócz znajomości tej biblioteki musisz również umieć korzystać z obiektowego C++, możesz się go nauczyć z kursu Mirosława Zelenta.
W naszym projekcie stworzymy trzy klasy, teraz pokrótce opisze do czego służy każda klasa
pole.h-ta klasa będzie odpowiadać za narysowanie każdego pola i wyświetlenie czy statek na tym polu został trafiony czy nie czy gracz porostu spudłował.
engine.h-ta klasa odpowiada za główna mechanikę gry, będzie sprawdzać czy gracz nie wybrał któregoś pola i będzie wywoływać odpowiednie funkcje klasy pole.
game.h-jest to główna klasa całej aplikacji odpowiada ona za renderowanie okna i początkowe menu.
Teraz stworzymy klasę pole, dzisiaj zajmiemy się tylko plikiem nagłówkowym.
#include <SFML/Graphics.hpp>
#pragma once
class Pole: public sf::Drawable,
sf::Transformable
{
bool ship; //wartość prawda jeżeli na polu znajduje się statek
bool shot; //wartość prawda jeżeli ple było zaznaczone
int height, width, marginX, marginY, size_=48;//?
bool IA; //wartość prawda jeżeli pole jest komputera, jest ona potrzebna ponieważ będziemy używać tej samej klasy do rysowania naszych pul i pul przeciwnika
public:
Pole(int=0,int=0,int=1,int=1,bool=0,bool=0,bool=0);
~Pole();
//konstruktor i destruktor
void setPosition(int,int,int,int); //ustawia pozycje pola
bool getShip();//zwraca prawdę jeśli na polu jest statek
bool getShot();//zwraca prawdę jeśli było trafienie
bool getBounds(sf::Vector2f &m); //zwraca prawdę jeśli myszka najedzie na obiekt
void setShot(bool); //zmienia wartość zmiennej shot
void setShip(bool); //zmienia wartość zmiennej ship
void setIA(bool); //zmienia wartość zmiennej IA
void update(); //aktualizuje informacje o polu
void drawShot(); //rysuje strzał który był nietrafiony
void drawShip(); //rysuje statek
void drawHit(); //rysuje celny strzał
sf::RectangleShape shape; //puste pole
sf::CircleShape circle; //statek
sf::RectangleShape cross[2]; //krzyżyk symbolizujący pudło
virtual void draw(sf::RenderTarget &target,sf::RenderStates states) const; //funkcja umożliwiająca transformowanie obiektów klasy pole
};
Chciałbym teraz dokładniej opisać linijkę którą oznaczyłem "//?":
width i height-oznaczają współrzędne danego pola względem całej planszy gracza licząc od lewego górnego rogu.
marginX i marginY-oznaczają jaką odległość ma mieć lewy górny róg planszy od lewego górnego narożnika okna aplikacji.
size-oznacza porostu wielkość jednego pola.
Podsumowanie
Na dziś już starczy tego pisania. Zachęcam do samodzielnego przeanalizowania kodu znajdującego się na moim profilu github. Jak zawsze zachęcam do komętowania.
Brak komentarzy:
Prześlij komentarz