최종 웹 기반 게임 엔진이 웹 서비스로 시작해야합니까?


10

최근에 카드 게임 엔진을 만들기 시작했습니다. 저는 큰 "카드"플레이어는 아니지만 친구가 게임에 대해 소개했습니다 (덴마크 게임의 스핀입니다).

3 가지 세그먼트로 게임을 개발하고 싶습니다 :

  1. 기본 엔진, 카드 / 덱 / 게임 상태 등을 처리합니다.
  2. 사용자 인터페이스 (모바일 / 데스크톱 웹 앱 형태)
  3. 다양한 전략 / 어려움 등을 가진 인공 지능

이것들은 내 생각에 매우 뚜렷한 프로젝트입니다 ... 그리고 나는 그들이 장기적으로 어떻게 그것들이 잘 어울리는 지 보는 데 어려움을 겪고 있습니다. 처음에는 엔진을 사용하여 게임을 "플레이"하고 싶지도 않습니다. 엔진은 주로 단위 테스트로 테스트됩니다. 클라이언트가 존재할 때까지 재생 테스트가 시작되지 않습니다. 여기에 클라이언트-서버 관계가 있습니다.

엔진은 퍼즐의 매우 큰 조각입니다. 내가 알고 싶은 것은 :이 엔진을위한 "공용 API"를 어떻게 개발하겠습니까?

나는 엔진이 쿼리를 통해 RESTful API로 상태를 반환하는 매우 기본적인 웹 서비스 일 수 있다고 생각했지만 엔진 자체를 웹 응용 프로그램으로 개발하면 프로그래밍 결정이 좋지 않을까 걱정됩니다. (예를 들어, MVC 마이크로 프레임 워크를 선택했다면이 API는 실제로 뷰를 가지지 않을 것입니다 .JSON을 통해 직렬화 된 객체를 반환하거나 그 영향을받는 것입니다. 이? )

내 다른 아이디어는 엔진이 콘솔 응용 프로그램 일뿐이며 나중에 엔진과 웹 응용 프로그램 사이에 데이터를 파이프하는 일종의 브리지를 작성하는 것이 었습니다. 브리지는 실제로 무엇이든 될 수 있습니다. 즉, 웹 서버와 게임 엔진은 IRC 서버에서 유휴 상태를 유지하고 채널에서 상태를 공유 할 수 있습니다.

어떤 접근 방식 (웹 서비스로 개발하거나 독립형 앱으로 개발 한 후 나중에 연결)을 사용해야합니까?

고마워, 로비

편집 : 그래서 이것이 게임 개발에 속하는 것 같아요. 명확히하기 위해 카드 게임 엔진을 작성하겠습니다. 웹 클라이언트 및 AI 클라이언트와 미래에 통합 될 수 있도록 엔진의 API를 노출하는 가장 좋은 방법을 찾으려고 노력하고 있습니다 .

나는 여기에도 계정이 없었으므로 howdy :)


엔진이 처리해야하는 동시 게임 수는 몇 개입니까?
Darien

이 시점에서 그것은 정의되지 않았지만 ... 완벽한 세상에서 : 많은 것들. 동시 게임이 계속 진행될 것입니다. 프로젝트가 시작되면 아이디어는 혼자서 (솔리테어 스타일) 플레이하거나 룸에 참여하고 인간 / AI (포고와 유사한)와 게임을 할 수있는 멀티 플레이어 앱이 될 것입니다

답변:


5

웹 서비스 경로는 아마도 가장 확장 성이 뛰어날 것입니다.

또한 MVC 프레임 워크를 사용하여 JSON을 반환하는 데 아무런 문제가 없습니다 (asp.net mvc가 훌륭합니다). 컨트롤러가 처음에 JSON 만 반환하면 괜찮습니다.보기없이 단위 테스트를 수행 할 수 있습니다. 게임 인터페이스를 추가 할 준비가되면 뷰를 추가 할 수 있습니다. 평범한 html / css 또는 플래시 / 실버 라이트라면 이미 언급했듯이 이미 기본 엔진을 구축했기 때문에 문제가되지 않습니다.

개발 환경이나 호스팅 환경이 어떤지 잘 모르겠지만 과도하게 엔지니어링하지는 않습니다. JSON을 반환하는 간단한 PHP 파일 세트 만 있으면됩니다. 나는 당신이 만들고있는 게임에 익숙하지 않기 때문에 그것이 얼마나 복잡한 지 잘 모르겠습니다.

내 생각에, 게임 개발에 익숙하지 않고 직접 개발하려는 경우 가능한 빨리 게임을 완료하는 것이 좋습니다. 게임을 완료하고 연마하도록 동기를 부여하는 데 도움이되기 때문입니다. 좋은 수준으로.


나는 게임 개발에 익숙하지 않으며 유일한 개발자가 될 것이지만 걱정하지 마십시오. 코드는 게임보다 더 흥미를 유지할 것입니다.) 루비 어로 작성된 경량 MVC 프레임 워크 인 Padrino를 사용할 생각이었습니다. 좋은 점은 마운트 가능한 앱이 있다는 것입니다. 나는 그들에게 익숙하지는 않지만 같은 프로세스에서 엔진과 UI 앱을 나란히 "마운트"할 수 있다고 생각하지만 여전히 그들 자신의 데이터베이스와 정적 리소스를 가진 앱을 분리하고있다 .
로비

그것은 나에게 좋은 계획처럼 들린다. 코드가 계속 관심을 가지게된다면 갈 것입니다.
Nate

1

뷰는 occour가 변경 될 때 통지 할 모델에 등록하는 엔티티입니다.

모델이 웹 서버에있는 경우 HTTP가 서버가 통신을 시작하도록하는 명시적인 방법을 구현하지 않기 때문에 문제가 있습니다. 당신은 이것을 처리하기 위해 websocket을 사용할 수 있지만 당신의 "RESTfulness"를 희생시킬 것입니다 ... 좋은 해결책은 귀하의 웹 URL이 모델을 식별하고 HTTP 서버 푸시를 사용하여 귀하의 의견을 알릴 수있게하는 것이라고 생각합니다 필요할 때.

당신이 실행중인 게임을 가지고 있다고하자

/games/cd073ac6-c37e-431f-9a5e-7b61bfacf9be/

당신은 URL을 사용할 수 있습니다

/games/cd073ac6-c37e-431f-9a5e-7b61bfacf9be/playCard?id=3&place=stack 

모델을 수정하고

/games/cd073ac6-c37e-431f-9a5e-7b61bfacf9be/notify 

알림을 기다립니다.

Notify는 일정 시간 동안 모델에 의해 뉴스를 받기 위해 기다립니다. 어떤 일이 발생하면 메시지가 전송됩니다 (데이터가 변경되거나 어떤 종류의 이벤트가 발생했는지 등).

클라이언트는 / games / cd073ac6-c37e-431f-9a5e-7b61bfacf9be / notify에 긴 아약스 요청을 수행하고보기를 업데이트하고 다음 알림 요청을 다시 게시 할 알림 콜백을 등록 할 수 있습니다.

게임 / cd073ac6-c37e-431f-9a5e-7b61bfacf9가 클라이언트에서 시간 초과를 알리거나 알리면 새 요청이 수행되고 서버에서 시간 초과되면 할당 된 리소스가 해제됩니다.

서버에 일반적인 알림 시스템을 구축하고 클라이언트에 알림 라이브러리를 구축하여 투명한 알림 계층에 일관된 MVC를 구축 할 수 있습니다.

기술을 찾고 있다면 Couchdb 서버에 게임 엔진을 구축하는 것을 고려할 수 있습니다. Couchdb는 HTTP를 프로토콜로, JSON을 문서 형식으로 사용하는 비 관계형 REST DBMS입니다. 또한 첨부 파일로 PUT 및 GET 바이너리 또는 HTML 파일을 첨부 할 수 있으므로 DBMS (couchapp) 만 사용하여 전체 웹 애플리케이션을 작성할 수 있습니다.

무엇보다도 데이터베이스 업데이트에 반응 할 수있는 자바 스크립트 라이브러리가 있습니다. couchdbApp은 단순한 데이터베이스이므로 동기화를 통해 응용 프로그램을 다른 서버에 복사 할 수 있습니다. 클라이언트는 앱을 로컬 서버에 복사 한 다음 오프라인 LAN을 통해 재생할 수 있습니다.


2
카드 배치는 GET의 URL이 아닌 POST (또는 dem 등원이지만 PUT이 아닌 경우 잘 지원되지 않는 경우) 여야합니다.

@Joe Wreschnig 당신이 옳습니다. 그 URL은 단지 설명을위한 것이며 어떤 방법을 사용해야하는지 언급하지 않았습니다.
FxIII
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.