Android de resim tamamlama oyunu yazdık. Bizden bunu multipalyer tarza getirmemiz istendi.Bunu nasıl sağlayabiriz. İnternet üzerinden oynanacak. Ve oyunu oynayanlar sıralamaya sokulacak. Bu sistemi geliştirme basamaklarını yazabilir misiniz?

soruldu: 04 Tem '12, 10:41

emax_64's gravatar image

emax_64
64589102101
cevap kabul oranı: 20%

değiştirildi: 05 Tem '12, 02:54

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183

Oyununuz tam olarak nasıl işliyor? Oyun bir two-player zero-sum oyun mu yoksa sadece oyun sonunda elde edilen puanı mı submit etmek isyiyorsunuz?

(04 Tem '12, 12:52) OguzOzkeroglu OguzOzkeroglu's gravatar image

Oyun bir resim bulma oyunu. Hamle sayısı arttıkça puanı azaltıyoruz falan. O kısımlar tamamlandı. Bizden bu oyunun internetten multiplayer şekilde oynatılabilmesi isteniyor. 1 günde oynayan 500 kişi olsun diyelim. İlk 10 veya hepsi sıralama sokulacak. En yüksek puanı kim almışsa o kişiye bir ödül verilecek. Sistemin aynen bu şekilde olması bekleniyor. Ancak multiplayer lı bir hale getirmek için nereden başlayıp devam etmek konusunda sıkıntı çekiyoruz.

(04 Tem '12, 14:02) emax_64 emax_64's gravatar image

Anladığım kadarıyla oyun turn based bir oyun değil, aynı anda oynamaları gibi kriterler yok. Bu yüzden socket açıp, client ları bağlamaya gerek yok.

Oğuz bahsetmiş aslında.

İşin görecek kadar restful service ve güzel bir database tasarımı ile bu iş çözülebilir. Kişi oynadıkça başarılı oldukça toplarsın puanları. Bir takım caseler mevcut olur.

  • İnternete bağlı ise puanlarını gönder
  • Bağlı değilse localde tut bağlanınca gönder
  • Bağlı değilse hiç gönderme

--------- OYUN (DEVICE tarafindaki DB) ---> WEB SERVICE ----> KENDI DB NIZ

---- WEB SERVICE ( PARAMETRELER : kullanici_id, puan(o an oyunda kazanilan varsa))

-- Skorlar tablosuna kullanici_id ve bugünün tarihi ile sorgu at, bugün içinde puan kazanmış ise gelen puana ekle datayı update et.
-- Skorlar tablosundan bugün için birşeyler dönmüyor. O zaman bu puan ile bugünün tarihi ve kullanıcı id ile insert et.
-- Günün tarihine göre skorlar tablosundan puanı desc olana göre sorgu yaz, günün skorlarını gönder
-- Tüm zamanların skoru için aynı kullanıcı id ye sahip kişilerin puanlarını sum yap dönder.

vs vs.... skorlar tablosunun yanında birde kullanıcı tablosu yaparsın. ordaki kullanıcı id ile skorlardaki bir birine bağlarsın kullanıcı isimlerini felanda web servis ile dönebilirsin.

permanent link

cevaplandı: 05 Tem '12, 16:12

gklp's gravatar image

gklp
789317
cevap kabul oranı: 17%

Aynı anda da oyun oynanabilmesi lazım. O nedenle ben server soket tarzı düşünmüştüm olayı. Birde benim aklıma bir şey takıldı. Web servis bizim bu sistemde ne işimize yarayacak. Ayrıca; OYUN (DEVICE tarafindaki DB) ---> WEB SERVICE ----> KENDI DB NIZ Böyle bir şey yazmışsınız. bu ne demek pek anlamadım. Device tarafındaki DB derken neyi kastediyorsunuz. Sadece bir veri tabanı olacak ve server da bulunmayacak mı? Ben bu şekilde düşündüm. Yanlışsam lütfen düzeltin.

(06 Tem '12, 01:40) emax_64 emax_64's gravatar image

" 1 günde oynayan 500 kişi olsun diyelim. İlk 10 veya hepsi sıralama sokulacak" demişsin. Benim aynı anda oyundan kastım mesela 10 kişi aynı anda resmi bulmaya çalışması. Okey gibi mesela aynı contextde olmalılar. seninkinde böyle bir durum yok gibi kişiye oyun açılacak o tek başına çözdükçe puan kazanacak. Durum böyle değil mi ?

(06 Tem '12, 02:16) gklp gklp's gravatar image

Evet aynen bu şekilde olacak.

(06 Tem '12, 05:07) emax_64 emax_64's gravatar image

Bunun için localde SharedPreferences (ya da SqLite) kullanarak oyuncunun en yüksek skorunu tutabilirsin. Oyun ilk kurulduğunda 0 olur, ilk oynandığında da oyundan alınan puan ile güncellenir. Daha sonra oyuncunun oyunu her oynayışının ardından bu değer oyunun skoru ile karşılaştırılıp güncellenebilir. Böylece localde haftalık olarak en yüksek skoru tutabilirsiniz.

Daha sonra bu değerleri global olarak karşılaştırabileceğiniz bir veritabanınız olur ve Android tarafında olan her yeni skor değişikliğinde bir webservis aracılığıyla bu değerler veritabanına atılır. Bu sayede oyun her oynandığında değil de sadece skor değiştiğinde veritabanına gidileceği için performanstan biraz kazanılmış olur.

Veritabanında da userId, userName, name-surName, topScor gibi alanlarınız olabilir. Bu bilgileri de paylaşmak işin en kolay kısmı olsa gerek. Skorları yüksekten düşüğe göre sıralayıp ilk 10 tanesini gösterebilirsiniz. Tabi günlük, haftalık, aylık vs gibi filtreleri de ekleyerek uygulamanızı zenginleştirebilirsiniz.

permanent link

cevaplandı: 05 Tem '12, 04:05

OguzOzkeroglu's gravatar image

OguzOzkeroglu
2.5k32939
cevap kabul oranı: 40%

Ben böyle bir sistemin server soket mantığı ile çalışacağı düşüncesi ile o kısımlara çalışmaya başladım. Bir tane server olacak diğer tüm client lar ona bağlanacak gibisinden düşündüm. Acaba düşüncemde yanlışmıyım?

(05 Tem '12, 14:28) emax_64 emax_64's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×817
×15

Soruldu: 04 Tem '12, 10:41

Görüntüleme: 2,448 kez

Son güncelleme: 06 Tem '12, 05:07

powered by BitNami OSQA