{"id":328,"date":"2020-04-15T12:22:41","date_gmt":"2020-04-15T11:22:41","guid":{"rendered":"https:\/\/stachura-terlecka.pl\/?page_id=328"},"modified":"2020-04-15T12:22:41","modified_gmt":"2020-04-15T11:22:41","slug":"programowanie-obiektowe-cz-3","status":"publish","type":"page","link":"https:\/\/stachura-terlecka.pl\/?page_id=328","title":{"rendered":"Programowanie obiektowe cz 3"},"content":{"rendered":"<h2> Programowanie obiektowe cz 3<\/h2>\n<h3> Do przygotowania przed zaj\u0119ciami<\/h3>\n<p>* Python dla ka\u017cdego. Podstawy programowania. &#8211; Michael Dawson &#8211; Helion **R** &#8211; Rozdzia\u0142 9. Programowanie obiektowe. Gra Blackjack.<\/p>\n<h3> Cel i tematyka zaj\u0119\u0107<\/h3>\n<p>Dzisiejsze laboratorium ma na celu zapoznanie Pa\u0144stwa z nast\u0119puj\u0105cymi zagadnieniami:<br \/>\n* tworzenie obiekt\u00f3w r\u00f3\u017cnych klas w jednym programie,<br \/>\n* umo\u017cliwienia obiektom wzajemnego komunikowania si\u0119,<br \/>\n* tworzenie z\u0142o\u017conychobiekt\u00f3w jako kombinacji prostszych.<\/p>\n<h4> &#8211; Zadanie przypominaj\u0105ce<\/h4>\n<p>* Utw\u00f3rz program w kt\u00f3rym skonkretyzowane jest kilka obiekt\u00f3w klasy Critter, i ka\u017cdy z tych obiekt\u00f3w ma losowo przypisany poziom g\u0142odu i nudy, wy\u015bwietl te parametry.<\/p>\n<h3> Komunikaty<\/h3>\n<p>Obiekty komunikuj\u0105 si\u0119 poprzez wysy\u0142anie i odbieranie komunikat\u00f3w.<\/p>\n<h5> Wysy\u0142anie komunikat\u00f3w<\/h5>\n<p>Poni\u017cszy program konkretyzuje dwa obiekty r\u00f3\u017cnych klas. Pierwszy z nich to obiekt klasy Character przypisany do zmiennej \/\/hero\/\/, za\u015b drugi to obiekt klasy Creatures przypisany do zmiennej \/\/monster\/\/. Podczas wywo\u0142ania metody blast klasy Character podajemy jako argument nazw\u0119 zmiennej do kt\u00f3rej przypisali\u015bmy skonkretyzowany obiekt przeciwnika &#8211; w naszym przypadku to \/\/monster\/\/, a nast\u0119pnie wywo\u0142ujemy metod\u0119 die obiektu monster, kt\u00f3ra realizuje &#8220;\u015bmier\u0107 przeciwnika&#8221;.<br \/>\n<code python=\"\"><br \/>\n# Program demonstruj\u0105cy wsp\u00f3\u0142dzia\u0142anie obiekt\u00f3w<\/code><\/p>\n<p><code python=\"\">class Character(object):<br \/>\n\"\"\" Posta\u0107 gracza. \"\"\"<br \/>\ndef blast(self, enemy):<br \/>\nprint(\"Twoje strza\u0142y dosi\u0119gaj\u0105 Twojego przeciwnika.\\n\")<br \/>\nenemy.die()<\/code><\/p>\n<p><code python=\"\">class Creatures(object):<br \/>\n\"\"\" Obcy w grze strzelance. \"\"\"<br \/>\ndef die(self):<br \/>\nprint(\"Strza\u0142y przeciwnika mnie dosi\u0119g\u0142y - to ju\u017c m\u00f3j koniec.\")<\/p>\n<p># main<br \/>\nprint(\"\\t\\tWalka\\n\")<\/p>\n<p>hero = Character()<br \/>\nmonster = Creatures()<br \/>\nhero.blast(monster)<\/p>\n<p>input(\"\\n\\nAby zako\u0144czy\u0107 program, naci\u015bnij klawisz Enter.\")<\/p>\n<p><\/code><code python=\"\"><\/code><\/p>\n<h5> Odbieranie komunikat\u00f3w<\/h5>\n<p>Odbieranie komunikat\u00f3w to nic innego jak wykonanie metody obiektu (w powy\u017cszym przyk\u0142adzie jest to obiekt \/\/monster\/\/ klasy Creatures), nazwa obiektu jest przekazywana do metody wysy\u0142aj\u0105cej komunikat.<\/p>\n<h4> Tworzenie obiekt\u00f3w<\/h4>\n<p>W pierwszym laboratorium dotycz\u0105cym programowania obiektowego poznali\u015bcie Pa\u0144stwo tworzenie obiekt\u00f3w. Obiekty te by\u0142y proste np. dom, mo\u017cemy jednak sobie wyobrazi\u0107, \u017ce ten sam dom jest obiektem sk\u0142adaj\u0105cym si\u0119 z innych obiekt\u00f3w takich jak &#8211; pustaki, okna, drzwi, dach, pokoje itp. Poni\u017cej zobaczycie Pa\u0144stwo przyk\u0142ad obiektu z\u0142o\u017conego:<br \/>\n<code python=\"\"><br \/>\n#program prezentuj\u0105cy tworzenie obiekt\u00f3w z\u0142o\u017conych na przyk\u0142adzie kart<\/code><\/p>\n<p><code python=\"\">class Card(object):<br \/>\n\"\"\" Karta do gry. \"\"\"<br \/>\nRANKS = [\"A\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\",<br \/>\n\"8\", \"9\", \"10\", \"J\", \"Q\", \"K\"]<br \/>\nSUITS = [\"dzwonek\", \"rzo\u0142\u0105d\u017a\", \"wino\", \"serce\"]<\/code><\/p>\n<p><code python=\"\">def __init__(self, rank, suit, face_up = True):<br \/>\nself.rank = rank<br \/>\nself.suit = suit<br \/>\nself.is_face_up = face_up<\/p>\n<p>def __str__(self):<br \/>\nif self.is_face_up:<br \/>\nrep = self.rank + self.suit<br \/>\nelse:<br \/>\nrep = \"XX\"<br \/>\nreturn rep<\/p>\n<p>def flip(self):<br \/>\nself.is_face_up = not self.is_face_up<\/p>\n<p>class Hand(object):<br \/>\n\"\"\" R\u0119ka - wszystkie karty trzymane przez gracza. \"\"\"<br \/>\ndef __init__(self):<br \/>\nself.cards = []<\/p>\n<p>def __str__(self):<br \/>\nif self.cards:<br \/>\nrep = \"\"<br \/>\nfor card in self.cards:<br \/>\nrep += str(card) + \"\\t\"<br \/>\nelse:<br \/>\nrep = \"<pusta>\"<br \/>\nreturn rep<\/pusta>\n<p>def clear(self):<br \/>\nself.cards = []<\/p>\n<p>def add(self, card):<br \/>\nself.cards.append(card)<\/p>\n<p>def give(self, card, other_hand):<br \/>\nself.cards.remove(card)<br \/>\nother_hand.add(card)<\/p>\n<p>class Deck(Hand):<br \/>\n\"\"\" Talia kart. \"\"\"<br \/>\ndef populate(self):<br \/>\nfor suit in Card.SUITS:<br \/>\nfor rank in Card.RANKS:<br \/>\nself.add(Card(rank, suit))<\/p>\n<p>def shuffle(self):<br \/>\nimport random<br \/>\nrandom.shuffle(self.cards)<\/p>\n<p>def deal(self, hands, per_hand = 1):<br \/>\nfor rounds in range(per_hand):<br \/>\nfor hand in hands:<br \/>\nif self.cards:<br \/>\ntop_card = self.cards[0]<br \/>\nself.give(top_card, hand)<br \/>\nelse:<br \/>\nprint(\"Nie mog\u0119 dalej rozdawa\u0107. Zabrak\u0142o kart!\")<\/p>\n<p>if __name__ == \"__main__\":<br \/>\nprint(\"To modu\u0142 zawieraj\u0105cy klasy do gry w karty.\")<br \/>\ninput(\"\\n\\nAby zako\u0144czy\u0107 program, naci\u015bnij klawisz Enter.\")<\/p>\n<p><\/code><code python=\"\"><\/code><code python=\"\"><\/code><\/p>\n<h4> Zadania do samodzielnego wykonania na laboratoriach<\/h4>\n<p>* Napisz dwie klasy &#8211; klas\u0119 bohatera i klas\u0119 przeciwnika. W obu klasach stw\u00f3rz metod\u0119 walcz i obrona. Metoda obrona ma by\u0107 wywo\u0142ywana przez metod\u0119 walcz przeciwnika z argumentem r\u00f3wnym obra\u017ceniom. Obra\u017cenia przekazywane do metody obrona sk\u0142adaj\u0105 si\u0119 z dw\u00f3ch element\u00f3w &#8211; pierwszy to sta\u0142a liczba np. 5 za\u015b drugi to liczba losowana z zakresu od 1 do 20.<\/p>\n<h4> &#8211; Przyk\u0142ady u\u017cywane na laboratoriach<\/h4>\n<p>Przyk\u0142ady pochodz\u0105 z ksi\u0105\u017cki<br \/>\n* Podstawow\u0105 ksi\u0105\u017ck\u0105 wykorzystywan\u0105 na laboratorium b\u0119dzie: \u201ePython dla ka\u017cdego. Podstawy programowania Wydanie III\u201d, autor Michael Dawson, Wydawnictwo Helion **(R)**<\/p>\n<h3> Zadanie domowe<\/h3>\n<p>**Wszystkie zadania domowe nale\u017cy archiwizowa\u0107 poniewa\u017c w dalszej cz\u0119\u015bci laboratori\u00f3w b\u0119dziecie je Pa\u0144stwo rozbudowywa\u0107**<br \/>\n* W czasie dzisiejszych laboratori\u00f3w stworzyli\u015bcie Pa\u0144stwo prosty system walki. Prosz\u0119 rozbudowa\u0107 go o mo\u017cliwo\u015b\u0107 wyboru przez u\u017cytkownika walki lub ucieczki.<br \/>\n* Powy\u017cszy program prosz\u0119 rozbudowa\u0107 o metod\u0119 heal umo\u017cliwiaj\u0105c\u0105 leczenie gracza. Warto\u015b\u0107 o jak\u0105 zostanie podniesiona ilo\u015b\u0107 punkt\u00f3w ma zosta\u0107 wylosowana z zakresu 1-8. Po leczeniu gracz nie mo\u017ce mie\u0107 wi\u0119cej punkt\u00f3w \u017cycia ni\u017c maksymalna liczba punkt\u00f3w \u017cycia postaci.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Programowanie obiektowe cz 3 Do przygotowania przed zaj\u0119ciami * Python dla ka\u017cdego. Podstawy programowania. &#8211; Michael Dawson &#8211; Helion **R** &#8211; Rozdzia\u0142 9. Programowanie obiektowe. Gra Blackjack. Cel i tematyka zaj\u0119\u0107 Dzisiejsze laboratorium ma na celu zapoznanie Pa\u0144stwa z nast\u0119puj\u0105cymi zagadnieniami: * tworzenie obiekt\u00f3w r\u00f3\u017cnych klas w jednym programie, * umo\u017cliwienia obiektom wzajemnego komunikowania si\u0119, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/stachura-terlecka.pl\/index.php?rest_route=\/wp\/v2\/pages\/328"}],"collection":[{"href":"https:\/\/stachura-terlecka.pl\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/stachura-terlecka.pl\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/stachura-terlecka.pl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/stachura-terlecka.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=328"}],"version-history":[{"count":2,"href":"https:\/\/stachura-terlecka.pl\/index.php?rest_route=\/wp\/v2\/pages\/328\/revisions"}],"predecessor-version":[{"id":330,"href":"https:\/\/stachura-terlecka.pl\/index.php?rest_route=\/wp\/v2\/pages\/328\/revisions\/330"}],"wp:attachment":[{"href":"https:\/\/stachura-terlecka.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=328"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}