2009-10-30 4 views
7

게임 프로그래밍을 다시 시작합니다. 10 년 전 나는 qbasic에서 게임을 만들고 있었고 그 이후로는 게임 프로그래밍을하지 않았으므로 녹슨 느낌이 들었습니다. 나는 항상 프로그래밍을 해왔다. 나는 웹 개발자/DBA/admin이다. 몇 가지 질문이 있지만 게시 당 하나만 제한하려고합니다.매우 큰 게임 세계를위한 스토리지 설계

내가하고있는 게임은 크고 매우 큰 세계가 될 것입니다. URW과 다소 비슷하지만 더 큰 세계와 'RPG'와 더 비슷합니다. 내가 결정하는 것을 시도하고있다 무엇

는 가장 좋은 방법의지도는, 저장 레이아웃 및 액세스 그것이 무엇이다. 나는 sqlite를 사용하여 데이터를 저장한다는 생각을했다. 그러면 sqlite db를 게임의 저장 파일로 사용할 수 있습니다.

사람은 내가 다른 저장 방법이 나 아이디어를 이동하는 방법에 대한 조언을? 여기

내 게임에 대한 요구 사항은 다음과 같습니다

  • 내가 (전인대의는, 몬스터, 동물은 모두 항상 활성화됩니다) 게임 세계에서 탐지하는 전체 랜덤 액세스가 필요합니다.
  • Stackless Python 3.1을 사용하고 있습니다. 많은 작업을하지 않으면 옵션이 상당히 제한적입니다.
  • 매우 큰 세계를 처리 할 수 ​​있어야합니다.
  • 동시성 지원은 더할 나위없이 좋지만 필자가 필요하다고 생각하지는 않습니다. 외부 요인에 의해이를 사용하도록 강요하지 않는 한

답변

11

는 관계형 데이터베이스와 혼란을하지 않습니다. 파이썬의 pickle, shelve에서

봐.

선반은 빠르며 잘 저울 릅니다. 그것은 파이썬과 비 파이썬 표현 사이의 지저분한 변환을 제거합니다.


편집.

더 중요한 조언. 기술 선택의 어려움을 피하십시오. 위치, 항목, 캐릭터, 규칙 등을 으로 가져옵니다. 파이썬. 가능한 간단하고 정확하게.

코어 모델, 정확성 및 물건을 증명할 수있는 기본 기능 외에는 단 한 번의 뇌 칼로리를 태우지 마십시오. .

모델이 실제로 인 경우으로 작동하고 일부 정교한 단위 테스트로 연습 할 수 있습니다. 기술을 선택할 수 있습니다. 당신이 모델을 일단

, 당신은 의미있는 위치의 수백만을 확장하고 필요한 스토리지의 종류를 볼 수 있습니다. 모델은 바꿀 수 없으며 응용 프로그램의 본질입니다. 성능을 조정하기 위해 액세스 레이어 및 지속성 레이어 만 변경할 수 있습니다. 당신을 위해 무엇을 요구하는지 것은 spacial index의 유형이 같은

+0

흥미 롭습니다. 따라서 링크를 따라갔습니다. 당신이 거기에서 지적한 제한 사항을 (짧게는 작은 객체와 동시성이 없다면) 보았을 때 그것은 에코의 문제인 것으로 보입니다. –

+0

SQLite는 동시성 지원이 제한되어 있습니다. 이 문제가 중요하다는 점은 분명하지 않습니다. –

+0

그것이 저를 위해 작동하는지 아닌지는 확실하지 않습니다. 그러나 나는 그것을 고찰 할 것이다. 고마워. 선반은 전체 선반을 계속 기억하고 있습니까? 나는 문서에서 말할 수 없었다. 또한, 그것의 수백만 가지로 얼마나 잘하는가? – Echo

3

는 소리가 난다. 매우 큰 2d 게임의 경우 quadtree을 사용하는 것이 좋습니다. Quadtree는 넓은 지역을 가지고 있고 지역의 지역화 된 지역에서 활동하는 경향이 있습니다. 이는 대부분의 RPG 유형 게임의 경우입니다.스토리지 요구 사항을 낮게 유지하고 충돌 감지 속도를 향상시킬 수 있습니다.

게임을 저장하는 것과 같이, 플레이어 및 괴물 통계와 같은 것들은 자주 변경되는 것에 대해 걱정이된다면 데이터베이스에 들어갈 수 있습니다. 실제 레벨 레이아웃에서는 게임과 관련된 바이너리 파일 형식을 사용하는 것이 좋습니다. 일반적으로 레벨 레이아웃에서 수행해야하는 데이터베이스 유형 쿼리는 많지 않으며 자신 만의 형식을 사용하여 최적화 작업을 수행 할 수 있습니다. 데이터베이스에 쿼드 트리 형식을 저장하는 방법을 알지 못합니다.

1

많은 양의 데이터를 저장하기 위해 비 관계형 데이터베이스를 사용하고 있습니다. 64 비트 하드웨어에서 작업 할 수 있다면 MongoDBPython driver이 정말 좋습니다. 이것이 Stackless에서 괜찮은지 나는 알 수 없지만 가능성은 있습니다.