2012-05-27 3 views
0

현재 게임을 구현 중이며 네트워크 기능을 추가하려고합니다. (즉, 내 응용 프로그램/게임에 참여하고 호스트 할 수 있기를 원합니다). 이것은 처음 상상했던 것보다 훨씬 어려워 보입니다. 이 질문의 목적은 이러한 종류의 구현을위한 좋은 일반적인 데이터 구조 선택이 있는지 묻는 것입니다. 당신은 OOP를 사용할 수클라이언트/호스트 네트워크 게임 설계

f() { if (host) doSomething() else doSomethingCompletelyDifferent() }

답변

2

:

내 주요 문제는 현재 다음과 같이 내 게임 클래스의 기능을 많이 가지고있다. 아아, 사용하는 프로그래밍 언어를 제공하지 않습니다. 당신은 C로 프로그래밍하는 경우

예를 들어, 당신은 할 수

struct thefunctions { 
    void (*stuff1)(void); 
    void (*stuff2)(int); 
    int (*get)(int); 
}; 

struct thefunctions network { 
    .stuff1 = doSomething; 
} 

struct thefunctions standalone { 
    .stuff1 = doSomethingCompletelyDifferent; 
} 

struct thefunctions * funcs; 

[...] 

if (host) { 
    funcs = &network; 
} else { 
    funcs = &standalone; 
} 

// now the structs are initialized. We can now use funcs->. 

[...] 

// If I am sure that stuff1 has been initialited properly, I can do 
funcs->stuff1(); 

// If not, I should check first 
if (funcs->stuff1) funcs->stuff1(); 

// or 
assert(funcs->stuff1); 
funcs->stuff1(); 
0

개인적으로 네트워크 응용 프로그램에 대해 동일한 클래스의 서버와 클라이언트 코드를 작성하지 않을 것입니다. 아마도 당신은 같은 인터페이스 또는 기본 클래스에서 파생 된 ServerGame 및 ClientGame 클래스를 고려할 수 있습니다.

다른 특정 데이터 구조에 관해서는 필자가 작성한 플랫폼과 사용하는 언어에 따라 달라질 것이라고 생각합니다. 예를 들어 .NET 세계에서 낮은 수준의 네트워킹 물건을 숨기려면 WCF를 활용하십시오)

0

가장 좋은 방법은 항상 게임 서버를 사용하는 것입니다. 그런 다음 로컬에서 게임을 즐기거나 컴퓨터에 호스트 된 네트워크 게임이나 다른 사람이 참여할 수 있습니다.

작업 하나는 서버에서 필요한 기능과 클라이언트에서 필요한 기능을 분리하는 것입니다. 일반적으로 클라이언트의 UI와 서버의 논리/저장소입니다.

데이터 구조는 게임에 크게 의존하기 때문에 전환하는 것이 현재 코드에 따라 다르기는하지만 클라이언트 서버를 사용하는 것이 좋습니다.

관련 문제