Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Klasa Lokacja
- # Zawiera w sobie wszystkie parametry (właściwości) odnośnie konkretnej lokacji
- # Zawiera również metody przydatne przy operacjach na lokacjach
- class Lokacja():
- # Właściwości klasy Lokacja
- # nazwa i opis są ustawione z domyślnymi wartościami
- nazwa = "domyślna nazwa lokacji"
- opis = "Domyślny opis lokacji."
- # współrzędne danej lokalizacji na płaszczyźnie x y
- # domyślnie nie są zainicjalizowane żadną wartością
- x = None
- y = None
- # metoda umożliwiająca jednoczesne ustawienie x i y
- # 'self' dodajemy do każdej metody jako pierwszy parametr, okresla on że metoda operuje na bieżącym obiekcie
- # 'self' podany przed nazwą zmiennej oznacza, że jest to zmienna przypisana do bieżącego obiektu
- def ustawKoordynaty(self, nowy_x, nowy_y):
- self.x = nowy_x
- self.y = nowy_y
- # metoda wyświetlająca nazwę oraz opis lokacji
- def wyswietl(self):
- print("Lokacja: " + self.nazwa)
- print(self.opis)
- # Klasa Swiat
- # Zawiera w sobie informacje na temat całego zbioru (mapy) lokalizacji
- # Posiada jedną właściwość (listę lokacji) oraz metody ułatwiające interakcję między poszczególnymi lokacjami
- class Swiat():
- # właściwość typu lista przechowująca wszystkie obiekty lokacji
- # w wygodny sposób przechowuje wszystkie referencje do poszczególnych lokacji
- listaLokacji = []
- # metoda służąca do dodawania lokacji do świata
- # dodanie lokacji jest równoznaczne z appendowaniem obiektu lokacja do listy lokacji
- def dodajLokacje(self, lokacja):
- self.listaLokacji.append(lokacja)
- # metoda zwracająca lokację (obiekt) na podstawie podanych współrzędnych
- # aby znaleźć obiekt iterujemy po elementach z listy i sprawdzamy ich współrzędne
- # w przypadku nie znalezienia obiektu zwracamy None (czyli nic)
- def pobiezLokacje(self, x, y):
- for lokacja in self.listaLokacji:
- if lokacja.x == x and lokacja.y == y:
- return lokacja
- return None
- # metoda wyświetlająca wszystkie dostępne wyjścia
- # aby sprawdzić czy istnieje wyjście, sprawdzamy czy bezpośrednio w danym kierunku znajduje się lokacja
- # np. jeśli jesteśmy na koordynatach (x = 0, y = 0) możemy iść na północ tylko jeśli istnieje komnata (x = 0, y = 1)
- # aby sprawdzić czy istnieje dana lokacja, używamy metody 'pobiezLokacje'
- def wyswietlWyjscia(self, x, y):
- wyjscia = "Wyjścia: "
- if self.pobiezLokacje(x, y + 1):
- wyjscia = wyjscia + "północ[n] "
- if self.pobiezLokacje(x, y - 1):
- wyjscia = wyjscia + "południe[s] "
- if self.pobiezLokacje(x + 1, y):
- wyjscia = wyjscia + "wschód[e] "
- if self.pobiezLokacje(x - 1, y):
- wyjscia = wyjscia + "zachód[w] "
- print(wyjscia)
- #################################################
- ########## TU ZACZYNA SIE WLASCIWA GRA ##########
- #################################################
- # najpierw tworzymy obiekt swiat klasy Swiat() - wystarczy jeden obiekt na całą grę
- swiat = Swiat()
- ####################
- ### TWORZENIE ŚWIATA
- # utwórz nowy obiekt lokacja
- nowaLokacja = Lokacja()
- # ustaw nazwę, opis oraz koordynaty (korzystając z metody ustawKoordynaty)
- nowaLokacja.nazwa = "Komnata"
- nowaLokacja.opis = "Nasza pierwsza komnata, z której rozpoczynamy przygodę. Ma podłogę, sufit i nawet jakieś meble."
- nowaLokacja.ustawKoordynaty(0, 0)
- # dodaj lokację do swiata gry
- swiat.dodajLokacje(nowaLokacja)
- # tworzenie kolejnych komnat analogicznie do poprzedniego bloku
- # zwróć uwagę, że mimo wykorzystania tej samej nazwy obiektu (nowaLokacja), obiekty dodane do świata nie zostają nadpisywane
- # dzieje się tak, ponieważ w liście lokacji w obiekcie swiat istnieje już referencja (powiązanie) z właściwą lokacją
- nowaLokacja = Lokacja()
- nowaLokacja.nazwa = "Korytarz przechodni"
- nowaLokacja.opis = "Korytarz, który znajduje się na północ od naszego miejsca startu. Póki co nic tu nie ma, ale kto wie co przyniesie jutro."
- nowaLokacja.ustawKoordynaty(0, 1)
- swiat.dodajLokacje(nowaLokacja)
- nowaLokacja = Lokacja()
- nowaLokacja.nazwa = "Komnata wschodnia"
- nowaLokacja.opis = "Cała komnata zawalona jest zabugowanym kodem. Poza tym nic tu nie ma."
- nowaLokacja.ustawKoordynaty(-1, 1)
- swiat.dodajLokacje(nowaLokacja)
- nowaLokacja = Lokacja()
- nowaLokacja.nazwa = "Komnata zachodnia"
- nowaLokacja.opis = "To jest komnata zapomnianych pomysłów. Znajduje się tu masa niedokończonych projektów. Chyba ludzie często tu bywają."
- nowaLokacja.ustawKoordynaty(1, 1)
- swiat.dodajLokacje(nowaLokacja)
- nowaLokacja = Lokacja()
- nowaLokacja.nazwa = "Wąski korytarz"
- nowaLokacja.opis = "Korytarz łączący korytarz przechodni z pokojem na samej północy. Uważaj, by nie potknąć się o kable."
- nowaLokacja.ustawKoordynaty(0, 2)
- swiat.dodajLokacje(nowaLokacja)
- nowaLokacja = Lokacja()
- nowaLokacja.nazwa = "Północny pokój"
- nowaLokacja.opis = "Pokój zwierzeń. Możesz się zwierzyć. Albo i nie."
- nowaLokacja.ustawKoordynaty(0, 3)
- swiat.dodajLokacje(nowaLokacja)
- #######################
- ### TEST PORUSZANIA SIĘ
- # dopóki nie zaimplementujemy poruszania się - koordynaty będziemy zmieniali bezpośrednio w kodzie
- # najpierw wybierzmy pozycję startową
- x = 0
- y = 0
- # pobiezmy najpierw lokację na podstawie koordynatów (metoda klasy Swiat)
- lokacja = swiat.pobiezLokacje(x, y)
- # wyświetanie lokacji
- lokacja.wyswietl()
- # wyświetlanie możliwych wyjść (implementujemy to osobno, ponieważ wyliczanie wyjść jest możliwe dopiero przy klasie Świat)
- swiat.wyswietlWyjscia(lokacja.x, lokacja.y)
- # ekstra linia dla czytelności
- print("")
- # pójdźmy kawałek na północ
- y = y + 1
- # dokładnie ten sam kod, co wcześniej - może warto w przyszłości to uprościć?
- lokacja = swiat.pobiezLokacje(x, y)
- lokacja.wyswietl()
- swiat.wyswietlWyjscia(lokacja.x, lokacja.y)
- print("")
- # na wschód
- x = x - 1
- lokacja = swiat.pobiezLokacje(x, y)
- lokacja.wyswietl()
- swiat.wyswietlWyjscia(lokacja.x, lokacja.y)
- print("")
- # dwa razy na zachód
- x = x + 1
- x = x + 1
- lokacja = swiat.pobiezLokacje(x, y)
- lokacja.wyswietl()
- swiat.wyswietlWyjscia(lokacja.x, lokacja.y)
- print("")
- # wschód, północ
- x = x - 1
- y = y + 1
- lokacja = swiat.pobiezLokacje(x, y)
- lokacja.wyswietl()
- swiat.wyswietlWyjscia(lokacja.x, lokacja.y)
- print("")
- # jeszcze raz północ
- y = y + 1
- lokacja = swiat.pobiezLokacje(x, y)
- lokacja.wyswietl()
- swiat.wyswietlWyjscia(lokacja.x, lokacja.y)
- print("")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement