与Pygame的基本联网

Lig*_*eze 18 python networking pygame twisted

我需要为Pygame项目做一些基本的网络.

基本上,它是2D单人游戏或合作游戏.网络只需要支持2个玩家,其中一个作为主机.

需要发送的唯一信息是球员,小兵和子弹的位置.

我一直在阅读,Twisted不断出现,但我之前没有做过网络,我不确定这可能是一种矫枉过正.

那么,相对新手是否有可能在Pygame中实现网络?谁能指出我正确的方向?

nem*_*mec 12

这是最近在Reddit上被问到的,所以我或多或少只是从那里复制我的答案.我为无法提供更多链接而道歉,我有<10个代表所以我一次只能发布两个.

扭曲可能有用,但我没有很多经验.我建议使用套接字,因为这就是Twisted在后台使用的内容.Beej的指南(google it)几乎就是插槽的圣经,如果你想学习它们是如何工作的(用C++,但概念扩展到各处).Python确实抽象了一些复杂性,但是知道背景中发生了什么仍然是一个好主意.

对于Python特定的套接字,您可以继续使用howto(user745294上面发布了一个链接).是一篇很好的文章,名为"每个程序员需要了解的关于游戏网络的内容".它涉及不同类型的主要网络风格(客户端 - 服务器,p2p,udp v.tcp等)以及一些主要游戏用于其网络的历史背后.

下面是我在Python 2.6/Pygame中制作网络"游戏"的演示的链接.它实际上不是游戏,但您创建的每个客户端都连接到服务器并控制角色.您可以使用箭头键移动角色,角色将在所有连接的客户端上移动.我尝试对源代码进行评论,并指出我来回发送的内容,但您可能需要了解有关套接字的一些知识才能理解它.

源代码在本文后面的评论中的键盘链接中提供.您需要在与脚本相同的目录中提供两个图像:

  1. bg.png是背景精灵.它应该是400px宽和300px高的图像(GameClient如果需要,可以在课堂上更改)
  2. sprite.png是玩家角色.它应该小于背景,以便您可以看到它四处移动.


Gly*_*yph 6

你可以使用Twisted与PyGame建立联系. Launchpad上的"游戏"项目有一些例子说明如何将主循环集成在一起; 基本上,用于twisted.internet.task.LoopingCall绘制PyGame帧并处理输入,同时让您选择的Twisted reactor正常运行.