Programowanie obiektowe cz 3
Do przygotowania przed zajęciami
* Python dla każdego. Podstawy programowania. – Michael Dawson – Helion **R** – Rozdział 9. Programowanie obiektowe. Gra Blackjack.
Cel i tematyka zajęć
Dzisiejsze laboratorium ma na celu zapoznanie Państwa z następującymi zagadnieniami:
* tworzenie obiektów różnych klas w jednym programie,
* umożliwienia obiektom wzajemnego komunikowania się,
* tworzenie złożonychobiektów jako kombinacji prostszych.
– Zadanie przypominające
* Utwórz program w którym skonkretyzowane jest kilka obiektów klasy Critter, i każdy z tych obiektów ma losowo przypisany poziom głodu i nudy, wyświetl te parametry.
Komunikaty
Obiekty komunikują się poprzez wysyłanie i odbieranie komunikatów.
Wysyłanie komunikatów
Poniższy program konkretyzuje dwa obiekty różnych klas. Pierwszy z nich to obiekt klasy Character przypisany do zmiennej //hero//, zaś drugi to obiekt klasy Creatures przypisany do zmiennej //monster//. Podczas wywołania metody blast klasy Character podajemy jako argument nazwę zmiennej do której przypisaliśmy skonkretyzowany obiekt przeciwnika – w naszym przypadku to //monster//, a następnie wywołujemy metodę die obiektu monster, która realizuje “śmierć przeciwnika”.
# Program demonstrujący współdziałanie obiektów
class Character(object):
""" Postać gracza. """
def blast(self, enemy):
print("Twoje strzały dosięgają Twojego przeciwnika.\n")
enemy.die()
class Creatures(object):
""" Obcy w grze strzelance. """
def die(self):
print("Strzały przeciwnika mnie dosięgły - to już mój koniec.")
# main
print("\t\tWalka\n")
hero = Character()
monster = Creatures()
hero.blast(monster)
input("\n\nAby zakończyć program, naciśnij klawisz Enter.")
Odbieranie komunikatów
Odbieranie komunikatów to nic innego jak wykonanie metody obiektu (w powyższym przykładzie jest to obiekt //monster// klasy Creatures), nazwa obiektu jest przekazywana do metody wysyłającej komunikat.
Tworzenie obiektów
W pierwszym laboratorium dotyczącym programowania obiektowego poznaliście Państwo tworzenie obiektów. Obiekty te były proste np. dom, możemy jednak sobie wyobrazić, że ten sam dom jest obiektem składającym się z innych obiektów takich jak – pustaki, okna, drzwi, dach, pokoje itp. Poniżej zobaczycie Państwo przykład obiektu złożonego:
#program prezentujący tworzenie obiektów złożonych na przykładzie kart
class Card(object):
""" Karta do gry. """
RANKS = ["A", "2", "3", "4", "5", "6", "7",
"8", "9", "10", "J", "Q", "K"]
SUITS = ["dzwonek", "rzołądź", "wino", "serce"]
def __init__(self, rank, suit, face_up = True):
self.rank = rank
self.suit = suit
self.is_face_up = face_up
def __str__(self):
if self.is_face_up:
rep = self.rank + self.suit
else:
rep = "XX"
return rep
def flip(self):
self.is_face_up = not self.is_face_up
class Hand(object):
""" Ręka - wszystkie karty trzymane przez gracza. """
def __init__(self):
self.cards = []
def __str__(self):
if self.cards:
rep = ""
for card in self.cards:
rep += str(card) + "\t"
else:
rep = "
return rep
def clear(self):
self.cards = []
def add(self, card):
self.cards.append(card)
def give(self, card, other_hand):
self.cards.remove(card)
other_hand.add(card)
class Deck(Hand):
""" Talia kart. """
def populate(self):
for suit in Card.SUITS:
for rank in Card.RANKS:
self.add(Card(rank, suit))
def shuffle(self):
import random
random.shuffle(self.cards)
def deal(self, hands, per_hand = 1):
for rounds in range(per_hand):
for hand in hands:
if self.cards:
top_card = self.cards[0]
self.give(top_card, hand)
else:
print("Nie mogę dalej rozdawać. Zabrakło kart!")
if __name__ == "__main__":
print("To moduł zawierający klasy do gry w karty.")
input("\n\nAby zakończyć program, naciśnij klawisz Enter.")
Zadania do samodzielnego wykonania na laboratoriach
* Napisz dwie klasy – klasę bohatera i klasę przeciwnika. W obu klasach stwórz metodę walcz i obrona. Metoda obrona ma być wywoływana przez metodę walcz przeciwnika z argumentem równym obrażeniom. Obrażenia przekazywane do metody obrona składają się z dwóch elementów – pierwszy to stała liczba np. 5 zaś drugi to liczba losowana z zakresu od 1 do 20.
– Przykłady używane na laboratoriach
Przykłady pochodzą z książki
* Podstawową książką wykorzystywaną na laboratorium będzie: „Python dla każdego. Podstawy programowania Wydanie III”, autor Michael Dawson, Wydawnictwo Helion **(R)**
Zadanie domowe
**Wszystkie zadania domowe należy archiwizować ponieważ w dalszej części laboratoriów będziecie je Państwo rozbudowywać**
* W czasie dzisiejszych laboratoriów stworzyliście Państwo prosty system walki. Proszę rozbudować go o możliwość wyboru przez użytkownika walki lub ucieczki.
* Powyższy program proszę rozbudować o metodę heal umożliwiającą leczenie gracza. Wartość o jaką zostanie podniesiona ilość punktów ma zostać wylosowana z zakresu 1-8. Po leczeniu gracz nie może mieć więcej punktów życia niż maksymalna liczba punktów życia postaci.