Oyun geliştiriyoruz... Windows Mobile uygulaması olarak geliştirilecek olan oyun, birbirine “bluetooth” bağlantı teknolojisi ile bağlı iki cihaz üzerinde, klasik “Amiral Battı” oyununu karşılıklı oynama olanağı sunacak. Oyun daha sonra WM Pocket PC uygulamasından SymbianOS uygulamasına dönüşecek.
GİRİŞ
Merhaba sevgili BilişimDergi okurları. Geçen ayki yazımda Symbian işletim sistemleri için mobil uygulama geliştirme teknolojileri üzerinde durmuştuk. Symbian işletim sistemleri üzerinde .Net uygulaması geliştirmek için öncelikle klasik WM uygulaması geliştirip, bunun üzerinden NET60 framework’ü kullanarak SymbianOS uygulaması elde edebiliyorduk. Bunun üzerine hem Windows Mobile uygulamaları konusunda biraz daha detaylı bilgi vermek hem de mobil cihazlar üzerinde çalışabilen bir uygulama geliştirmek için basit fakat temel işlevleri kullanan bir oyun geliştirmek istedim. Amiral Battı bu amacımızı karşılayan ve karşılıklı oynanabilen basit bir oyun. Mobil cihazlar üzerinden bluetooth ile oynanma olanağı sunacak olan oyunu bluetooth özelliği olan WM 5.0 ve üzeri cihazlar üzerinde ve eğer başarabilirsek Net60 ile Symbian60 işletim sistemi olan cihazlarda oynayabileceğiz. Bu ay, öncelikle uygulamanın genel mimarisine değinip .Net ile bluetooth haberleşmesi üzerinde duracağız. Zira iki ayrı cihaz üzerinde bulunan uygulamalar birbirleri ile bluetooth altyapısı üzerinden haberleşecekler.
Amiral Battı – Temel Uygulama Mimarisi
Uygulamayı temel olarak iki ana kısma ayırmak akıllıca olacaktır. Kullanıcı arayüzü ise bu iki temel ana bölümü kullanarak oyun fonksiyonları ile kullanıcı arasındaki ilişkiyi kuracaktır. Uygulamanın genel mimarisi Resim 1’de görüldüğü gibidir. Oyun için gerekli olan temel metotlar “ApplicationCoreMethods” içerisinde bulunacaktır. Gemilerin yerlerinin belirlenmesi, isabet alma, atış yapma gibi birtakım temel fonksiyonlar bu metotlar sayesinde gerçekleştirilecektir. Uygulamanın iki ayrı cihaz üzerinde çalıştırılabilmesi için bluetooth bağlantısının gerçekleştirilmesi gerektiğini söylemiştik. İki cihazın bluetooth bağlantısının da açık olduğunu kabul ederek hazırlanan bluetooth ile veri gönderme ve alma ile ilgili metotlar ise “BluetoothCommunicationMethods” içerisinde bulunacaktır. Kullanıcının hangi noktaya atış yaptığı bilgisi bluetooth ile gönderilecektir. Atış yapılan konum verisine karşılık, diğer aygıttaki uygulama atış sonucu verisini gönderecektir. Gemi tipleri, atış yapma koşulları gibi oyun ile ilgili birtakım detayları ve uygulama metotlarını sonraya bırakacak olursak ilk aşamada yapmamız gereken olan kısmın bluetooth haberleşmesi olduğunu söyleyebiliriz. Kısaca bir araştırmadan sonra .NET ile bluetooth haberleşmenin doğrudan olanaklı olmadığını görebiliriz. Bunun çözümü ise InTheHand Ltd. (Peter Foot - MVP) tarafından geliştirilen birtakım kütüphanelerde saklı.
|
| Resim 1: Amiral Battı Oyunu İçin Uygulama Mimarisi |
InTheHand kütüphanelerine değinmeden önce bluetooth teknolojisini kısaca tanıtmakta fayda var.
Bluetooth Nedir ?
Bluetooth kablosuz haberleşme standardıdır. Kablosuz kişisel ağ (WPAN- Wireless Personal Area Network) standardı üzerine geliştirilmiştir. 2.4 GHz frekansı ile (IEEE 802.11) çalışır. Bluetooth artık çoğu cep telefonunun ve PDA türü mobil cihazın desteklediği bir standart. Bluetooth cihazları yayın gücüne göre üç ayrı sınıfa ayrılmaktadır.
- Class 1 – Max. 100 mW (iletim uzaklığı max. 100 m)
- Class 2 – Max. 30 mW (iletim uzaklığı max. 30 m)
- Class 3 – Max. 10 mW (iletim uzaklığı max. 10 m)
Bluetooth fiziksel altyapısı ve protokol yığını ile çok fazla ilgilenmeyeceğimizden dolayı InTheHand kütüphaneleri ile basit bir bağlantı kurma safhasına geçebiliriz.
InTheHand BlueTooth Bağlantı Kütüphaneleri
Bu kütüphaneler bluetooth ile bağlantı kurmak ve veri alışverişi sağlamak amacı ile geliştirilmiş kütüphanelerdir. Ücretsiz olarak www.inthehand.com adresinden edinilebilir. Kütüphaneyi kullanabilmek için InTheHand.Personal.Dll’i uygulamanıza referans olarak eklemeniz gerekmektedir. Daha önceki yazılarımda Visual Studio ortamında mobil uygulama geliştirmek için yapılması gerekenleri anlatmıştım. Aynı şeyleri tekrar anlatmaya gerek duymuyorum ve Resim 2’deki ara yüzü tasarladığımızı varsayarak bağlantı oluşturma kodlarına geçmek istiyorum.
|
| Resim 2: Örnek bluetooth bağlantı uygulaması |
Uygulamada öncelikle bağlanılacak aygıtlar listelenir ve bir listede gösterilir. Listeden seçilen aygıta bağlanılır. Bağlanılan aygıta veri gönderilebilir ya da veri okunabilir. InTheHand bluetooth bağlantı kütüphaneleri ile bu işlemleri yapmak oldukça kolaydır. Bu işlemleri yapmak için klasik network bağlantı soketleri oluşturulacaktır. Uygulamamızda her iki cihaz da hem istemci olarak çalışacak hem sunucu olarak çalışacaktır. Bağlantı kurulduktan sonra bir taraf veri beklerken diğer taraf veri gönderecektir. Sıra ile bu işlemler periyodik olarak devam edecek ve oyun sonlanana kadar hamleler ve sonuç bilgileri sürekli bu bağlantılar ile karşı tarafa iletilecektir. Dolayısı ile öncelikle
private BluetoothClient bluetoothClient; satırı ile bluetooth bağlantı istemcisi oluşturulur.
Bu sınıf ve diğer tüm kütüphane ile ilgili detaylı bilgiye http://inthehand.com/library/ adresinden erişilebilir. İşimize dönecek olursak, bağlantı kurulduktan sonra örnek uygulamamızda karşı tarafa bir mesaj göndermek istediğimizde karşı tarafın bu mesajı alması için dinleme modunda olması gerektiğini (soket dinleme modunda) aklımızda tutarak gönderen taraf için yazılmış kodu aşağıdaki biçimde yazabiliriz.
- static void Main()
-
{
-
Application.Run(new Form1());
-
}
-
private void button1_Click(object sender, EventArgs e)
-
{
-
BluetoothRadio.PrimaryRadio.Mode = RadioMode.Discoverable; //Cihaz görünebilir olarak ayarlanır.
-
bluetoothClient = new BluetoothClient();
-
BluetoothDeviceInfo[] bluetoothDeviceInfo = { }; //Bluetooth cihaz bilgileri için tanımlanmış class
-
bluetoothDeviceInfo = bluetoothClient.DiscoverDevices(10);
-
comboBox1.DataSource = bluetoothDeviceInfo;
-
comboBox1.DisplayMember = "DeviceName";
-
comboBox1.ValueMember = "DeviceAddress";
-
comboBox1.Focus();
-
}
-
private void button2_Click(object sender, EventArgs e)
-
{
-
if (comboBox1.SelectedValue != null)
-
{
-
try
-
{
-
bluetoothClient.Connect(new BluetoothEndPoint((BluetoothAddress)comboBox1.SelectedValue, service));
-
MessageBox.Show("Bağlandı");
-
}
-
catch (Exception ex)
-
{
-
MessageBox.Show(ex.Message);
-
}
-
}
-
}
-
private void button3_Click(object sender, EventArgs e)
-
{
-
if (textBox1.Text != "")
-
{
-
bluetoothClient.Client.Send(System.Text.Encoding.Unicode.GetBytes(textBox1.Text));
-
}
-
else
-
{
-
MessageBox.Show("Mesaj boş olamaz!");
-
}
-
}
|
Aygıt aranması, aygıtın seçilmesi ve seçilen aygıta mesaj gönderilmesi işlevlerini yukarıdaki mouseClick metotları sağlamaktadır. Mesaj gönderme ve alma işlemlerini sağlıklı biçimde yaptıktan sonra oyunumuz için asıl gerekli olan metotların yazılması ve arayüz geliştirme işlemlerine ise gelecek aydan itibaren yine buradan değinmeye çalışacağım. Adım adım “Amiral Battı” oyununu hep beraber burada yazacağız. Esenlikler…
Kaynaklar: