Bu yazımın konusu host
edilmiş oyunu senkron şekilde bulmak olacak;Hostu nasıl oluşturacağımız hakkındaki yazımı buradan bulabilirsiniz.
Senkron bulmada yapmamız
gereken uygun oturumları (session) bulmak, bulduğumuz oturumda oyuncu için boş
slot aramak eğer uygunsa o slota yerleşmek. Yalnız bu kodu yazıp bitirdikten
sonra 2 bilgisayara ihtiyacınız olacak, birinden host kurup diğerinden buraya
bağlanacaksınız ben sanal makine kullanırım diyenlere eyvallah diyorum. Neyse
ben başlayayım fazla uzatmadan;
Aşağıdaki metot bize oturum
bulmayı ve içinden slot edinmeyi gösteriyor; bu metodu AgIsleri.cs dosyamıza
ekleyelim.
public void OturumBul()
{
// Tüm
uygun sessionların listesi
AvailableNetworkSessionCollection
uygunOturumlar;
//
Katılacağımız session
AvailableNetworkSession
uygunOturum = null;
// Bu
komut ile tüm uygun oturumları listemize almiş oluyoruz
uygunOturumlar =NetworkSession.Find(NetworkSessionType.SystemLink,
maxLocalOyuncu, null);
/* Yukrıda 3. parametredeki null Arama filtrelemek için bir opsiyondur
Buraya istenirse SearchProperties tipinde değer girilebilir */
//
Oyuncu için slota sahip olan bir oturum arıyoruz
foreach
(AvailableNetworkSession aramadakiOturum in uygunOturumlar)
{
// mantık
basit bir oturuma ait açık ve rezerve
//tüm slotların toplamı alınır
int
OturumSlotlariToplami = aramadakiOturum.OpenPublicGamerSlots +
aramadakiOturum.OpenPrivateGamerSlots;
// ve bu
toplam dolu slotlardan fazlaysa hemen o oturum
//uygun kabul edilir.
if
(OturumSlotlariToplami > aramadakiOturum.CurrentGamerCount)
uygunOturum =
aramadakiOturum;
}
// eğer
uygun oturum bulabildiysek katılıyoruz
if
(uygunOturum != null)
{
durum = " " + uygunOturum.HostGamertag + " adlı hostta uygun oturum
bulundu.";
oturum = NetworkSession.Join(uygunOturum);
}
else
durum = "Hiç uygun oturum bulunamadı.";
}
Bu şekilde host arama ve dahil
olma işini hallettikten sonra bu aramayı çalıştıracak kullanıcı etkileşimine
geldi sıra, Game1.cs dosyasını açıyoruz, Update metoduna alttaki kodu
ekliyoruz. Ben etkileşim tuşu olarak “S” (Senkron ara) tuşunu seçtim, siz aslında
uğraşıp görsel tuşlar da ekleyebilirsiniz herşey dikdörtgenden ibaret,
dikdörtgen çizmeyi (hatta içini doldurmayı) bu
yazımda fare etkileşimini de bu
yazımda anlatmıştım. Size de fare tıklamasının dikdörtgenin sınırları içinde
olup olmadığını kontrol etmek içindeyse gerekli işi yaptırmak kalıyor. Ya da dikdörtgene onMouseclick tarzı bir
event handler da yazabilirsiniz gördüğünüz gibi bir sonuca ulaşmanın birden çok
yolu var. Takılırsanız iletişime geçin. Neyse bu moladan sonra işe devam;
Game1.cs sınıfımızın Update metoduna aşağıdaki kodu ekleyelim;
// Oturum
ara
if
(Keyboard.GetState().IsKeyDown(Keys.S))
agYardimcisi.OturumBul();
İşte bu kadar basit XNA’de
herşey çok basit zaten. Yazıyı kısa bulanlar Allah’larından bulsunlar. Bu
saatte yazıyorum. Bir sonraki yazımda da Asenkron şekilde slot aramayı
anlatacağım.