Evet arkadaşlar tetris oyununa ilişkin ilk set kodumuza aşağıdaki adresten ulaşabilirsiniz. Githubta SFML’e ilişkin ayarlar da yapılmış durumda. Repository’i klonlayıp kullanmaya başlayabilirsiniz. Bu yazıda bahsi geçen kodlar “Version1” altında bulunanlar.
https://github.com/yazilimperver/TetrisGame
Bu kodları çalıştırdığınızda karşınıza aşağıdaki gibi bir ekran gelecek 🙂
Öncelikle burada çok detaylı satır satır her şeyi anlatmak istemiyorum bence bu işi öğrenmenin en iyi yollarından birisi koda dalıp, gerekirse satır satır okuyup çalıştırmaktır. Zaten göreceğiniz üzere kod içerisinde zaten oldukça fazla açıklama ve benzeri bilgiler var.
Tetris oyunu benim jenerasyonumun çoğunun oynadığı her ne kadar basit olsa da, mekanik olarak oldukça güzel bir oyun ve oyun programlama ile ilgili bir çok husus içerisinde barındırıyor.
Aslında ilk oyun olarak Pong ile başlamak muhtemelen daha kolay olabilirdi ama ben tetris ile başlamak istedim 🙂 Aslında onu da bir sonraki ay sahnemize alabiliriz. Bu arada her türlü geri bildirim ve
sorunuzu iletebilirsiniz.
Evet gelelim oyun ile ilgili bilgilendirmelere:
- Oyun C++ kullanılarak Visual Studio 2017 ile geliştirildi,
- Görselleştirme ve pencere yönetimi için SFML kütüphanesini kullanıyoruz,
- Oyun ilk aşama için göreceğiniz üzere bütün kod tek bir kaynak dosyası olarak hazırladım. Elbette bu çok ta güzel değil ama oyunun mantığını anlamak için ilk adım olarak yeterli,
- Oyunun güzel durması için (ee tabi biraz da Adobe illustrator egzersizi yapmak için 🙂 oyun içeriklerini de biraz janjanlı yapmaya çalıştım. Normalde herhangi bir oyun için basit prototipler ilk aşama için her zaman yeterlidir,
- Gelelim oyun mekaniğine ve kurallarına:
- Oyun genel tetris kurallarına sadık (sağ, sol, döndürme ve hızlı indirme),
- 7 farklı taş var (iyileştirme yapılabilir). Bu taşlar kodta harfler ile kodlanmış durumda. Aşağıda her bir harfe karşılık gelen taşı görebilirsiniz. Bu ızgara ne anlama geliyor sorusu son sekmede veriliyor.
- Taş renkleri rast gele belirlenmekte,
- 26 x 16 lık tahta (iyileştirme yapılabilir),
- Tahta büyüklüğü, taş tipleri, dikey hareket parametrik değiştirilebilir (arka planı da değiştirmeyi unutmayın 🙂
- Punalama çok basit olarak her yok edilen satır için bir puan (iyileştirme yapılabilir),
- Süre gösterimi var (iyileştirme yapılabilir),
- Oyun bitiş kontrolü,
- Aynı anda tek tetris taşı kontrol edilebilmekte,
- İlgili taş hareket edemez duruma gelince tahtada en son bulunduğu yerler taş rengine boyanır,
- Tetris taşının bir sonraki hareketi eğer tahta dışına çıkar ise veya başka taş ile kesişir ise bu hamleyi geri al.
- Tetris taşları tahtanın ilk satırının ortasından düşmeye başlıyorlar
- Tetris taşlarının parçaları 2×4 lük küçük bir ızgaraya aşağıdaki gibi yerleştirilecek şekilde konumlandırılır. İlgili parçaları konumlandırmak için aşağıdaki resimde gösterildiği gibi numaralandırma yapılır.
- taş tipine göre tek boyutlu bir dizide her bir tetris taşı için ilgili parçaların numaraları tutulur. Bu parçaların x koordinatları için “%2”, y kordinatı için ise “/2” operatörü kullanılır. Örneğin, yukarıdaki resimde J harfi ile kodladığımız tetris taşına karşılık gelen alanlar gösterilmekte.
- Gelelim basit oyun akışına;
- Girdileri kontrol et (hareket, döndürme, oyun tekrar başlatma),
- Klavye girdisine göre mevcut taşı yatayda konumlandır,
- Döndürme tuşuna basılmış ise taşı döndür,
- Zamana veya klavye girdisine göre (aşağı ok tuşuna basılması) dikey hareketi gerçekleştir,
- Herhangi bir satır tamamen doldu mu kontrolünü yap,
- Oyun bittimi kontrolünü yap,
- Tahtayı ve aşağı inen taşı çizdir.
Tetris ile ilgili daha detaylı bilgi için https://tetris.com/ adresine ve wiki sayfasına bakabilirsiniz.
Bir sonraki döngüde kodu biraz daha toparlayacağız. Ses efektleri, giriş ekranı ve daha janjanlı bitiş ekranı/oyun dondurma gibi ekranlar ekleyeceğiz. Yukarıda iyileştirme diye parantez içerisine yazdığım hususlar sizler için aslında birer egzersiz. Bu kısımlar için iyileştirmeler yapabilirsiniz.
O zamana kadar kendinize iyi bakın görüşmek dileğiyle.