Menu
CoddyTech

Tasarım Desenlerine Giriş

Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 45 / 65.

Tasarım deseni, programdan programa tekrarlanan bir sorun için sınıfları düzenlemenin bilinen ve adlandırılmış bir yoludur. Bir kütüphane ya da kopyalanacak kod değildir: hangi nesnelerin var olduğunu, her birinin hangi sorumluluğu üstlendiğini ve birlikte nasıl çalıştıklarını açıklar. Kendi oyununa göre şekillendirerek kodu kendin yazarsın.

Kalıplar geliştiricilere ortak bir dil de sağlar. “Düşmanlar bir fabrikadan gelir” ya da “can çubuğu oyuncuyu gözlemler” demek, bir ekip arkadaşına dosyayı açmadan önce kodun nasıl düzenlendiğini anlatır.

İşte bir tasarım kalıbının çözdüğü bir sorun. Bir seviyeyi başlatmak, üç nesneyle iletişim kurmak anlamına gelir ve seviyeyi başlatan her betik bu satırları tekrarlar:

var music := MusicPlayer.new()
var level_map := LevelMap.new()
var hud := Hud.new()
music.play("forest.ogg")
level_map.load_map(1)
hud.show_hearts(3)

Facade deseni, bu nesnelerin önüne tek bir sınıf koyar ve ona basit bir yöntem verir:

# game_facade.gd
class_name GameFacade
extends RefCounted

var music := MusicPlayer.new()
var level_map := LevelMap.new()
var hud := Hud.new()

func start_level(number: int) -> void:
	music.play("forest.ogg")
	level_map.load_map(number)
	hud.show_hearts(3)
# main.gd
var game := GameFacade.new()
game.start_level(1)
Music: playing forest.ogg
Map: level 1 loaded
HUD: hearts 3

Programın geri kalanı start_level() işlevini çağırır ve başlatılan bölüm değiştiğinde tek bir dosyayı düzenlersin.

Desen kalıpları, çözdükleri probleme göre gruplandırılır:

  • Yaratımsal kalıplar, nesnelerin nasıl oluşturulacağını belirler: Singleton, Factory.
  • Yapısal kalıplar, nesneleri daha büyük yapılar hâlinde birleştirir: Facade, Adapter, Decorator, Composite.
  • Davranışsal kalıplar, nesnelerin birlikte nasıl çalışacağını düzenler: Observer, Strategy, Command, Template Method, State.

Bu bölüm ve sonraki bölüm bu kalıpları ele alıyor. Her biri, zaten bildiklerinden oluşturulmuştur: kendi dosyalarındaki sınıflar, kalıtım, çok biçimlilik, bileşim ve sinyaller.

challenge icon

Görev

Kolay

Bir oyun, önceden yazılmış üç nesne aracılığıyla seviyeleri başlatır ve sonlandırır: MusicPlayer (music_player.gd), LevelMap (level_map.gd) ve Hud (hud.gd). Bunların önüne bir cephe olan GameFacade yaz:

  • Üye değişkenlerinde bir MusicPlayer, bir LevelMap ve bir Hud oluşturur.
  • start_level(number, hearts), level_N.ogg parçasını (N seviye numarasıdır) veya numara 5'in katı olduğunda boss.ogg parçasını çalar; ardından o seviyenin haritasını yükler ve son olarak kalpleri gösterir.
  • quit_level(), HUD'yi gizler ve ardından müziği durdurur.

Verilen kod, kaç komutun geleceğini okur ve ardından her satırda bir komut okur: start NUMBER HEARTS veya quit. start 5 2 ve quit için çıktı şöyledir:

Music: playing boss.ogg
Map: level 5 loaded
HUD: hearts 2
HUD: hidden
Music: stopped

Kodunu game_facade.gd dosyasına yaz. main.gd, verilen girdi/çıktı kodunu içerir ve düzenlenemez.

Kendin dene

extends Node

func _ready():
	# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
	var game := GameFacade.new()
	var count := int(OS.read_string_from_stdin())
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ")
		if parts[0] == "start":
			game.start_level(int(parts[1]), int(parts[2]))
		elif parts[0] == "quit":
			game.quit_level()
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online GDScript derleyicisi