====== Cvičení 10, Objekty, Stromy ====== ===== náplň cvičení ===== ==== Objekty ==== Třídy pro komplexní čísla: * Třída obsahuje dvě proměnné ''real'' a ''imag'' * Konstruktor (metoda _init_) nastavuje tyto proměnné defaultně na 0 * Pro přímý výpis funkcí print je vhodné definovat metodu ''_str_'', která vrací string s formátovaným výstupem * Další možností reprezentace třídy je metoda ''_repr_'', která by měla vracet minimální popis třídy jako string * **Pozor: init a repr má v názvu dvě podtržítka!!! ** class Complex: def __init__(self, real=0, imag=0): self.real = real self.imag = imag def amplitude(self): return self.real*self.real + self.imag*self.imag def add(self, rhs): self.real += rhs.real self.imag += rhs.imag def sub(self, rhs): self.real -= rhs.real self.imag -= rhs.imag def __str__(self): sign = "+"; if (self.imag < 0): sign = "-"; return str(self.real) + sign + str(abs(self.imag)) + "i" def __repr__(self): return 'Complex('+str(self.real)+', '+str(self.imag)+')' def mul(self, rhs): r = self.real*rhs.real - self.imag*rhs.imag; i = self.real*rhs.imag + self.imag*rhs.real; self.real = r self.imag = i if __name__=="__main__": a = Complex() print("a=",a) b = Complex(1,-1) print("b=",b) a.add(b) print("a=",a) a.mul(b) print("a=",a) print("|a|=",a.amplitude()) print("|b|=",b.amplitude()) ==== Semestrální práce ==== * Semestrální práci je věnována [[https://cw.fel.cvut.cz/wiki/courses/b3b33alp/cviceni/semestralni_prace|samostatná stránka]]. * Stáhněte si ''player.py'', ''manager.py'', ''obstacles.py'' * Seznamte se s reprezentací překážek, realizováno třídou Obstacle (''obstackle.py'') * Implementujte * player.print_board() - vytiskne aktuální stav hracího plánu * player.is_in_board(x, y) - vrací ''True'', pokud se ''(x,y)'' nachází v poli, jinak ''False'' * player.can_player_move(fromx, x, y) - vrací ''True'', pokud může hráč provést krok ze své aktuální pozice na pozici ''(tox, toy)'' * Implementujte ''player.expand_move()'' tak, aby vracel alespoň jeden platný tah hráče.