분류

카우치베이스에서 소셜 게임 엔티티와 작업하기

새로운 소셜 게임에는 무엇이 있나요? 기본적으로 게임은 플레이어, 콘텐츠, 다른 플레이어 간의 일련의 상호작용을 중심으로 구축된 '경험'입니다. 물론 게임의 콘셉트, 스토리라인, 캐릭터, 소셜 요소는 모두 게임 경험에 큰 영향을 미칩니다. 하지만 게임 매력의 핵심은 게임 세계의 오브젝트, 이러한 오브젝트와 관련된 메커니즘, 플레이어에게 제공되는 보상입니다. 이 모든 가상 활동을 지원하려면 고성능의 확장 가능한 데이터베이스가 필요합니다.

이 블로그에서는 카우치베이스를 사용하여 기본 게임 요소를 강화하는 방법을 공유합니다. 개체, 작업 그리고 보상

게임 오브젝트

온라인 소셜 게임을 제작할 때는 일반적으로 게임 세계의 일부인 요소를 표현합니다. 이러한 요소는 게임 개체 게임 캐릭터, 허영심 아이템, 기능성 아이템, 버프 등이 될 수 있습니다. 이러한 오브젝트는 게임 내 이벤트의 영향을 받습니다. 몇 가지 예는 다음과 같습니다.

 

게임 오브젝트 유형 문서 가치
플레이어
{
"type": "player",
"uuid": "35767d02-???a958",
"name": "DonPinto4540",
"score":663,
"level":4,
"loggedIn": false
}
항목
{
"type":"item",
"name":“Axe_e5890c94-­???11”,
"uuid":“e5890c94-­???11c6-­???”,
"ownerId":"Dale9887"
}
몬스터
{
"type":"monster",
"name":"Goliath9932",
"uuid":“d10dfc1b-­???0412-­???41”,
"히트포인트":370,
"experienceWhenKilled":52,
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 

 

카우치베이스에서 JSON 문서는 게임 오브젝트를 모델링하는 데 사용되며 문서 ID를 사용하여 식별됩니다. 이러한 문서의 경우 유형 필드는 저장되는 객체의 유형을 정의하는 데 사용됩니다.

게임 액션

게임 플레이의 일부로 플레이어는 다음을 수행합니다. 작업 를 사용하여 게임 오브젝트를 업데이트하거나 변경할 수 있습니다. 예를 들어, 플레이어는 맵의 다른 지역으로 이동하여 작업을 수행하고 보상을 받을 수 있으며, 현재 게임 내에 있는 다른 플레이어의 좌표를 검색할 수 있습니다. 이러한 각 플레이어 작업은 데이터베이스에서 문서를 보고, 추가하고, 제거하거나 업데이트하는 것으로 해석됩니다.  
 
실제로 소셜 게임에서는 여러 명의 플레이어가 동시에 플레이하며, 각 플레이어의 행동이 같은 오브젝트에 영향을 미칠 수 있습니다. 예를 들어, 게임에서 수행하는 행동에는 '에너지'가 필요할 수 있으며, 플레이어가 '에너지'를 소진하면 재충전해야 합니다. 속도 향상이나 에너지 팩과 같은 아이템은 소셜 게임에서 플레이어에게 '에너지'를 빠르게 충전해 주는 매우 일반적인 아이템입니다. 하지만 게임 내 한정된 '에너지' 팩을 차지하기 위해 경쟁하는 재미가 있습니다. 충돌을 방지하고 일관된 게임 상태를 유지하려면 공유 게임 오브젝트에 대한 액세스를 동기화해야 합니다. 카우치베이스 서버는 두 가지 기능을 모두 제공합니다. 낙관적 그리고 비관적 동시성 제어.
 
이러한 동시성 메커니즘을 사용하는 방법은 다음과 같습니다. 두 명의 플레이어가 동시에 같은 나무집을 붙이고 싶다고 가정해 봅시다. 게임 프로그래머는 CAS 메서드와 재시도 로직을 사용하여 글로벌 공유 게임 오브젝트의 원자 업데이트를 보장하여 일관된 게임 상태를 유지할 수 있습니다.
 

게임 보상

대부분의 게임은 액션의 주기로 구성된 구조를 가지고 있으며 보상. 점수 시스템은 게임에서 플레이어가 게임을 얼마나 잘 마스터했는지 측정하고 게임의 중독성을 높이기 위해 사용됩니다. 리더보드는 일반적으로 최고 점수를 받은 플레이어를 기록하는 데 사용됩니다.

카우치베이스 서버 2.0에서 게임 순위표는 다음을 사용하여 만들 수 있습니다. 조회수. A 보기 는 인덱스를 생성하는 맵/리듀스 함수를 사용하여 작성됩니다. 게임 개체 섹션에 표시된 JSON 게임 개체의 경우 아래 그림과 같이 맵 함수를 사용하여 플레이어 점수 목록을 생성할 수 있습니다. 문서의 jsonType 필드의 타입이 플레이어, 플레이어의 점수와 아이디를 출력합니다.

함수 (doc) {

 만약 (doc.jsonType == "player"){

   emit(["점수",  doc.점수], doc._id);

 }

}

위의 지도 기능을 사용하여 일종의 리더보드를 만들 수 있습니다. 쿼리 방법에 따라 다릅니다. 보기는 REST API를 사용하거나 PHP와 같은 다른 SDK를 사용하여 쿼리할 수 있습니다.

  1. To REST를 사용하여 뷰 쿼리 다음 curl 명령을 사용할 수 있습니다.

curl -X GET -H '콘텐츠 유형: 애플리케이션/json'

'https://버킷명:비밀번호@localhost:8092/버킷명/_design/디자인 문서 이름/_view/

보기 이름?descending=true&connect_timeout=60000&limit=10&skip=0'

  1. PHP를 사용하여 뷰를 쿼리하려면 아래와 같이 코드 조각을 사용하여 상위 10명의 플레이어 점수를 인쇄할 수 있습니다.  

/* 카우치베이스 연결 개체 설정 */

$lbview = $cb->getView(버킷명, 보기 이름);

$apage = $lbview->getResult(배열("내림차순" => true));

$rowCtr = 0;

foreach($apage-> AS $row) {

 만약($rowCtr <= 9)

 {

  printf("점수 %s 사용자 %s.n, $row->[1], $row->);

   $rowCtr = $rowCtr + 1;

  }

   else

      break;

}

최종 생각

맵리듀스 뷰 출력을 유용한 형식으로 변환하기 위해 여기에 약간의 애플리케이션 코드가 필요하지만 일반적으로 Couchbase를 사용하여 리더보드를 만드는 것은 매우 쉽습니다. 이 글이 Couchbase Server 2.0의 새로운 기능(보기)을 활용하는 데 도움이 되었기를 바랍니다. 뷰에 대한 자세한 내용은 다음 문서를 참조하세요: https://www.couchbase.com/docs/couchbase-manual-2.0/couchbase-views.html
게임 시작!
이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 돈 핀토, 수석 제품 관리자, Couchbase

돈 핀토는 Couchbase의 수석 제품 관리자로 현재 Couchbase Server의 기능을 발전시키는 데 주력하고 있습니다. 데이터 기술에 대한 열정이 대단한 그는 과거에 기술 블로그와 백서 등 Couchbase Server에 관한 여러 기사를 저술한 바 있습니다. Couchbase에 입사하기 전에는 IBM에서 수년간 근무하며 DB2 정보 관리 그룹에서 소프트웨어 개발자의 역할을 수행했고, 가장 최근에는 Microsoft의 SQL Server 팀에서 프로그램 관리자로 근무했습니다. Don은 캐나다 토론토 대학교에서 컴퓨터 공학 석사 학위와 컴퓨터 공학 학사 학위를 받았습니다.

댓글 하나

  1. 각 사용자의 Facebook 친구로부터 리더보드를 생성할 수 있을 만큼 조회수가 빠를까요?

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.