2012-04-01 21 views
13

Pygameプロジェクトの基本的なネットワークを構築する必要があります。Pygameとの基本的なネットワーク

基本的には、2Dのシングルプレイヤーまたは共同ゲームです。ネットワークは、1人をホストとして、2人のプレーヤーをサポートするだけでよい。

送信する必要がある唯一の情報は、プレイヤー、クリープ、および弾の位置です。

私は周囲を読んでいて、Twistedは今後も続きますが、私は以前にネットワーキングを行っていないので、それが過度なものかどうかはわかりません。

これで、比較的新しい初心者が、Pygameでネットワーキングを実装することは可能ですか?誰かが私を正しい方向に向けることができますか?

答えて

11

これは最近Redditで尋ねられました。だから、多かれ少なかれ私の答えをそこからコピーします。私はもっ​​と多くのリンクを提供することができないことをお詫びします。< 10名ですので、一度に2つしか投稿できません。

ツイストが効いているかもしれませんが、私はそれに多くの経験はありません。とにかくTwistedがバックグラウンドで使っているように、ソケットを使うことをお勧めします。 Beejのガイド(google it)は、彼らがどのように動作するのかを知りたいならば、ソケットの聖書です(C++では、概念はどこにでもあります)。 Pythonはいくつかの複雑さを抽象化しますが、バックグラウンドで何が起こっているのかを知ることはまだ良い考えです。

Python固有のソケットについては、先に説明したハウツー(user745294が上記のリンクを投稿しました)を使用することができます。 Hereは「すべてのプログラマーがゲームネットワーキングについて知っておく必要があるもの」という素晴らしい記事です。それは主要なネットワーキングスタイル(クライアント/サーバ、P2P、UDP/TCPなど)と、主要なゲームがネットワーキングに使用した背景の歴史に分かれています。

以下は、Python 2.6/Pygameでネットワーク化された「ゲーム」を作成する際に行ったデモへのリンクです。実際にはゲームではありませんが、作成する各クライアントはサーバーに接続してキャラクターを制御します。矢印キーでキャラクターを移動すると、接続されたすべてのクライアント上でキャラクターが移動します。私は前後に何を送信しているのかを示してソースコードにコメントしてみましたが、ソケットについて理解するためには少し知識が必要です。

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

+0

ここには、mediafireにアクセスしたくない場合のためのクライアント/サーバーへのコードパッドリンクがいくつかあります(独自のbg.pngとsprite.pngを用意する必要があります)。 サーバー:http://codepad.org/p9lVrmqn クライアント:http://codepad.org/e6pwGj24 – nemec

+1

とにかくmediafireのリンクが死んでいるようです。コードパッドのリンクは素晴らしいですが、ありがとう! –

0

Pythonでネットワーキングのための別の解決策としてピロ(パイソンリモートオブジェクト)があります。生のソケットを使用

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

+0

信頼できない通信にPyroを使用しないでください。それは間違いなくインターネット上でプレイされるゲームには適していません。 http://packages.python.org/Pyro4/security.html#pickle-as-serialization-format – Glyph

+0

私はそれが最高のユースケースではないことを認めます。 – Tshirtman

0

ローレベルと危険に満ちています。これまでにも述べたように、Twistedは複雑で時間がかかって起動します。自分自身にいくつかの頭痛の種を保存するには、私はあなたが次のソリューション必要https://github.com/dotcloud/zerorpc-python

のようなものを試してみた:(ローカル)ネットワーク上の他のプレイヤー(複数可)を発見

  • を、あなたはプレイヤーは、いくつかのIPアドレスを入力する必要はありません
  • ネットワークエラーを処理します
  • データを含むメッセージ(位置、プレーヤー名など)をシリアル化します。それでも「基本」と呼ばれるべきネットワーキングなど)
  • ハンドルスレッドが上記のIO

非同期である、あなたは本当に慣用的なAPIとライブラリをネットワーキング、いくつかの空想を使用する必要があります。

UPDATE:

基本的に、あなたのpygameのコードからこの同じキューにアクセスし、その後、PythonのQueueにメッセージをプッシュします(それ自身のスレッドで)ネットワークサービスを公開する必要がある、とのメッセージがある場合は、あなたが更新プレーヤーの位置を保存して画面上に描画するために使用する構造は何でも構いません。あなたは簡単に(そしてより速く)ローカルで計算することができるので、ネットワーク上の箇条書きのようなものを送るべきではありません。ちょうどbullet_shotのようなイベントを送信元の位置と速度のベクトルでネットワーク上に送ります。

+2

ツイストはすべて複雑ではありません。エコーサーバーは3行のコードです。 2ウェイRPCサーバーはそれ以上のものではありません。 Twistedは一般的なネットワーキングソリューションですが、ゲームクライアントに適しています.zerorpcはzeromqに依存しているため、信頼できないクライアント通信には適していません。バックエンドサービスを互いに調整することがより重要になります。 – Glyph

1

あなたは既にPygameを使用しているので、私はこのPygame用の軽いネットワーキングライブラリが必要とすることを行い、教えてくれますが、あなたを圧倒するものではないと思います。 "Mastermind Networking Lib" via pygame.org

6

TwistedをPyGameとのネットワークに使用できます。 LaunchpadのThe "game" projectには、メインループの統合方法の例がいくつかあります。基本的には、twisted.internet.task.LoopingCallを使用してPyGameフレームを描き、入力を処理し、選択したTwisted reactorを正常に実行させます。

関連する問題