2012-04-01 6 views
13

파이 게임 프로젝트를위한 기본적인 네트워킹이 필요합니다.파이 게임과의 기본 네트워킹

기본적으로 2D 싱글 플레이어 또는 협동 게임입니다. 네트워킹은 호스트로 1 명을 포함하여 2 명의 플레이어 만 지원하면됩니다.

보내야 할 유일한 정보는 플레이어, 크립 및 글 머리표의 위치입니다.

나는 주위를 읽었으며 Twisted는 계속 나오고 있지만 네트워킹을 해본 적이 없으며 과도할지 모르겠습니다.

따라서 상대적으로 초보자가 파이 게임에서 네트워킹을 구현할 수 있습니까? 누구든지 올바른 방향으로 나를 가리킬 수 있습니까?

답변

11

최근에 Reddit에서이 질문을 받았으므로 답장을 복사하겠습니다. 나는 더 많은 링크를 제공 할 수 없다는 것에 대해 사과드립니다. < 10 명의 담당자가 있으므로 한 번에 2 개만 게시 할 수 있습니다.

트위스트가 작동 할 수도 있지만 전반적인 경험이 없습니다. 어쨌든 Twisted가 백그라운드에서 사용하는 것과 마찬가지로 소켓을 사용하는 것이 좋습니다. Beej의 가이드 (google it)는 그들이 어떻게 작동 하는지를 배우고 싶다면 소켓의 성경이다. (C++에서는 개념이 모든 곳으로 확장되어있다.) 파이썬은 복잡성의 일부를 추상화하지만, 백그라운드에서 진행되는 작업을 파악하는 것은 여전히 ​​좋은 생각입니다.

파이썬 특정 소켓의 경우, 앞으로 가서 하우투 (위의 링크를 게시 한 user745294)를 사용할 수 있습니다. Here은 "모든 프로그래머가 게임 네트워킹에 대해 알아야 할 사항"이라는 멋진 기사입니다. 그것은 주요 네트워킹 스타일 (client-server, p2p, udp v. tcp 등)의 여러 유형과 네트워킹을 위해 사용 된 주요 게임의 역사가 있습니다.

아래는 파이썬 2.6/파이 게임에서 네트워크로 연결된 "게임"을 만들 때 사용한 데모 링크입니다. 실제로 게임이 아니지만 만드는 각 클라이언트는 서버에 연결하여 문자를 제어합니다. 화살표 키로 캐릭터를 움직일 수 있으며 캐릭터는 연결된 모든 클라이언트로 이동합니다. 나는 앞뒤로 보내고있는 것에 대한 어떤 표시로 소스 코드에 주석을 달았지만, 소켓을 이해하기 위해서는 약간의 지식이 필요하다.

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

+0

다음은 mediafire를 방문하지 않으려는 경우 Client/Server에 대한 몇 개의 코드 패드 링크입니다 (자신의 bg.png 및 sprite.png를 제공해야 함). 서버 : http://codepad.org/p9lVrmqn 클라이언트 : http://codepad.org/e6pwGj24 – nemec

+1

어쨌든 mediafire 링크가 죽어있는 것 같습니다. 그래도 코드 패드 링크는 훌륭합니다. 감사합니다! –

0

파이썬 네트워크에 대한 또 다른 해결책으로 파이 (파이썬 원격 객체)가있다. 원시 소켓을 사용하여

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

+0

신뢰할 수없는 통신에는 Pyro를 사용하지 마십시오. 인터넷을 통해 게임을하는 경우에는 적합하지 않습니다. http://packages.python.org/Pyro4/security.html#pickle-as-serialization-format – Glyph

+0

지적 해 주셔서 감사합니다. – Tshirtman

0

낮은 수준과 위험이 가득합니다. 전에 말했듯이, Twisted는 복잡하고 시간이 오래 걸리고 작동합니다. 자신에게 약간의 두통을 저장하려면 I 당신은 다음과 같은 솔루션이 필요 https://github.com/dotcloud/zerorpc-python

같은 것을 해보고 싶었어요 : (로컬) 네트워크상의 다른 플레이어 (들)을 발견

  • 을, 당신은 플레이어가 어떤 IP 주소를 입력하지 않으
  • 네트워크 오류를 처리하십시오.
  • 데이터가 포함 된 메시지 (위치, 플레이어 이름 등)를 직렬화하십시오.) 네트워킹 등
  • 핸들 스레딩 IO
  • 비동기
위는 여전히 '기본'이라고한다

, 당신이 정말로 관용적 API와 라이브러리를 네트워킹 일부 공상을 사용해야합니다.

UPDATE :

은 기본적으로 당신이 (그것의 자신의 스레드에서) 네트워크 서비스를 노출 할 필요가 파이썬의 Queue에 메시지를 밀어 것입니다, 다음 파이 게임 코드에서이 같은 큐를 액세스하고 메시지가있는 경우 다음 업데이트 플레이어의 위치를 ​​저장하고 화면에 그리는 데 사용하는 구조가 무엇이든간에 네트워크를 통해 총알 위치와 같은 물건을 보내지 않아야합니다. 즉, 로컬에서 쉽게 계산할 수 있기 때문에 소스 위치와 속도 벡터가있는 네트워크를 통해 bullet_shot과 같은 이벤트를 보내면됩니다.

+2

Twisted는 그다지 복잡하지는 않습니다. 에코 서버는 3 줄의 코드입니다. 양방향 RPC 서버는 그 이상은 아닙니다. Twisted는 일반 네트워킹 솔루션이지만 게임 클라이언트에 적합합니다. zerorpc는 zeromq에 의존하기 때문에 신뢰할 수없는 클라이언트 통신에는 적합하지 않습니다. 백엔드 서비스를 서로 조정하는 것이 더 중요합니다. – Glyph

1

당신이 이미 파이 게임을 사용하고 있기 때문에 나는 파이 게임을 위해 만들어진이 가벼운 네트워킹 라이브러리가 당신이 필요로하는 것을 할 것이며 당신을 압도하지 않을 것이라고 생각합니다. "Mastermind Networking Lib" via pygame.org

6

은 PyGame과의 네트워킹에 사용할 수 있습니다. Launchpad의 The "game" project에는 주 루프를 함께 통합하는 방법에 대한 몇 가지 예가 있습니다. 기본적으로, twisted.internet.task.LoopingCall을 사용하여 PyGame 프레임을 그리고 입력을 처리하고 원하는 Twisted reactor를 정상적으로 작동시킵니다.