- trace = []
- class Rakieta:
- '''
- Obiekt Car opisuje nam wlasnosci samochodow.
- Args:
- masa (num): trzyma mase rakiety
- predkosc_maks (num): trzyma predkosc maksymalna rakiety
- ilosc_lotow (num): opisuje maksymalna ilosc lotow
- Attributes:
- pozycja: tu przechowujemy informacje o pozycji rakiety
- masa: tu przechowujemy informacje o masie rakiety
- predkosc_maks: tu przechowujemy informacje o predkosci maksymalnej
- x: tu przechowujemy informacje o pozycji x
- y: tu przechowujemy informacje o pozycji y
- ilosc_lotow: tu przechowujemy informacje o ilosci lotow
- paliwo: tu przechowujemy informacje o ilosci paliwa
- nr_seryjny: tu przechowujemy informacje o nr_seryjnym
- '''
- nr_seryjny = 1
- def __init__(self, masa, predkosc_maks, ilosc_lotow):
- self.pozycja = (0,0)
- self.masa = masa
- self.predkosc_maks = predkosc_maks
- self.x = 0
- self.y = 0
- self.ilosc_lotow = ilosc_lotow
- self.paliwo = 100
- self.nr_seryjny = self.__class__.nr_seryjny
- self.zwieksz_nr_seryjny()
- def check_pos(pozycja): # nie ma self!
- assert isinstance(pozycja, (list, tuple)), "pos to lista lub krotka"
- assert len(pozycja) == 2, "pos powinna miec 2 elementy"
- assert all([isinstance(el, (int, float)) for el in pozycja]), "wszystkie elementy powinny byc liczbami"
- assert pozycja[1] >= 0, "wysokosc na jakiej jest Rakieta nie powinna byc ujemna"
- def zwieksz_nr_seryjny(self):
- if self.nr_seryjny < 99:
- self.__class__.nr_seryjny += 1
- else:
- raise TypeError("Koniec produkcji")
- def get_masa(self):
- return self.masa
- def get_predkosc_maks(self):
- return self.predkosc_maks
- def get_pozycja(self):
- return (self.x , self.y)
- def get_ilosc_lotow(self):
- return self.ilosc_lotow
- def get_paliwo(self):
- return self.paliwo
- def get_nr_seryjny(self):
- return "R"+ str(self.nr_seryjny)
- def set_masa(self, x):
- if isinstance(x, (int, float)) and x > 0:
- self.masa = x
- else:
- raise TypeError("Masa powinna byc liczba INT lub FLOAT")
- def set_predkosc_maks(self, x):
- if isinstance(x, (int, float)) and x > 0:
- self.predkosc_maks = x
- else:
- raise TypeError("Predkosc maksymalna powinna byc liczba INT lub FLOAT")
- def set_pozycja(self, pozycja):
- Rakieta.check_pos(pozycja)
- stare_x = self.x
- stare_y = self.y
- self.pozycja = pozycja
- self.x = pozycja[0]
- self.y = pozycja[1]
- a = Rakieta.odleglosc_punkt(self, stare_x, stare_y)//1
- roznica = self.paliwo - a
- Rakieta.set_paliwo(self, roznica)
- self.ilosc_lotow -= 1
- if self.ilosc_lotow < 1:
- Rakieta.brak_lotu(self)
- return self.pozycja, trace.append((self.x, self.y))
- def set_x(self, x):
- test_pos = x, self.pozycja[1]
- return self.set_pozycja(test_pos)
- def set_y(self, y):
- test_pos = self.pozycja[0], y
- return self.set_pozycja(test_pos)
- def set_ilosc_lotow(self, x):
- if isinstance(x, int) and x > 0:
- self.ilosc_lotow = x
- else:
- raise TypeError("Ilosc powinna byc liczba INT")
- def set_paliwo(self, x):
- if isinstance(x, (int, float)) and x > 0:
- self.paliwo = x
- else:
- self.y = 0
- trace.append((self.x,self.y))
- self.paliwo = 0
- print(trace)
- raise TypeError("Koniec paliwa")
- def move_left(self, x):
- return self.set_x(self.x - x)
- def move_right(self, x):
- return self.set_x(self.x + x)
- def move_up(self, x):
- return self.set_y(self.y + x)
- def move_down(self, x):
- return self.set_y(self.y - x)
- def powrot(self):
- Rakieta.set_pozycja(self,(0,0))
- def odleglosc_od_bazy(self):
- return ((self.x)**2 + (self.y)**2)**(1/2)
- def odleglosc_punkt(self, a, b):
- return ((a - self.x)**2 + (b - self.y)**2)**(1/2)
- def brak_lotu(self):
- self.y = 0
- self.paliwo = 0
- trace.append((self.x,self.y))
- print(trace)
- raise TypeError("Brak lotow")