2010-12-28 2 views
1

DB 디자인에 익숙하지 않습니다. 나는 보드 게임 (최대 4 명)을 쓰려고 애쓰며 서로 간의 움직임을 전달하는 방법을 생각해 내고자 노력했다. stackoverflow에 대한 제안에 따라 DB를 사용하고 있습니다.DB 디자인 질문 - 멀티 플레이어 게임

내 문제는 이것입니다. - 플레이어 A가 이동을하게되면 이동은 B, C 및 D에 의해 읽혀 져야합니다. 따라서 A가 이동을 한 사실은 B, C 및 D와 통신해야합니다. 그것은 다음과 같은 방법입니다. 더 좋은 방법이 있는지 말해주세요. 나에게 그것은 모든 잘못과 믿을 수 없을 정도로 벗겨지는 것처럼 보인다. A는 내가 다른 것들 사이 쓰기 이동을 할 때

게임 ID, userMove, flagA, flagB, flagC,

그래서 flagD - -

나는 다음과 같은 필드가있는 테이블이 (flagA = 0, flagB = 1, 플래그 C = 1, 플래그 D = 1)

B, C 또는 D가 A의 이동을 읽을 때 해당 플래그를 감소시킵니다. 모든 플래그는 다른 사람들이 이동을 할 때 0

같은 일이 발생하지 않는 한

A는 테이블을 업데이트하지 않습니다.

댓글? 이를 위해 더 좋은 방법이 있어야합니다. 내가 잘못 여기에보고하고있는 것들 -

  • 나는 선택에 반복하고 모든 플래그는 해당 사용자에 대한 플래그가 움직임을 읽기 전용으로 설정 될 때까지 나는 선택에 루핑 오전
  • 0 때까지.

걱정할 필요가있는 많은 서버로드 및 클라이언트 시간 초과입니다.

나는 내 문제를 분명히 설명 할 수 있었으면 좋겠다. 필요한 경우 질문하십시오.

도움을 주시면 감사하겠습니다.

EDIT : 게임은 웹 기반 (브라우저에서 실행)이며 서버 측 개발을 위해 PHP를 사용하고 있으므로 가능한 경우 그렇게하는 것을 좋아했지만 메모리 내장 캐시를 사용할 수 없습니다.

감사합니다, - 메모리에 모든 상태를 유지할 수 있습니다처럼 파브

+0

루핑 의미 폴링 또는 루핑 반복 iterating? – Xailor

+0

왜 데이터베이스를 사용하게 될지 전혀 모르겠다. 선수들 사이에 움직임을 알려주고 싶습니까? 다니엘이 지적했듯이, DB가 그 목적을위한 최선의 선택이 아니라면, 로컬 메모리를 사용하는 것이 훨씬 낫습니다. – yurib

답변

1

게임의 플레이어가 하나의 게임 세션 동안 하나 개의 게임 서버와 상호 작용 할 경우, 그것은 보인다.

데이터베이스는 원 자성, 일관성 및 무결성을 보장하면서 영구 데이터 저장에 적합합니다. 그러나 설명하는 일시적인 상태에 대해 이러한 기능을 필요로하지는 않습니다.

+1

정확히 이런 종류의 데이터를 DB로 사용하고 싶지 않은 이유는 무엇입니까? 하지만 내 게임은 웹 기반 (브라우저에서 실행)이며 구현을 위해 PHP를 사용하고 있습니다. 나는 이것을 위해 메모리 내 캐시를 유지할 방법이 없다. 그래도 이상적입니다. PHP 개발에 익숙합니까? – user220201

+0

@ user220201 : 분명히 PHP에 다른 요청 사이의 메모리에서 데이터를 공유하는 방법이 있습니다. 이 질문은 http://stackoverflow.com/questions/4089361/how-can-i-store-data-in-ram-memory-using-php에서 확인하실 수 있습니다. 이 주제에 대한 추가 정보가 필요하면 언제든지 새로운 질문을 게시하십시오. PHP 전문가가 기꺼이 도와 줄 것입니다. –

+0

Daniel, DB를 사용하는 또 다른 이점은 게임의 모든 플레이어를 동일한 서버 인스턴스로 이동시키는 것에 대해 걱정할 필요없이 확장 할 수 있다는 것입니다. – user220201

0

flagA, B, C 및 D가 모두 비트 인 경우 모두 한 열에 넣고 해당 열을 비트 마스크로 처리하는 것이 좋습니다.

이렇게하면 한 열이 모든 플래그를 제어 할 수 있습니다. 선택과 업데이트를 훨씬 깔끔하게 정리할 수 있습니다.

여기에 비트 마스크를 사용하여 최대 읽기 :

+0

사실입니다. 다른 플레이어의 수를 늘릴 수는 있지만 그렇게하면 해당 열에 대한 색인 된 조회를 수행 할 수 없게됩니다. – TehShrike

+0

깃발을 만드는 것이 좋습니다. 문제는 내가 정말로 제거하고 싶은 루핑 부분을 많이 개선하지 않는다는 것입니다. – user220201

+0

실제로 비트 연산자를 사용하면 루핑을 피할 수 있어야합니다. 당신이 할 수 없을 것이라고 생각하는 예를 들어 줄 수 있습니까? –

0

당신이 정보를 저장하는 파일을 usng 생각 해 봤나?

관련 문제