Makale Adı MIDP ile Çok Oyunculu Oyun Programlama
Derleyen Mobilpro
Tarih 28.07.2004

Giriş

MIDP kullanılarak birçok tek kullanıcılı (solo-play) güzel oyun geliştirildi ve halada geliştiriliyor. Fakat telefonların işlevi gereği devamlı bir ağa bağlı olma ihtiyacı ve kullanıcıları tarafından devamlı olarak taşınmaları gibi iki önemli özellik göz önüne alındığında , oyun geliştiricilerin çok oyunculu oyunlar üzerinde çalışmaları telefonun doğasına daha uygun oyunlar oluşturulmasına katkıda bulunacaktır.

Bu makalede MIDP kullanarak nasıl çok oyunculu oyun geliştirildiği anlatılacaktır. Çok oyunculu oyunların arkasında bulunan teknolojilerden bahsedilecek ve bu teknolojiler ile geliştirilmiş oyunlara değinilecektir.Eklerde bazı teknolojilere daha derinlemesine girilecektir.

Bu makaleyi okuyanların temel MIDP ve Java teknolojilerine aşina olduğu kabul edilmiştir. Eğer MIDP konusundaki bilginiz yetersiz ise , MIDP ile Programlamaya Giriş
makalesinden faydalanabilirsiniz.

MIDP Kullanıcı Arayüzü

MIDP kullanarak iki tip ekran yapabilirsiniz :
Yüksek Seviye ekranlar (High-Level Screen) : Bu yapıda bildiğiniz text kutucukları , listeler , radio buttonlar vardır. Yani önceden tanımlanmış olan standart elemanlar :

Şekil - 1
Alt Seviye Ekranlar (Low-Level Screen) : Bu yapıda bir ekran üzerinde özgürce istediğiniz çizebilirsiniz :

Şekil - 2
Nokia UI (Nokianın telefonlarında kullandığı J2M için gelşitirdiği User Interface API si. ) kullanarak telefonun tüm ekranınıda kullanabilirsiniz : (Yani Start ve Close yazılarının olduğu yeride oyun ekranının bir parçası yapmak mümkündür. Bu durumda tabiki yardım bölümünde bu işlevleri hangi tuşların yaptığını belirtmeniz gerekir.)

Şekil - 3
Burada bir not olarak belirtelim , MIDP 2.0 da tüm ekranı kullanma özelliği standart olarak eklenmiştir. Yani Nokia UI java kodlarına import edilmedende tüm ekran özelliği kullanılabilecektir.

MIDP 1.0 da kullanılan Haberleşme Alt Yapısı

Bir telefonu paylaşmak
En basidinden düşünürsek , bir oyunun aynı telefon üzerinde oynanabilmeside bir nevi çok oyunculu yapıdadır. Bir oyuncu hamlesini yapar ve karşı hamleyi yapması için diğer oyuncuya telefonu verir. Oda hamlesini yaparak geri verir ve oyun böylece oynanır. Basit , sıralı oynanan (turn-based) oyunlar için kullanılabilir. Şebeke üzerinden veri değişimi olmadığındanda ücret ödemek gerekmez.

HTTP

Şekil - 4
HTTP tüm MIDP kullanan telefonlarda desteklenir.Makalenin sonunda bulacağınız EK A nın içeriğinde , mobil ağlarda HTTP ve diğer internet protokollerinin nasıl desteklendiği ile ilgili teknik detayları bulabilirsiniz. MIDP te HTTP ile kod geliştirmenin temellerini bir örnek ile öğrenmek için Nokia Forumdan "MIDP Ağ Teknolojisine Giriş ve bir ağ MIDlet Örneği :FruitMachine" makalesini okuyabilirsiniz.

MIDP , HTTP istemci (client) özelliğini desteklemektedir. Bu şu demektir : Bir MIDlet Web Gezgincisi gibi davranabilir : Bir HTTP servera HTTP isteği gönderir ve HTTP olarak cevabı alır. Fakat bazı MIDlet programcıları mobil ağlarda geçerli olmayan ama normal olarak internet üzerinde çalışan HTTP özelliklerine güvenerek tasarım yaparak yanılgıya düşmektedirler :

* HTTP Akışı (Streaming) : Internet üzerinde çalışan HTTP uygulamaları , TCP protokolünün streaming özelliği üzerine kurulmuştur ve böylece HTTP ile sürekli olarak akan veri gönderebilirler. Fakat mobil ağlarda TCP tabanlı olmayan bir yapı (mesela WAP) kullanılmaktadır ve bu uygulamada streaming kullanmamaktadır.Birçok mobil ağ yapısında , bir istek yada cevap tam olarak oluşana dek bir bufferda depolanır bu yüzdende HTTP streaming özelliği mobil ağlarda çalışmamaktadır.

* Geciktirilen Cevaplar : HTTP streamingin çalışmadığını gören programcıların yapmaya çalıştığı bir program hileside , uygulamada bir olay olana kadar (örneğin karşı oyuncu oynayana dek) server üzerinde HTTP cevabını beklemektir. Bu çözüm mobil ağlarda bir bağlantıyı açık tutmayı gerektirdiğinden , bu tip bir bağlantıyı açık tutmanın maliyeti yüksek (kaynak açısından) olabileceği gibi ,mobil ağlarda inaktif bağlantıların timeout yapılması , internetteki aktif olmayan bağlantıların inaktif yapılması ile karşılaştırıldığında kısa sürede olmaktadır.

* Birden Çok HTTP Bağlantısı : Genellikle bir telefonda birden çok HTTP bağlantısı açarak bunları açık tutmak için yeterli kaynak (data bufferları ve yapıları açısından) olmamaktadır. Bu yüzden bu yolada gidilmez.

Buraya kadar anlatılanlardan çıkartılacak ders şudur : Eğer MIDletinizin birçok telefonda doğru düzgün çalışmasını istiyorsanız , HTTP serverdan cevapları hemen gönderin , istek gönderimini ise bekletin. Bir HTTP serverın , herhangi bir HTTP istemcisine bir bağlantı kurması mümkün değildir. Bu yüzden eğer HTTP server eğer bir olayı (rakip hamle yaptı mesela) bir HTTP istemciye bildirmeli ise , bu ancak istemcinin periyodik olarak HTTP servera HTTP isteği göndererek bu hamleleri kontrol etmesi ile sağlanır.Bu sonuçta server tarafından değil , istemci tarafından başlatılan bir işlemdir.

Mobil dünyada HTTP kullanımı pahalı değildir. Özellikle datanın GPRS üzerinden taşındığı düşünülürse , oyunların iletişimde kullandığı küçük data miktarları ile maliyet yüksek olmamaktadır. Örneğin Finlandiyada GPRS data ücretlendirmesi KB başına 0.01 Eurodur.

Diğer Protokoller
MIDP 1.0 HTTP harici başka bir protokol desteklemez. Fakat bazı telefonlarda bulunan ve standart dışı olan API lerle TCP soket bağlantılarıda desteklenmektedir. Eğer bu özelliği kullanmak isterseniz , oyununuzun diğer telefonlarda kullanımını tehlikeye atmış olursunuz.

MIDP 2.0 da kullanılan Haberleşme Alt Yapısı

HTTPS
HTTPS , internet üzerinde elektronik ticarette kullanılan "Güvenli HTTP" dir. MIDP 2.0 da desteklenmektedir.

TCP
TCP , internetin temel protokollerindendir. Güvenilir , bağlantı temelli bir protokoldür :
  * Gönderilen bilgi , sadece bir kez ve doğru sırada , hatasız olarak alınır.
  * Server ve istemci arasında kurulan bağlantı haberleşme süresince açık olarak tutulur.
Bir TCP bağlantısını iki telefon arasındaki telefon bağlantısınada benzetebilirsiniz. Internet üzerinde HTTP , TCP temeli üzerine kurulu olarak çalışır.
TCP nin güvenilir olması program geliştirmeyi kolaylaştırır. Fakat güvenilir olmayan bir ağ üzerinde çalışırsa ; TCP , UDP kadar iyi sonuç vermeyebilir. Eğer haberleşme sırasında bir paket kaybolursa TCP diğer paketleri göndermeden önce kayıp paketi başarılı olarak gönderilene dek tekrar tekrar göndermeyi deneyecektir. Eğer bu tip güvenli gönderime ihtiyaç yoksa UDP kullanılabilir.
MIDP 1.0 TCP yi desteklememektedir. MIDP 2.0 TCP 'yi destekler ama TCP yi telefonlarına eklemek konusunda telefon üreticileri serbest bırakılmıştır.

UDP
UDP , internetin bir diğer temel protokollerindendir. UDP , güvenilir olmayan , paket temelli bir protokoldür :
  * Data paketleri birden fazla gönderilebilir , alınış sırası karışıktır.
  * Haberleşen sistemler arasında hiç bir bağlantı yoktur. Her paket tek tek hedef adrese gönderilir.
UDP yi temelde postaya atılan bir mektuba benzetebiliriz. Sistemlerin biribirilerine gönderdikleri data paketleri ise mektuplar yada paketlerdir. Datagram terimi ise esasında data paketleri için kullanılır.
UDP yapısı itibarı ile haberleşme ağlarına en az yükü bindiren , en etkili teknolojidir. Birçok uygulama TCP deki gibi güvenilir bir haberleşme alt yapısına ihtiyaç duymaz. Örneğin gönderilen bilgiler video sinyalleri gibi zaman bağımlı ise , alıcı tarafta bazı paketleri alamamak ; haberleşme sisteminin kayıp paketleri tekrar göndermeye çalışırken zaman kaybetmesinden iyidir.
UDP mi yoksa TCP mi oyunlar için iyidir ? Ek-C de bahsedilen mobil ağlarda gecikme konusunda bu noktaya değinilmektedir.
Bu noktada iki farklı çözüm göz önüne alınabilir :
* Her ikisinide kullanmak : Ulaştırılmasında güvenirlilik istemediğiniz bilgi paketlerinin iletilmesinde UDP , istediğinizde TCP kullanmak bir çözüm olabilir.
* Sadece UDP kullanın ama yazılımınızda istediğiniz bilgi paketlerinizi güvenilir olarak göndermek için bir yapıyıda ekleyin.
GPRS gibi bir protokol üzerinde uygulamanızı çalıştıracaksanız UDP küçük data paketleri için sorunsuz çalışacaktır. Mobil ağlardaki gecikmeler yüzünden uygulamalar 1 saniyeden daha az süren sıklıkta bilgi göndermeye kalkmayacaktır. Eğer bu kadar sık bilgi gönderiyorsanız paketlerin büyüklüklerine dikkat edin ve gereksiz bilgileri göndermeyin.

Seri Kablo
İki telefonu seri kablo biribirine bağlayarak çok oyunculu oyun oynayabilirsiniz. MIDP 2.0 da iki telefonun seri kablo aracılığı biribirine bağlanması "SerialPortConnection" arabirimi ile sağlanmaktadır :

Şekil - 5


Infra-Red (IrDA)
İki oyuncu aynı yerde olmak şartı ile Infra-Red kullanarak oyun oynayabilir. Telefonlar sabit , hareketsiz olarak tutulmalı ; infra-red portları tam olarak biribirini görmelidir. Bu şekilde oyun oynamak ; özellikle oyunlar heyecanlı ise zor olabilir. Ayrıca Kızılötesi portları kimi telefonlarda üstte , kimilerinde sağda , kimilerinde ise solda olduğundan oyuncuların rahat bir oyun oynama pozisyonu bulmalarıda söz konusudur.
MIDP 2.0 da telefonların kızılötesi portları kullanarak iletişim kurmaları "SerialPortConnection" isimli bir interface ile sağlanacaktır. Bu makale yazıldığı tarihlerde Nokia nın hiçbir telefonunda bu interface kullanılmamaktadır.

Şekil - 6


MIDP 2.0 da kullanılan Diğer Haberleşme Teknolojileri

MIDP 1.0 ve MIDP 2.0 telefonları haberleşme için farklı "opsiyonel paketler" içerebilirler. Bu bölümde kısaca bu paketlere değinilecektir.

BlueTooth
BlueTooth yaklaşık 10 metre çapında yer alan ve 8 kadar cihazın biribiri ile haberleşmesini sağlayan bir kısa dalga radyo haberleşme tekniğidir. BlueTooth da gecikme faktörü düşüktür ve çok oyunculu oyunlar için uygun bir ortam oluşturur. Örneğin N-Gage de birçok çok oyunculu oyun için BlueTooth kullanılmaktadır. 10 metre çapında bulunan telefonların biribirini görmesi gerekmez çünkü BlueTooth her yönde yayın yapabilmektedir.
MIDP telefonlarda BlueTooth JSR-82 ile belirlenmiş olan API var ise kullanılabilir. (6600,6630 gibi telefonlarda desteklenmektedir.)

Şekil - 7

SMS
Kısa Mesaj Hizmeti (SMS) sayesinde bir telefon bir diğer telefon ile yada bir oyun serverı ile mesajlar sayesinde haberleşebilir. SMS mesaj için bir kavram olarak algılansada , zil tonları yada oyun bilgileri göndermek içinde kullanılmaktadır. SMS temelde Sakla ve Gönder mantığı ile çalışır. Yani telefondan gönderilen mesajlar Kısa Mesaj Servis Merkezinde (SMSC) saklanır ve daha sonra alıcısına gönderilir. Eğer mesajların gideceği hedef sistemler o an açık ve kullanılıyorsa SMSC de birikme olmaz. Normal olarak SMS ler birkaç saniye içinde hedefe ulaşırlar ama ulaşımın günler sürmesi hatta ulaşamamasıda olabilir.
MIDP telefonlarda SMS JSR-120 API si var ise kullanılabilir. Birçok telefonda olmayan JSR-120 Nokia 3650,3410 nun yeni versiyonlarında , 6600 , 6630 gibi telefonlarında bulunur.

Şekil - 8


MMS
Multimedia Mesaj Servisi SMS in resim , ses , video eklentileride gönderilmesini sağlayan gelişmiş versiyonudur. SMS gibi MMS te Sakla ve Gönder yapısında çalışır.
MMS , SMS ve HTTP nin bir kombinasyonu olarak çalışır. MMS JSR-205 API olan telefonlarda kullanılabilir. Bu makale yazıldığında JSR-205 'in tanımı hala tamamlanmış olup devam etmektedir.

Oyun Sunucu Teknolojileri

HTTP ve HTTPS
Server tarafında normal HTTP uygulamları yazarken kullandığınız istediğiniz bir teknolojiyi kullanabilirsiniz : Static Web sayfaları , CGI , ASP , Java Servletları , JSP. Normal olarak J2ME ile uğraşan programcılar server tarafındada Java teknolojilerini seçmektedirler. Server tarafılı Java teknolojileri açık kodlu Apache Tomcat tarafından desteklenmektedir.

TCP ve UDP
TCP ve UDP için J2EE nin servlet uygulama modeli yoktur. Eğer Java ile server tarafında çalışan bir TCP yada UDP kullanan bir server uygulaması geliştirecekseniz , herşeyi siz geliştirmelisiniz , hatta Java Platformunu bile. Bu konuda kaynak olarak kullanılabilecek olan Java ile ağ programlama konusunda yazılmış en iyi kitaplardan birisi "Java ile Ağ Programcılığı" dır.

SMS ve MMS
Nokia Forumun Mesajlaşma bölümünde SMS ve MMS server uygulamaları geliştirmek için yeterli bilgi bulabilirsiniz. Bunun yanısıra piyasada , SMS ve MMS server uygulamaları geliştirmek için birçok 3.partilerin geliştirdiği uygulamalar bulabilirsiniz.
Eski adı MGIF (Mobile Games Interoperability Forum) olan OMA (Open Mobile Alliance's) grubunun bir çalışma komitesi olan Oyun Servisleri Çalışma Grubu , SMS ve MMS desteğide içeren MGIF-SPEC isimli oyun sunucuları standartını açıklamıştır. Bu makale yazıldığı sıralarda henüz bu standartı duyurmamışlardı.

-> Makalenin Devamı için tıklayınız->