Menu
CoddyTech

Pengantar Pola Desain

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GDScript di Coddy. Pelajaran 45 dari 65.

pola desain adalah cara yang dikenal dan memiliki nama untuk mengatur class dalam menangani masalah yang berulang dari satu program ke program lainnya. Pola ini bukan library dan bukan kode untuk disalin: pola ini menjelaskan object apa saja yang ada, tanggung jawab masing-masing, dan cara mereka bekerja sama. Kamu menulis sendiri kodenya, disesuaikan dengan gamemu.

Pola juga memberi developer istilah yang sama. "Musuh berasal dari factory" atau "bilah kesehatan mengamati pemain" memberi tahu rekan satu tim bagaimana kode diatur sebelum mereka membuka file.

Berikut masalah yang dapat diatasi oleh sebuah pola. Memulai level berarti berkomunikasi dengan tiga object, dan setiap skrip yang memulai level mengulang baris-baris ini:

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)

Pola Facade menempatkan satu class di depan object-object tersebut dan memberinya satu method sederhana:

# 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

Bagian lain dari program memanggil start_level(), dan saat cara memulai level berubah, kamu mengedit satu file.

Pola dikelompokkan berdasarkan masalah yang diselesaikannya:

  • Pola kreasi mengatur cara object dibuat: Singleton, Factory.
  • Pola struktural menggabungkan object menjadi struktur yang lebih besar: Facade, Adapter, Decorator, Composite.
  • Pola perilaku mengatur cara object bekerja sama: Observer, Strategy, Command, Template Method, State.

Bab ini dan bab berikutnya membahas pola-pola ini. Setiap pola dibangun dari hal-hal yang sudah kamu ketahui: class di file masing-masing, pewarisan, polimorfisme, komposisi, dan sinyal.

challenge icon

Tantangan

Mudah

Game memulai dan mengakhiri level melalui tiga object yang sudah ditulis: MusicPlayer (music_player.gd), LevelMap (level_map.gd) dan Hud (hud.gd). Tulis facade GameFacade untuk menghubungkan ketiganya:

  • Facade membuat satu MusicPlayer, satu LevelMap dan satu Hud di variabel anggotanya.
  • start_level(number, hearts) memutar track level_N.ogg (N adalah nomor level), atau boss.ogg jika nomornya kelipatan 5, lalu memuat map level tersebut, kemudian menampilkan hearts.
  • quit_level() menyembunyikan HUD, lalu menghentikan musik.

Kode yang disediakan membaca jumlah perintah berikutnya, lalu satu perintah di setiap baris: start NUMBER HEARTS atau quit. Untuk start 5 2 dan quit, output-nya adalah:

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

Tulis kodemu di game_facade.gd. main.gd berisi kode input/output yang disediakan dan tidak dapat diedit.

Coba sendiri

extends Node

func _ready():
	# Kode input/output yang disediakan: biarkan apa adanya
	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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler GDScript online