1987'deymiş gibi sıfırdan video oyunu yazmak
Ne yapıyoruz
- X protokolünün 11. sürümü 1987'de ortaya çıktı.
- X11, GPU'lar ortaya çıkmadan önceki modele ait olduğu için günümüz donanımıyla çok iyi uyuşmuyor.
- Her Unix sisteminde bir X sunucusu vardır; macOS ve Windows'ta da GUI Linux uygulamaları çalıştırılabilir.
- X11 protokolü nispeten basittir ve yalnızca bir soket oluşturmakla başlanabilir.
- 2D uygulamalar, GPU ile etkileşime girmeye gerek kalmadan çalışabilir.
Kimlik doğrulama
- Önceki yazıda X sunucusuna kimlik doğrulama olmadan bağlanılmıştı.
- Artık X kimlik doğrulama protokolü destekleniyor.
- Bunun nedeni, XWayland kullanan bazı masaüstü ortamlarında kimlik doğrulamanın gerekli olması.
- Kimlik doğrulama, MIT-MAGIC-COOKIE-1 mekanizması kullanılarak işleniyor.
Pencere açma
- X sunucusuyla iletişim kurmak için bir UNIX domain socket açılıyor.
- X11 handshake üzerinden sunucuyla bağlantı kuruluyor.
- Bir grafik bağlamı oluşturuluyor ve bir pencere yaratılıyor.
- Pencereyi göstermek için
map_window çağrısı kullanılıyor.
Varlık yükleme
- Oyun için gerekli görseller yükleniyor ve X11 görüntü biçimine uygun şekilde dönüştürülüyor.
- Bir Pixmap oluşturuluyor, görseller yükleniyor ve ardından gerekli kısımlar pencereye kopyalanıyor.
GN⁺ görüşü
- X11'in sadeliği: X11 protokolü görece basit olduğundan, doğrudan soket üzerinden iletişim kurulabilir. Bu, başlangıç seviyesindeki mühendislerin ağ programlama ve GUI'nin temel kavramlarını anlamasına yardımcı olur.
- Optimizasyon olasılığı: Pixmap gibi ekran dışı tamponlar kullanılarak görseller yalnızca bir kez yüklenebilir, sonrasında ise hızlıca kopyalanabilir. Bu, performans optimizasyonuna iyi bir örnektir.
- Odin dilinin avantajları: Odin dili, bellek yönetimi gibi karmaşık işleri daha basit ele almayı sağlayan özellikler sunar. Bu da verimli programlamayı mümkün kılar.
- Eski sistem desteği: Bu yöntem eski sistemlerde de çalışabilir. Bu, yazılımın farklı ortamlarda çalıştırılması gereken durumlarda faydalıdır.
- Öğrenme kaynağı: X11 gibi düşük seviyeli protokollerle doğrudan çalışmak, GUI'nin iç işleyişini anlamaya büyük katkı sağlar. Bu da mühendislerin teknik becerilerini geliştirmesine yardımcı olabilir.
1 yorum
Hacker News yorumları
Birinci yorum: 1987'de PC'lerde 1–2MB RAM vardı, Super NES'te ise 128KB RAM bulunuyordu. Microsoft programlarından çok daha küçük boyutta çalıştırılabilir dosyalar yapılabiliyordu. Bağlantı
İkinci yorum: X11 eski olsa da, oyun geliştirme için gereken temel işlevleri uygularsanız geri kalanını dert etmeniz gerekmez. Xlib kullanmak işi daha da kolaylaştırabilir.
Üçüncü yorum: DOS PC için bir Mayın Tarlası klonu Turbo Pascal ile geliştirdim. Büyük seviyelerde özyinelemeli algoritma sorunları yaşadım ve başlangıç konumunu güvenli seçebilen bir özellik ekledim.
Dördüncü yorum: 1987'de oyun geliştirmek bugüne kıyasla çok daha zordu. DOS çoklu görev desteklemediği için çalışma akışı son derece verimsizdi. Bağlantı
Beşinci yorum: Godot motorunun wasm dosya boyutunun en az 50MB olması hayal kırıklığı yarattı. Özellikle basit 2D oyunlarda optimizasyona ihtiyaç var. Genel olarak ise etkileyiciydi.
Altıncı yorum: Odin diline ilgi duymaya başladım. Odin, Zig'e benzer şekilde bellek ayırıcıyı fonksiyonlara geçiriyor, ama bunu daha pratik hale getiren mekanizmalara sahip.
Yedinci yorum: Windows 3.1'deki Mayın Tarlası'nda bir hile kodu vardı. Belirli tuş kombinasyonları girildiğinde güvenli karelerle bomba bulunan kareleri ayırt edebiliyordunuz.
Sekizinci yorum: SDL gibi kütüphaneler kullanıldığında neredeyse hiç ek yük olmuyor ve farklı işletim sistemleri desteklenebiliyor. Eski SDL 1.x kullanılırsa daha eski Linux sürümleri de desteklenebilir.
Dokuzuncu yorum: Simon Tatham'ın Mines for Windows çalıştırılabilir dosyasının boyutu yaklaşık 180KiB. Bağlantı