턴제 게임 엔진을 구현하는 방법?


17

Heroes of Might and Magic, Master of Orion 또는 선택한 턴 기반 게임과 같은 게임을 상상해 봅시다. 다음 차례에 게임 논리는 무엇입니까? 주제에 관해 읽을 자료 나 책이 있습니까? 구체적으로 게임 루프를 상상해 봅시다.

void eventsHandler(); //something that responds to input
void gameLogic(); //something that decides whats going to be output on the screen
void render(); //this function outputs stuff on screen

모든 사람들은 1 초에 60 번씩 불려지고 있습니다. 그러나 어떻게 턴제를 시작합니까? gameLogic ()에는 플레이어가 해당 버튼을 클릭 할 때 발생하는 endTurn ()과 같은 기능이 있다고 생각할 수 있지만 어떻게 처리합니까? 통찰력이 필요합니다.

답변:


21

턴 기반 게임은 상태 머신 에 의해 통제 될 것 입니다 . 기본적으로 논리적 순서로 발생할 수있는 일련의 상태를 배치합니다.

높은 수준에서, 플레이어의 차례는 새로운 상태의 시작일 수 있으며, 그 차례에 허용되는 모든 행동이 뒤 따릅니다.

예를 들어

  • 상태-선수 변경
    • 이제 플레이어 1의 차례입니다
  • 허용되는 동작
    • 공격
      • 공격 할 적을 선택하십시오
    • 지키다
      • 방어 할 부대를 선택하십시오
    • 유닛 이동
      • 이동할 단위를 선택하십시오
      • 움직임이 허용되는지 확인
    • 기타

매우 제한적인 계획 만 스케치 했으므로 분명히 빠르게 확장됩니다. 가능한 상태를 조기에 잘 이해하면 구현하기에 좋은 위치에 있어야합니다. 게임이 어떻게 진행되기를 원하는지 정확히 스케치하는 것이 매우 중요합니다. 좋은 턴제 게임에는 많은 계획 IMO가 필요합니다.


Final Fantasy Tactics에서 3 개월간 개발을 시도한 상당히 오래된 학교 프로젝트 :) 위에서 설명한대로 상태 머신 (실제로는 일부 em)을 사용합니다. sourceforge.net/projects/bpfat
James

턴 기반 전략을위한 Game Engine은 어떻습니까? 당신은 무엇을 조언 할 수 있습니까? 언리얼 엔진이 적합 할 수 있습니까?
Rantiev

각자 자신에게. 언리얼 엔진에 익숙하다면 아무 문제가 없습니다. 어떤 메커니즘을 활용하고 싶은지에 달려 있습니다. 빠른 검색은 턴 기반 전략 게임을 만드는 데 도움이 되는 툴킷 전류가 Unreal 엔진에 존재하지만 무료는 아님을 나타냅니다.
the_e

3

나는 최근 Master of Orion과 비슷한 턴 기반 전략 게임을 만들었습니다 (지금은 싱글 플레이어뿐입니다. 멀티 플레이어는 조금 더 복잡하지만 비슷한 생각입니다). 내 endTurn 함수 로직은 다음과 같습니다. 메인 게임 컨트롤러 클래스) :

//for all computer players:
computerTakeTurn(player)

//for all players
moveShips(player)

//for all players
endTurn(player)//see this function below

//for all planets
planet.repairFleet()

//for all players
resolvePlanetaryConflicts(player)

//check to see if any players were destroyed or if the game is over
checkPlayerDestroyedAndGameOver()

내 플레이어 종료 회전 기능은 플레이어 간의 순서에 영향을받지 않는 해당 플레이어에 특정한 기능을 수행합니다.

eatAndStarve()

generatePlayerResources()

buildPlayerPlanetImprovements()

growPlayerPlanetPopulation()

적절한 경우, 이러한 기능은 상태 메시지 및 / 또는 트리거 이벤트를 반환하여 GUI가 턴 중에 발생한 일을 표시하거나 플레이어에게 컴퓨터가 파손 된 것 등을 알릴 수 있도록합니다.


체크 아웃하기 위해 소스 코드를 제공해 주시겠습니까? 큰 도움이 될 것입니다. 교육 목적으로 만 사용하십시오.
Dvole

@Dvole 저는 현재 HTML5 canvas 태그를 사용하여 Silverlight / C #에서 JavaScript로 코드를 변환하려고 노력하고 있습니다. 완료되면 코드를 공개 소싱 할 계획이며 그 시점 에서이 기능을 어떻게 구현했는지 정확하게 알 수 있습니다. 문맥을 이해하는 데 도움이된다면 여기에서 나의 우주 전략 게임을 할 수 있습니다. Astriarch-Starr of the Stars
Matt Palmerlee

2
@Dvole 시간이 많이 걸렸지 만 Silverlight 버전의 Astriarch를 공개했습니다. 여전히 관심이 있으시면
Matt Palmerlee
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.