niedziela, 30 października 2016

Zaczynamy tworzyć aplikacje okienkową

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