Typy wyliczeniowe w klasach
Część sekcji Programowanie obiektowe ścieżki GDScript w Coddy. Lekcja 44 z 65.
Enum można zadeklarować wewnątrz klasy, obok jej zmiennych. Opcje należą wtedy do tej klasy:
# weapon.gd
class_name Weapon
extends RefCounted
enum Kind { SWORD, BOW, STAFF }
var kind: Kind
func _init(weapon_kind: Kind) -> void:
kind = weapon_kind
func is_ranged() -> bool:
return kind == Kind.BOW or kind == Kind.STAFFW pliku weapon.gd enum to Kind. W każdym innym pliku najpierw zapisuje się nazwę klasy, Weapon.Kind.BOW, w wartościach, adnotacjach typów i wzorcach match:
# blacksmith.gd
class_name Blacksmith
extends RefCounted
static func repair_cost(kind: Weapon.Kind) -> int:
match kind:
Weapon.Kind.SWORD:
return 20
Weapon.Kind.BOW:
return 15
return 30Opcje nadal są liczbami: Weapon.new(Weapon.Kind.BOW).kind wypisuje 1. Samo wyliczenie działa jak słownik mapujący nazwy na liczby:
print(Weapon.Kind.keys()) # ["SWORD", "BOW", "STAFF"]
print(Weapon.Kind.find_key(1)) # BOW
print(Weapon.Kind["STAFF"]) # 2
print(Weapon.Kind.size()) # 3
for kind in Weapon.Kind.values():
print(Weapon.Kind.find_key(kind), ": ", Blacksmith.repair_cost(kind))Pętla wyświetla SWORD: 20, BOW: 15 i STAFF: 30. GDScript nie sprawdza, czy liczba jest jedną z dostępnych opcji: Weapon.new(7) tworzy broń, której kind ma wartość 7. Przekazuj nazwane opcje, a kod pozostanie poprawny.
Typ wyliczeniowy opisujący daną klasę należy umieścić wewnątrz tej klasy, aby czytelnik widział, skąd pochodzi Kind w Weapon.Kind.BOW.
Wyzwanie
ŁatwySortuj mikstury za pomocą wyliczenia znajdującego się w klasie Potion.
- W pliku
potion.gdzadeklarujenum Kind { HEAL, MANA, POISON }i nadaj zmiennejkindtypKind. Potion.from_text(text, strength)to funkcja statyczna, która zamienia"MANA"naKind.MANAi zwraca nową miksturę.describe()zwracaHEAL potion: +20 HP,MANA potion: +15 MPlubPOISON potion: -5 HP, używając nazwy rodzaju i jego mocy.- W pliku
belt.gdfunkcjasummary()zwraca po jednym wierszu dla każdego rodzaju, w kolejności wyliczenia:HEAL: 2 (35 total), podając liczbę mikstur danego rodzaju oraz w nawiasie sumę ich mocy. Rodzaje, dla których nie ma mikstur, również mają swój wiersz.
Dostarczony kod odczytuje liczbę kolejnych mikstur (HEAL 20), dodaje każdą z nich do pasa, wypisuje jej opis, a następnie podsumowanie. Dla HEAL 20, POISON 5, HEAL 15 wypisuje:
Added HEAL potion: +20 HP
Added POISON potion: -5 HP
Added HEAL potion: +15 HP
HEAL: 2 (35 total)
MANA: 0 (0 total)
POISON: 1 (5 total)Twój kod umieść w plikach potion.gd i belt.gd. Plik main.gd zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
extends Node
func _ready():
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
var belt := Belt.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
var potion := Potion.from_text(parts[0], int(parts[1]))
belt.add(potion)
print("Added ", potion.describe())
for line in belt.summary():
print(line)
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe selfMetodyWłaściwościKonstruktor (_init)Powtórka – prosty kalkulator4Polimorfizm
Ponowne omówienie przesłaniania metodDuck typingKlasy i metody abstrakcyjneProjektowanie interfejsówPowtórzenie – kalkulator kształtów7Sygnały
Czym jest sygnał?Deklarowanie i emitowanieŁączenie z sygnałamiSygnały z argumentamiPodsumowanie — system zdrowia10Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu2Właściwości klas
Zmienne instancji a zmienne statyczneFunkcje statyczneSettery właściwościGettery właściwościPrywatne z konwencjiPodsumowanie — menedżer kont bankowych5Enkapsulacja
Elementy publiczne i prywatneWalidacja za pomocą setterówUkrywanie informacjiWłaściwości tylko do odczytuPodsumowanie – system ewidencji uczniów8Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieKlasy wewnętrzneWęzły jako komponentyRefCounted a NodeTypy wyliczeniowe w klasach11Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superNadpisywanie metodŁańcuchy dziedziczeniaSprawdzanie typów za pomocą isPodsumowanie – hierarchia pracowników6Metody specjalne
Wprowadzenie do metod wirtualnychMetoda _to_stringWłasne iteratoryPodsumowanie — własna lista9Wzorce projektowe — część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator GDScript online