Özet - Şekil Hesaplayıcı
Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 25 / 65.
Görev
OrtaGerçek şekilleri, hiyerarşinin dışından gelen şekil benzeri bir nesneyi ve ölçemeyeceği nesneleri işleyen bir şekil hesaplayıcı oluştur.
Shapesoyuttur vearea() -> float,perimeter() -> floatveshape_name() -> Stringsoyut yöntemlerine sahiptir. Normal yöntemidescribe(), iki ondalık basamaklaNAME: area A, perimeter Pdöndürür.Circle(radius),Rectangle(width,height) veTriangle(kenarlara,b,c) sınıflarıShapesınıfını genişletir. AdlarıCircle,RectangleveTriangleşeklindedir. Bir dairenin alanıPI * r * r, çevresi ise2 * PI * rşeklindedir. Üçgen için Heron formülünü kullan:s = (a + b + c) / 2olmak üzere alansqrt(s * (s - a) * (s - b) * (s - c))şeklindedir.CustomShape,Shapesınıfını genişletmez. Bircustom_namevesizedeğerine sahiptir;area()sonucusize * size,perimeter()sonucu4 * sizeolur vedescribe(), özel adını kullanarakShapeile aynı biçimi kullanır.ShapeCalculatoriki statik işleve sahiptir.process(thing), birShapeiçin[Shape]iledescribe()sonucunu;describe()yöntemi olan diğer herhangi bir nesne için[Duck]iledescribe()sonucunu döndürür; bunların dışındaki durumlardaCannot measure this objectdöndürür.total_area(things),area()yöntemi olan her nesnenin alanını toplar.
Sağlanan kod, kaç nesnenin geleceğini okur ve ardından her satırda bir nesne okur: circle R, rectangle W H, triangle A B C, custom NAME SIZE veya unknown (düz bir RefCounted nesnesi). Her biri için process() sonucunu ve toplam alanı yazdırır. circle 5, custom Hexa 3 ve unknown için şu çıktıyı verir:
[Shape] Circle: area 78.54, perimeter 31.42
[Duck] Hexa: area 9.00, perimeter 12.00
Cannot measure this object
Total area: 87.54Kodunu shape.gd, circle.gd, rectangle.gd, triangle.gd, custom_shape.gd ve shape_calculator.gd dosyalarına yaz. main.gd, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
extends Node
func _ready():
# Sağlanan giriş/çıkış kodu: olduğu gibi bırakın
var count := int(OS.read_string_from_stdin())
var things := []
for i in count:
var p := OS.read_string_from_stdin().split(" ")
if p[0] == "circle":
things.append(Circle.new(float(p[1])))
elif p[0] == "rectangle":
things.append(Rectangle.new(float(p[1]), float(p[2])))
elif p[0] == "triangle":
things.append(Triangle.new(float(p[1]), float(p[2]), float(p[3])))
elif p[0] == "custom":
things.append(CustomShape.new(p[1], float(p[2])))
else:
things.append(RefCounted.new())
for thing in things:
print(ShapeCalculator.process(thing))
print("Total area: %.2f" % ShapeCalculator.total_area(things))
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Nesne Yönelimli Programlamanın Temelleri
Harici DosyalarNesne Yönelimli Programlamaya GirişSınıflar ve Nesnelerself Anahtar KelimesiMetotlarÖzelliklerKurucu (_init)Tekrar - Basit Hesap Makinesi4Çok Biçimlilik
Metot Ezme Konusuna Yeniden BakışÖrdek TiplemesiSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı7Sinyaller
Sinyal Nedir?Tanımlama ve Sinyal GöndermeSinyallere BağlanmaArgümanlı SinyallerTekrar - Sağlık Sistemi10Tasarım Kalıpları 2. Bölüm
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıBileşik Kalıp2Sınıf Özellikleri
Örnek ve Statik DeğişkenlerStatik FonksiyonlarÖzellik AyarlayıcılarıÖzellik AlıcılarıGeleneksel Olarak ÖzelTekrar - Banka Hesabı Yöneticisi5Kapsülleme
Public ve Private ÜyelerSetter'larla DoğrulamaBilgi GizlemeSalt Okunur ÖzelliklerTekrar - Öğrenci Kayıt SistemiKendi başına pratik yap: Online GDScript derleyicisi