Ćwiczenie — modelowanie i tworzenie szkieletu gry
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
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 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.
Następnie utwórz tabelę z kolumnami
Phase
(Etap),Actor
(Aktor),Behavior
(Zachowanie) iData
(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ę.
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.
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ć.
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
atrybutompoints
ichoice
wskazaną przez pierwszy i trzeci wiersz tabeli.Daliśmy
Game
poleendGame
z powodu czwartej linii. Ponadto klasaGame
zawiera dwóch uczestników:participant
(uczestnik) isecondParticipant
(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 atrybutypoints
ichoice
są zmiennymi określającymi stan. Uczestnicy w klasieGame
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.