2010-08-01 8 views
1

현재 몇 가지 문제가 있습니다.Silverlight Game Logic은 클라이언트 측 또는 서버 측에 있습니까?

저는 두 명의 플레이어가하는 카드 게임 (탑 트럼프)을 개발 중입니다. 가장 적합한 아키텍처를 설정하는 방법을 궁금합니다.

지금 거의 모든 게임 로직이 클라이언트 측에서 계산됩니다.

게임 상태가 데이터베이스 테이블에 저장됩니다. 데이터베이스는 1 초마다 업데이트됩니다. 그러나 두 선수가 경기를하고 있기 때문에 몇 가지 문제가 있습니다. 이 접근 방식에 문제가 생기지 않는 것은 정말 어렵습니다.

아마도 WCF 서비스로 서버 측의 모든 게임 로직을 처리하고 클라이언트 측을 발표자로 사용하는 것이 더 나을 것입니다. WCF는 모든 게임 논리를 처리하고 데이터베이스의 상태를 저장 /로드하며 두 클라이언트는 XML을 통해 전송되는 게임 상태를 요청할 수 있습니다.

그런 접근 방식에 대해 어떻게 생각하십니까? 어때? 아니면 누군가가 더 나은 접근법을 알고 있을까요?

미리 감사드립니다.

+0

Silverlight는 브라우저에서 제공되는 응용 프로그램이므로 플레이어가 중앙 서버와 통신해야하는 별도의 컴퓨터에서 재생 될 가능성이 높으므로 서버에서 논리를 호스팅하는 것이 가장 쉬운 선택 인 것 같습니다. 부정 행위를 방지하는 것과 같습니다. – slugster

+0

지금 당면 고민중인 문제는 WCF 서비스가 기본적으로 무국적으로 사용된다는 것입니다. 나는 무언가를 필요로한다. 그렇지 않으면 항상 데이터베이스를 업데이트해야합니다. – Ben

+0

대부분의 온라인 게임은 항상 데이터베이스를 업데이트하는 것을 고려하지 않습니다. – Kylotan

답변

1

클라이언트와 서버 모두에서 일부 상태를 구현해야합니다. 예를 들어 플레이어는 카드를 내려 놓고 상대방이 자신의 카드를 재생할 수있는 기회를 갖기 전에 즉시 다른 카드를 내려 놓을 수 없습니다. 그렇습니다. 많은 로직이 서버 측에서 처리되어 클라이언트가 간헐적으로 업데이트를 확인해야합니다.

+0

예만 문제는 전체 시간 동안 데이터베이스에서로드하는 것을 방지하는 방법입니다. 상태 보존 형 게임 객체 서버 측을 처리하는 방법이 필요하지만 일반적으로 WCF 서비스는 상태 비 저장으로 사용됩니다. – Ben

+0

각 클라이언트 호출에서 상태를 직렬화/비 직렬화 할 때 예상되는 문제의 정도는 어느 정도입니까? 데이터베이스가 쿼리/데이터 (잘 작성된 경우)를 캐싱해야하며 상태가 특별히 커야합니다. 얼마나 많은 사용자가 당신을 기다리고 있습니까? –

3

효과적인 게임 방식으로 부정 행위를 방지 할 수있는 유일한 방법은 서버의 게임 논리입니다. 클라이언트를 신뢰하지 마십시오.

+1

하지만 합법적으로 $ 1,000,000,000을 받았습니다 - 내 사용자 이름은 실제로 " '; UPDATE 계정 SET 금액 = 1000000000; -" –

관련 문제