Ćwiczenie — modelowanie i tworzenie szkieletu gry

Ukończone

Gra niczym nie różni się od systemu do obsługi faktur omawianego podczas poprzedniej lekcji. W świecie programowania obiektowego składa się z takich samych części. Te części to obiekty, dane i zachowania. Tak samo, jak w przypadku systemu do obsługi faktur, możemy opracować model gry takiej jak kamień, papier, nożyce — najpierw opisując jej domenę, a następnie określając, co jest czym. Modelowanie gry będzie Twoim następnym zadaniem. Napiszesz również trochę kodu, który później będzie można rozbudować.

Analizowanie gry w kamień, papier, nożyce na potrzeby modelowania w programowaniu obiektowym

To ćwiczenie dotyczy modelowania. Otrzymasz opis domeny problemu. Następnie Twoim zadaniem będzie wyodrębnienie istotnych słów kluczowych z tekstu i uporządkowanie ich w tabeli.

Napiwek

Jeśli chcesz przypomnieć sobie, jak modelować, zobacz sekcję "Znajdowanie obiektów, danych i zachowania" w drugiej lekcji. Pamiętaj, że modelowanie zaczyna się od zadania pytań: kto z kim wchodzi w interakcje lub kto co robi i z kim.

Opis problemu

Kamień, papier, nożyce to gra dla dwóch graczy. Gra podzielona jest na rundy. W każdej rundzie uczestnik wybiera jeden z symboli — kamień, papier lub nożyce — a drugi uczestnik robi to samo. Zwycięzcę rundy wyłania się, porównując wybrane symbole. Reguły gry określają, że kamień pokonuje nożyce, nożyce pokonują (przecinają) papier, a papier pokonuje (owija) kamień. Zwycięzca rundy otrzymuje punkt. Gra trwa aż do tylu rund, jak uczestnicy zgadzają się. Zwycięzcą jest gracz, który zgromadził największą liczbę punktów.

Modelowanie gry

  1. Skopiuj powyższy tekst i wklej go do dokumentu. Zaznacz ważne słowa kluczowe pogrubieniem lub kursywą.

    Napiwek

    Poświęć chwilę na określenie, które słowa kluczowe są według Ciebie najważniejsze. Po zakończeniu przewiń w dół, aby zobaczyć tekst z wyróżnionymi istotnymi fragmentami.

    Oto tekst opisu problemu z wyróżnienionymi elementami:

    Kamień, papier, nożyce to gra dla dwóch graczy. Gra podzielona jest na rundy. W każdej rundzie uczestnik wybiera jeden z symbolikamień, papier lub nożyce — a drugi uczestnik robi to samo. Zwycięzcę rundy wyłania się, porównując wybrane symbole. Reguły gry określają, że kamień pokonuje nożyce, nożyce pokonują (przecinają) papier, a papier pokonuje (owija) kamień. Zwycięzca rundy otrzymuje punkt. Gra trwa aż do tylu rund, jak uczestnicy zgadzają się. Zwycięzcą jest gracz, który zgromadził największą liczbę punktów.

  2. Następnie utwórz tabelę z kolumnami Phase (Etap), Actor (Aktor), Behavior (Zachowanie) i Data (Dane). Umieść wyróżnione słowa we właściwych miejscach.

    Napiwek

    Poświęć chwilę na przemyślenie tego, a następnie przewiń w dół.

    Wynikowa tabela może wyglądać następująco:

    Faza Aktor Zachowanie Data
    Dane wejściowe Uczestnik Wybiera symbol Symbol zapisany jako choice (wybór) w obiekcie Participant(choice)
    Trwa przetwarzanie GameRound Porównuje wybory z regułami gry Wynik do zbadania
    Trwa przetwarzanie GameRound Przydzielenie punktów na podstawie wyniku Punkty dodane do obiektu zwycięzcy Participant(point)
    Trwa przetwarzanie Gra Sprawdzenie odpowiedzi na pytanie, czy kontynuować Jeśli odpowiedź to „tak”, kontynuuj, w innym przypadku przerwij
    Wyjście Gra Nowa runda lub podsumowanie wyniku gry

Tworzenie klas i stanu

Powyższa tabela pokazuje, w jaki sposób gra przechodzi przez poszczególne etapy. Koncentrując się na dwóch kolumnach Behavior i Data, możesz utworzyć szkielet kodu początkowego jako podstawy, na którym można utworzyć grę.

  1. Skopiuj poniższy kod do terminalu i naciśnij klawisz Enter, aby utworzyć plik rock-paper-scissor.py i otworzyć edytor:

    touch rock-paper-scissor.py
    code .
    

    Napiwek

    Użyj menu kontekstowego (kliknij prawym przyciskiem myszy), aby wkleić kod do terminalu.

  2. Nadaj mu następującą zawartość i zapisz plik (Ctrl+S lub Command+S w systemie macOS):

    class Participant:
    class GameRound:
    class Game:
    

    Napiwek

    Użyj klawiszy Ctrl+V , aby wkleić kod do edytora.

    Masz już utworzone klasy potrzebne do gry. Następnie zastanów się, jakimi danymi dysponujesz, i w której klasie należy je umieścić.

  3. Kontynuuj pracę z tym samym plikiem i rozwiń kod w następujący sposób, a następnie zapisz plik:

    class Participant:
        def __init__(self):
            self.points = 0
            self.choice = ""
    
    class GameRound:
    
    class Game:
        def __init__(self):
            self.endGame = False
            self.participant = Participant()
            self.secondParticipant = Participant()
    
    

    Napiwek

    • Separator można przeciągnąć między edytorem a terminalem, aby dostosować dostępne miejsce.
    • Edytor można zamknąć z ... menu.
    • Możesz wpisać code . w terminalu, aby ponownie otworzyć edytor.

    Nadaliśmy klasę Participant atrybutom points i choice wskazaną przez pierwszy i trzeci wiersz tabeli.

    Daliśmy Game pole endGame z powodu czwartej linii. Ponadto klasa Game zawiera dwóch uczestników: participant (uczestnik) i secondParticipant (drugi uczestnik). Istnieją dwie role, które może pełnić zmienna w obiekcie. Tą rolą może być stan, na przykład piętro, na którym znajduje się kabina windy, lub atrybut opisowy. W tym kontekście atrybuty points i choice są zmiennymi określającymi stan. Uczestnicy w klasie Game to atrybuty opisowe, ponieważ gra ma uczestników.

    Gratulacje! Do gry dodano klasy i utworzono atrybuty danych przypisane do utworzonych klas. Masz już dobry kod początkowy. Póki co nie robi on zbyt wiele, ponieważ potrzebne jest jeszcze zachowanie. Dodasz zachowanie w następnym ćwiczeniu.