2012-04-01 19 views
13

Pygame projesi için bazı temel ağları kullanmam gerekiyor.Pygame ile temel ağ iletişimi

Temel olarak, bu bir 2D tek oyunculu veya işbirlikçi oyun. Ağ sadece bir oyuncuyla birlikte 2 oyuncuyu desteklemelidir.

Gönderilmesi gereken tek bilgi oyuncuların, sürüngenlerin ve mermilerin pozisyonlarıdır.

Etrafımı okuyorum ve Twisted gelmeye devam ediyor, ancak daha önce ağ oluşturmadım ve bunun bir overkill olup olmadığından emin değilim.

Yani, bir akraba oyununun Pygame'de ağ oluşturması mümkün mü? Beni doğru yöne yönlendiren var mı?

cevap

11

Bu son zamanlarda Reddit'te sorulmuştu, o yüzden az ya da çok cevabımı oradan kopyalayacağım. Daha fazla bağlantı sağlayamadığım için özür dilerim, < 10 rep'im var, böylece her seferinde sadece iki mesaj gönderebiliyorum.

Twisted işe yarayabilir, ancak onunla çok fazla deneyimim yok. Twisted'in zaten arka planda kullandığı gibi soketlerle gitmenizi tavsiye ederim. Nasıl çalıştıklarını öğrenmek istiyorsanız (C++ 'da, ancak her yerde kavramlar genişler) Beej'in kılavuzu (google) neredeyse Kutsal Kitap İncilidir. Python, karmaşıklığın bir kısmını soyutlaştırıyor, ancak arka planda neler olduğunu bilmek hala iyi bir fikir.

Python'a özgü soketler için, devam edebilirsiniz ve sadece howto'yu kullanabilirsiniz (user745294 yukarıdaki bağlantıyı yükledi). Here, "Her programcının Game Networking hakkında bilmesi gereken" başlıklı güzel bir yazı. Farklı büyük ağ stillerine (client-server, p2p, udp v. Tcp, vb.) Ve ağ için kullanılan bazı büyük oyunların arkasındaki geçmişe gider.

Aşağıda, Python 2.6/Pygame'de ağa bağlı bir "oyun" yapmak için yaptığım bir demoya bir link bulunmaktadır. Bu aslında bir oyun değil, oluşturduğunuz her istemci sunucuya bağlanır ve bir karakteri kontrol eder. Karakterinizi ok tuşları ile hareket ettirebilirsiniz ve karakter bağlı tüm istemcilerde hareket edecektir. Kaynak kodunu, geri gönderdiğim şeyin bir göstergesiyle yorumlamayı denedim, ancak bunu anlamak için yuvalar hakkında biraz bilgi sahibi olmanız gerekebilir.

http://www.mediafire.com/?bjwr225lpefzkfj

+0

Ortamı ziyaret etmek istememeniz durumunda (bg.png ve sprite.png'nizi sağlamanız gerekir) İstemci/Sunucu için bir kaç kod defteri bağlantısı vardır. Sunucu: http://codepad.org/p9lVrmqn İstemci: http://codepad.org/e6pwGj24 – nemec

+1

Mediafire bağlantısı yine de silinmiş gibi görünüyor. Codepad bağlantıları olsa da, teşekkürler! –

0

piton ağ için bir çözüm olarak piro (piton uzak nesne) bulunmaktadır. ham yuva kullanma

http://irmen.home.xs4all.nl/pyro/

+0

Güvenilmeyen iletişimler için Pyro kullanmayın. İnternet üzerinden oynanan bir oyun için kesinlikle uygun değildir. http://packages.python.org/Pyro4/security.html#pickle-as-serialization-format – Glyph

+0

Kabul ettiğim için bunun en iyi kullanım örneği olmadığını itiraf ediyorum. – Tshirtman

0

düşük seviyeli ve tehlike doludur. Daha önce de söylendiği gibi, Twisted karmaşıktır ve zaman alır ve çalışır. Kendinize biraz baş ağrısı kaydetmek için ben aşağıdaki çözümlere ihtiyacımız https://github.com/dotcloud/zerorpc-python

gibi bir şey denemek istiyorum: (yerel) ağdaki diğer oyuncu (lar) keşfetme

  • , sen oyuncu bazı IP adresini girmek istemiyorum
  • ağ hatalarını ele alma
  • verilerinizi içeren iletileri (konumlar, oynatıcı adı vb.) Serialize edin) Ağ olarak
  • sap parçacığı IO
  • eşzamansızsa
Üstü hala 'temel' çağrılmalıdır

, gerçekten deyimsel API ile ağ kütüphane bazı fantezi kullanmalıdır.

GÜNCELLEME:

Esasen sen (kendi thread) şebeke servisini açığa çıkarmam gerek Python en Queue mesajlar itecek, sonra Pygame koddan bu aynı sıraya erişmesi ve bir mesaj varsa o zaman güncellemek Oyuncunun pozisyonunu saklamak ve ekranda çizmek için kullandığınız her türlü yapı. Şebeke üzerinden mermi pozisyonu gibi şeyler göndermemelisiniz çünkü lokal olarak kolayca hesaplanabilir (ve daha hızlı), sadece kaynak pozisyonu ve hız vektörü ile ağ üzerinden bullet_shot gibi bir olay gönderirsiniz.

+2

Twisted hepsi bu kadar karmaşık değil. Bir eko sunucusu 3 satır koddur. 2 yönlü bir RPC sunucusu bundan daha fazla değil. Twisted, bir oyun istemcisi için uygun olsa da, genel bir ağ çözümü, zerorpc, zeromq'a dayanır ve bu nedenle güvenilmeyen-istemci iletişimleri için uygun değildir; arka uç hizmetleri birbirleriyle koordine etmek için daha fazla. – Glyph

6

PyGame ile ağ iletişimi için Twisted kullanabilirsiniz. Launchpad'de bulunan The "game" project, ana döngüleri nasıl birleştirebileceğine dair bazı örneklere sahiptir; Temel olarak, seçtiğin Twisted reaktörünün normal çalışmasına izin verirken PyGame çerçevelerini çizmek ve girişi işlemek için twisted.internet.task.LoopingCall kullanın.