Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

C# ile online oyun ile ilgili soru

Konu, 'C#' kısmında ankizor tarafından paylaşıldı.

  1. ankizor

    ankizor Daimi Üye

    Kayıt:
    13 Temmuz 2008
    Mesajlar:
    702
    Beğenilen Mesajlar:
    2
    ben online 2 kişi oynayabileceği oyun yapmayı düşünüyorum.
    fakat aklıma takılan bazı düşünceler var
    mantık olarak 1 kişi Server 1 kişi client olacak

    Mesela oyunda 2 buton [SERVER] [CLIENT]

    A isimli kişi SERVER tıklayacak ve IP adresini B isimli arkadaşla paylaşacak
    B CLIENT'ten giriş yapıp A ile bağlantı kurucak

    gelelim sorularımıza
    1) ben oyundaki nesnelerin puanların veriler haline getirip her saniye client'e yollanmasını düşünüyorum. bu mantıklı mı yoksa başka nasıl bir mantık yürütebilirim?
    2) oyundaki objeleri classları cliente veri olarak gönderebiliyor muyum? (sanırım object olarak gidiyor ve bunları client'e cast etmem gerek?)
    şimdilik sorularım bunlar
     
  2. Cihan Yakar

    Cihan Yakar Daimi Üye

    Kayıt:
    8 Temmuz 2003
    Mesajlar:
    5,886
    Beğenilen Mesajlar:
    1
    Şehir:
    Ankara
    Oyunun türü biçimi mantığı hakkında zerre bilgi vermemişsiniz. Satranç, dama gibi zamanlamanın pek önemli olmadığı oyunlar geliştirmediğinizi varsayarsak :

    1. Oyun anlık tepkiler gerektiriyor olacağından saniye çok uzun bir süre olur. Bir tarafta iş ne zaman yapılırsa o anda göndermek en doğrusu olacaktır. Hatta tcp yavaş bir protokol olduğu için gecikmeyi en aza indirmek için oyun içi verileri udp ile göndermeniz gerekir çoğu zaman. Fakat udp de güvenilmez bir protokol olduğundan sunucu tarafta oyunun state'i tutulmalı ve bu bilgi clientlara zaman zaman iletilmelidir (client tarafından gelen veriler her türlü modifiye edilebileceğinden genel (public) bir oyun geliştiriyorsanız asla client'dan gelen veriye güvenmeyin. Hile kontrolünüz olsun). Bir çok oyunda karakterinizin dağları bayırları aşıp bir anda başladığı noktaya dönmesinin sebebi budur.

    2. Binary olarak serialize edip gönderebilirsiniz. Serialize ve Deserialize işlemini yapan assembly aynı ise zaten iki tarafta nesnenin türünü biliyor olacağından sıkıntı çekmez. Fakat binary serialize bile yapsanız hem serileştirme hemde açma işlemlerinin gerektirdiği zaman ve serileştirilmiş paketin boyutu büyük olacağından ağ üzerinden gideceği zaman dikkate alınırsa oyunda gecikmeler yaşanabilir. Paket boyutunu minumum tutarak hızlı hesaplamalar ile ekrana yansıtacak şekilde kodlamanız gerekir.

    Oyun işi chat uygulamalarına pek benzemez. Çok dikkatli ve mümkün olduğunca sadece ve düşük seviye (low level) kodlarla çalışmalısınız.
     
  3. ankizor

    ankizor Daimi Üye

    Kayıt:
    13 Temmuz 2008
    Mesajlar:
    702
    Beğenilen Mesajlar:
    2
    teşekkürler
    yapacağım oyun bomberman türü birşey olacak