Arkadaşlar, herkese merhaba. Yazılım Topluluğu forumuna an itibarıyla katılmış bulunuyorum. Forum yöneticilerini tebrik ederek başlamak istiyorum, çünkü forumun tasarımı ve ortamı harika olmuş. Böyle devam etmesi dileklerimle. Girişimizi bitirdiğimize göre asıl konumuza geçebiliriz.
Socket Programlamayı aramızda bilmeyen yoktur diye düşünüyorum. Her derde deva bir çözümdür, ayrıca çok eski bir teknoloji olmasına rağmen de günümüzde sıklıkla kullanılmaktadır. Türkiye'de bu konu hakkında sade ve anlaşılabilir anlatım yapan herhangi bir kişi ya da kanal göremedim. Ek olarak chat uygulamaları dışında sunulmuş farklı örnekler yok. Ben de bu duruma istinaden, Taş Kağıt Makas oyununu, .NET Socket teknolojisi ile sıfırdan yazdım ve Github hesabımda paylaştım. Socket Programlamaya ilgisi olanların inceleyebileceği, sevebileceği bir örnektir.
Source Repository: https://github.com/horriblebyte/TasKagitMakasOnline
Kaynak kodlar dışında, uygulamayı çok fazla kullanıcı ile test edebilmem için bir sunucu kiraladım. Aşağıdaki linkten indireceğiniz istemciyle doğrudan bu sunucuya bağlanabilir ve herhangi bir arkadaşınız ile Taş Kağıt Makas'ı online olarak oynayabilirsiniz. 🙂
Test Client Link: https://www.mediafire.com/file/4gczid1e2zo0kc3/TasKagitMakasClient.zip
Dip not: Test client üzerine herhangi bir obfuscate, packing işlemi uygulanmamıştır, gönül rahatlığı ile indirip kullanabilirsiniz.
İstemci Senaryosu
- İstemci ilk açılışta, sunucu ile bağlantı kurmayı dener. Bu işlem, bağlantı problemleri oluştuğunda 20 saniye kadar sürebilir. Bağlantı denemeleri devam ettiği sürece aşağıdaki ekran kullanıcıya gösterilir.
- Bu süre sonunda eğer bağlantı gerçekleşmezse, istemci; sunucuya bağlanamadığının bilgisini verir ve kendini kapatır.
- Sunucuyla başarılı bir bağlantı kurulduğu anlaşıldığında, istemci sunucudan bir oda kodu talep eder ve oda kodunu aldığında ekrana yazarak kullanıcıyı bilgilendirir. Bu ekranda kullanıcı kendi oda kodunu paylaşarak bir arkadaşını kendi odasına davet edebilir ya da arkadaşının paylaşmış olduğu oda kodunu alarak onun odasına katılabilir.
- Kullanıcı herhangi bir odaya katıldığında ya da kendi odasına farklı bir kullanıcı katıldığında, sunucu odadaki tüm istemcilere oyun başladı paketini gönderir ve odadaki istemcilerde oyun ekranı gösterilir. Bu ekranda bir hamle seçimi yapılması gerekir.
- Hamle seçimi yapıldıktan sonra eğer rakip halâ hamle seçimi yapmamışsa, rakibin beklendiğini temsil eden ekran kullanıcıya gösterilir.
Rakip seçim yaptıktan sonra oyunun final ekranı açılır. Final ekranda kullanıcı, kimin kazanıp kaybettiğini, rakibinin hamlesini ve skorunu öğrenebilir.
Kazandığında aşağıdaki ekran gösterilir.
- Kaybettiğinde aşağıdaki ekran gösterilir.
- Durum berabere olduğunda aşağıdaki ekran gösterilir.
- Oyun esnasında rakip oyuncu oyundan ayrıldığında, odadaki oyuncuya aşağıdaki bilgilendirme mesajı gösterilir.
- Oyun esnasında bağlantıda herhangi bir problem olduğunda aşağıdaki bilgilendirme mesajı gösterilir ve istemci kendini kapatır.
- Uygulama kapatılmaya çalışıldığında aşağıdaki diyalog penceresi gösterilir. Evet cevabı verilirse istemci kendini kapatır.
- Uygulamanın konseptine uygun olması düşüncesiyle bu tarz mesajlar standart MessageBox ile değil, DialogBox görevi gören bir Form aracılığıyla gösterilmiştir.
Yazımı okuduğunuz için teşekkür ederim. İyi akşamlar dilerim.