Do spisu modułów

2.1. Moduł Elementy Świata

 
2.1.3.1. ElementSwiata
2.1.3.2. Leming
2.1.3.3. Komandos
2.1.3.5. Bloker
2.1.3.7. Schodkarz
2.1.3.8. Kopacz
2.1.3.8. Pijus
2.1.3.9. Bomba
2.1.3.10.
SzczegolnyElementSwiata

Osoby pracujące nad modułem

  Autor: Damian Wójtowicz  
  Weryfikator: Michał Żmijewski  
  Tester: Anna Doroś  

Opis stałych i typów nieobiektowych

patrz:

#include <stale_Leming.h>

#include <stale_ElementySwiata>

Poczatek


Klasa ElementSwiata

Klasa abstrakcyjna - jest nad klasą wszystkich elementów świata oprócz terenu.
 
#include <ElementySwiata.h>
 
Atrybuty publiczne
  • Para pozycja
- pozycja obiektu na planszy
  • int liczba_impulsów
- liczba impulsów potrzebnych na wykonanie czynności
  • int licznik_impulsów
- ile impulsów już trwa aktualna czynność
  • int stan
- opis stanu obiektu

Funkcje publiczne

 
Wyjątki publiczne
 
  • class Niepowodzenie
- obiekt niepoprawnie wstawiony
  • class Trup
- obiekt już nic nie robi, należy go usunąć
 
Atrybuty prywatne (protected)
 
  • int wstawiony
- czy obiekt jest wstawiony na planszę
  • Plansza *plansza
- wskaźnik na planszę (świat, w którym się znajduje)
 
Funkcje prywatne (protected)
 

virtual void ElementSwiata::odbierzImpuls()
Funkcja abstrakcyjna. Jedyna funkcja powodująca aktywność ruchową elementów świata.

Przesłoniona w: Leming, Bomba, SzczegolnyElementSwiata.

ElementSwiata::ElementSwiata() [protected]
Tworzy nowy obiekt ElementSwiata i obiekty, z których się składa. Konstruktor jest chroniony ponieważ klasa jest abstrakcyjna.

virtual ElementSwiata::~ElementSwiata() [protected]
Niszczy obiekt ElementSwiata i obiekty, z których się składa.Destruktor jest chroniony ponieważ klasa jest abstrakcyjna.

virtual typ_rodzaj ElementSwiata::rodzaj() [protected]
Funkcja abstrakcyjna. Przedefiniowana we wszystkich nieabstrakcyjnych podklasach. Zwraca stałą chrakteryzującą obiekt (dla każego inna).

virtual void ElementSwiata::posprzataj() [protected]
Funkcja powoduje usunięcie obiektu z planszy (przed zniszczeniem).

Poczatek


Klasa Leming

Klasa implementująca zachowanie leminga w świecie.

Nadklasa: ElementSwiata

 
#include <ElementySwiata.h>

Atrybuty klasowe (statyczne)

Zmienne te informują o czasie trwania czynności przez niego wykonywanych oraz o właściwościach leminga w warunkach ekstremalnych.
  • static int predkosc_w_wodzie
  • static int predkosc_w_powietrzu
  • static int spadanie_w_wodzie
  • static int spadanie_w_powietrzu
  • static int pojemnosc_pluc
  • static int maksymalny_skok
  • static int czas_zmiany_stanu
Atrybuty publiczne
  • int kierunek
- kierunek poruszania sie obiektu
  • int zwrot_nosa
- zwrot leminga (prawo, lewo)

Funkcje publiczne

 
Wyjątki publiczne
 
  • class Doszedlem
- leming już doszedl do wyjścia i już nic nie będzie robił, można go usunąć
 
Atrybuty prywatne (protected)
 
  • int czas_w_wodzie
- czas przebywania w wodzie
  • int dlugosc_upadku
- czas jaki leming spadal (ostatni ciąg) nie licząc upadku w wodzie
 
Funkcje prywatne (protected)
 

Leming::Leming(Plansaza *wsk_plansza)
Tworzy nowy obiekt Leming i obiekty, z których się składa. wsk_plansza jest wskażnikiem na planszę (świat w któwym żyje leming).

virtual Leming::~Leming()
Niszczy obiekt Leming i obiekty, z których się składa.

virtual void ElementSwiata::odbierzImpuls()
Jedyna funkcja powodująca aktywność ruchową leminga. Leming dostaje kolejno impulsy i je zlicza, kiedyt zbierze odpowiednią ilość to wykonuje kolejny ruch.
Przesłoniona z: ElementSwiata.

virtual void ElementSwiata::umieraj()
Metoda, która zostaje przesyłana (z zewnątrz) kiegy leming ma umrzeć.

virtual typ_rodzaj Leming::rodzaj() [protected]
Zwraca stałą LEMING. Wszyskie podklasy Leminga zwracają swoją specyficzną stałą.

virtual void poprawCzasWWodzieIDlugoscUpadku(void) [protected]
W zależności od sytuacji , w jakiej leming się znajduje zwieksza lub nie zmienne: czas_w_wodzie, dlugosc_upadku.

int Leming::sprawdzCzyMamUmrzecLubCzyDoszedlemDoWyjscia(void)

Sprawdzenie czy leming ma umrzec z powodu braku powietrza lub wybuchu bomby lub czy doszedł do wyjście (jego cel osiagnięty)

int Leming::sprawdzCzyMamBycSpalonyWKwasie(void)

Sprawdzenie czy leming znajduje się w kwasie.

typ_teren Leming::sprawdzTeren(const Para wspolrzedne)

Sprawdza rodzaj terenu na planszy w punkcie 'wspolrzedne', jeśli punkt jest poza plansza to zwraca typ terenu: POWIETRZE.

int Leming::czyMiekkiTeren(typ_teren teren)

Funkcja sprawdza czy podany teren jest miękki (tzn .taki przez który przechodzi leming).

int Leming::czySchodyPrzeciwne(typ_teren cegla, int zwrot)

Sprawdza czy podana cegła jest przeciwna do zwrotu.

int Leming::czyPrzeszkadzaBloker(void)

Funkcja sprawdza czy na drodzie stonie stoi jakiś bloker, jeśli tak to zwraca1 (TAK), wpp 0 (NIE).

void Leming::przesunMnie(const Para na)

Przesuwa Leminaga na pozycje: 'na' lub jeśli pozycja jest poza plansza to leming ginie (rzuca wyjątek, że jest trupem).

void Leming::sprawdzCzyJestemWWodzie(void)

Funkcja sprawdza czy leming znajduje się w wodzie i uaktualnia zmienne z tym zwiazane.

int Leming::czyMamSpadac(void)

Funkcja sprawdza czy leming ma spadać.

void Leming::iCoDalej(void)

Leming stoi na twardzym gruncie i sparawdza swoje otoczenie aby zdecydować co ma zrobić (gdzie iść).

void Leming:: ruszamPoIdzie(void)

Wpoprzedniej czynności leming szedl i teraz sprawdza wstępnie jakiego rodzaju czynność wykonac *ć.

void Leming:: ruszamPoSpada(void)

W poprzedniej czynnosci leming spadał i teraz sprawdza czy nadal ma spadać czy możadl ża terłn twardy, wtedy sprawdza czy nie spadal zbyt długozre łuz jeśykonuje ruch */sli tak to umiera, w.

void Leming::ruszam(void)

Sprawdza wynik i rodzaj poprzedniej czynnosci i albo wykonuje nastepny ruch (czynnosc) albo rzuca wyjatek: Trup lub Doszedlem, kiedy ma być usuniety.

Poczatek


Klasa Komandos

Klasa abstrakcyjna - jej podklasy implementują zachowanie komandosów w świecie.

Nadklasa: Leming

 
#include <ElementySwiata.h>

Klasa posiada tylko konstruktory i destruktor chronione.


Klasa KomandosBezrobotny

Klasa abstrakcyjna - jej podklasy implementują zachowanie komandosów nic nie robiących w świecie.

Nadklasa: Komandos

 
#include <ElementySwiata.h>

Klasa posiada tylko konstruktory i destruktor chronione.


Klasa Bloker

Klasa implementuje zachowanie blokera.

Nadklasa: KomandosBezrobotny

 
#include <ElementySwiata.h>

Atrybuty klasowe

  • static int czas_stania

Określa czas jaki bloker stoi nie sprawdzając żadnych warunków (ich zmiany).

 

Funkcje prywatne

  • void virtual sprawdzamCzyStoje(void)

    Sprawdzenie czy bloker ma nadal stać czy może ma spadać.

  • void virtual iCoDalej(void)

    Bloker spadal i teraz jest na ziemi wiec 'decyduje', ze stoi.

  • void virtual ruszam(void)

    Przedefiniowana funkcja z nadklasy Leming bloker sprawdza wynik i rodzaj poprzedniej czynności i albo wykonuje następny ruch (czynnosc) albo rzuca wyjątek: Trup lub Doszedlem, kiedy ma być usunięty .

  • Bloker(Plansza *wsk_plansza, Para wspolrzedne)
  • ~Bloker()

Klasa KomandosPracujacy

Klasa abstrakcyjna.

Nadklasa: Komandos

 
#include <ElementySwiata.h>

Atrybuty publiczne

  • int zapas

Określa jaki zapas sił posiada jeszcze komandos.

 

Funkcje prywatne

  • int virtual czyMamPracowac(void) = 0

    Każdy komandos z podklasy przedefinowuje tę metodę - określając czy w warunkach jakich się znajduje może pracować.

  • void virtual dokonczPrace(void) = 0

    Funkcja wirtualna . Każdy komados w tej metodzie wykonuje czynności związane z ukończeniem swojej pracy.

  • void virtual iCoDalej(void)

    Funkcja przedefiniowana z klasy leming tak aby było możliwe wykonanie powyższych metod.

  • void virtual ruszam(void)

    Funkcja przedefiniowana z klasy leming tak aby było możliwe wykonanie powyższych metod.


Klasa Kopacz

Klasa abstrakcyjna. Podklasy implementują zachowanie się kopacz piomowych, poziomych, górnych i dolnych.

Nadklasa: KomandosPracujacy

 
#include <ElementySwiata.h>

Atrybuty klasowe

  • static int czas_kopania

 

Funkcje prywatne

  • Kopacz(Plansza *wsk_plansza, Para wspolrzedne, int zwrot)
  • virtual ~Kopacz()
  • int virtual czyTerenDoKopania(typ_teren teren)

    Funkcja sprawdza czy teren nadaje się do kopania.

  • void virtual dokonczPrace(void)

    Wykonanie czynności związanych z ukończeniem pracy (modyfikacja terenu).

 

Podklasy mają zdefiniowaną funkcję czyMamPracowac() - ktróra określa czy w danych warunkach kopacz może kopać (w różnych podklasch różni się tylko miejscem sprawdzania terenu)


Klasa Schodkarz

Klasa abstrakcyjna . Podklasy implementują zachowanie się schodkarzy piomowych, górnych i dolnych.

Nadklasa: KomandosPracujacy

 
#include <ElementySwiata.h>

Atrybuty klasowe

  • static int czas_budowania

Funkcje prywatne

  • Schodkarz(Plansza *wsk_plansza, Para wspolrzedne, int zwrot)
  • virtual ~Schodkarz()
  • int virtual czyTerenDoBudowania(typ_teren teren)

    Funkcja sprawdza czy podany teren nadaje się do budowania.

  • void virtual wstawSchodek(const Para pozycja, const typ_teren cegla)

    Funkcja wstawia określony schodek w określone miejsce.

 

Podklasy mają zdefiniowane funkcje czyMamPracowac() oraz dokonczPrace() - które są zdefiniowane zgodnie ze specyfikacją podaną wyżej. W podklasach rożnią się tylko miejscem sprawdzania czy można kopac i miejscem kopania.


Klasa Pijus

Klasa jest klasa dodana w ramach uzgodnionej modyfikacji programu. Umiejscowienie tej klasy w tym miejscu w hierarchii klas jest uzasadnione pomimo dużego podobieństwa (przynajmniej na pierwszy rzut oka) pijusa do kopacza poziomego. Wynika to stad iz istnieją sytuacje w których sie różnią np. jest problem ze schodami w wodzie (schody pierwszy plan, woda drugi plan) poza tym kopacz w momencie pracy porusza się, a pijus stoi obok kratek z których wypompowuje wode.

Nadklasa: KomandosPracujacy

 
#include <ElementySwiata.h>

Atrybuty klasowe

  • static int czas_picia

Funkcje prywatne

  • int virtual czyTerenNaKropceDoPicia(Para wspol)

    Określa czy teren o podanych współrzędnych nadaje się do picia..

  • void virtual dokonczPrace(void)

    Powoduje, że woda którą pijus wypompowywał znika i pijawia się powietrze.

  • int virtual czyMamPracowac(void)

    Metoda sprawdza czy pijus może pić będąc w miejscu gdzie stoi.

Funkcje publiczne

  • Pijus(Plansza *wsk_plansza, Para wspolrzedne, int zwrot)

Klasa Bomba

  • Klasa abstrakcyjna - jej podklasy implementują zachowanie komandosów w świecie.

    Nadklasa: ElementSwiata

     
    #include <ElementySwiata.h>

    Atrybuty klasowe

    • static int czas_picia
    • static int czas_oczekiwania
    • static int predkosc_wybuchu
    • static int predkosc_zaniku
       

    Funkcje prywatne

  • void virtual modyfikujKropke(Para wspolrz, typ_czynnosci_bomby czynnosc)

    Powoduje modyfikacje terenu (rodzaj zależy od parametru czynnosc) w miejscu: wspolrz.

  • void virtual modyfikujTeren(typ_czynnosci_bomby czynnosc)

    Powoduje modufikację terenu w określonym promieniu.

Funkcje prywatne

  • Bomba(Plansza *wsk_plansza, Para wspolrzedne)
  • void virtual odbierzImpuls(void)

    Funkcja zdefinowana na potrzeby bomby - wykonanie czynności bomby w odpowiedniej kolejności: oczekiwanie, wybuch, zanikanie.

Wyjątek

  • class Koniec

    Rzucany kiedy bomba zakończy swoje czynności.


Klasa SzvzególnyElementSwiata

  • Klasa abstrakcyjna. Jej podklasy odpowiadają jakimś niestandardowym miejscom w świacie lemingów jak np;: wjeście i wyjście.

    Nadklasa: ElementSwiata

     
    #include <ElementySwiata.h>

    Atrybuty klasowe

    • static int czas_ruchu_elementu_szczegolnego

    Atrybuty prywatne

    • int maksymalne_przesuniecie
    • int aktualne_przesuniecie

    Atrybuty publiczne

    • int zwrot

    Funkcje prywatne

  • SzczegolnyElementSwiata(Plansza *wsk_plansza, int przesuniecie)
  • virtual ~SzczegolnyElementSwiata()
  • int virtual przesunMnie(const Para na) = 0

Funkcja abstrakcyjna. Zimplementowana w podklasach - przesuwa obiekt na pozycje: 'na' lub jeśli pozycja jest poza plansza to zwraca 0 - tzn. operacja nie mogła być wykonana.

  • void virtual swojeCzynnosci(void)

    Obiekty używając tej metody mogą wykonać jakieś nietypowe czynności związane z obsłużeniem siebie, np.: Wejscie - sprwadza czy ma się zamknąć, jeśli tak to zmienia stan na zamkniete, a jeśli już jest zamknięte to ustawia zmienną, aby już się nie zamykać .

Funkcje publiczne

  • void virtual odbierzImpuls(void)

    Decyzja czy już ma należy wykonać kolejnż czynności jeśli tak to przygotowanie jej w zależnosci od poprzedniej i otoczenia.