모험 게임에서 불가능한 상태 피하기


15

저는 상당히 복잡한 선택형 어드벤처 스타일의 게임을 만들려고하지만 게임 디자인에 도움이되는 기술이나 방법을 찾고 있습니다.

그것은 여러 가지 이야기가 될 것이며 때로는 가지가 다시 접 히고 주요 행동이 기억되고 항목이 수집됩니다. 예를 들어, 플레이어가 성으로 가기 전에 늪과 숲으로 가면 공룡 뼈를 들고 유니콘을 죽이고 여분의 팔을 키 웠습니다. 플레이어가 동굴과 토굴을 통해성에 도착하면 자전거와 이상한 냄새가납니다. 이제 성을위한 퍼즐을 개발할 때 두 가지 불가능 성이 필요한 상황을 만들고 싶지 않습니다. 예를 들어 여분의 팔과 냄새가 귀신을 죽이는 데 필요합니다.

이벤트와 항목을 매우 신중하게 문서화하는 것 외에 스프레드 시트 나 소프트웨어에 사용할 수있는 기술, 프로세스가 있습니까?

답변:


11

직접 그래프 문제처럼 들립니다.

스토리의 각 분기에 대해 처음부터 시작하여 현재 가지고있는 항목을 기록한 다음 그래프를 분기하십시오. 거기에서 각 지점을 따라 가고 다른 지점에 도착하면 현재 항목을 기록하고 그래프를 분기하십시오. 이것은 많은 중복 노드가있는 꽤 조밀 한 그래프로 끝날 것입니다 (그러나 각 노드는 다른 그래프 시퀀스에서 얻었습니다)하지만 루프가 없어야합니다.

마지막으로 스토리의 특정 지점에서 가능한 모든 항목과 가능한 모든 방법으로 그래프를 가져와야합니다.

이제 완성 된 그래프 : X + Y + Z 항목이 필요한 각 문제에 대해 해당 문제가있는 모든 노드를 찾고 기록 된 항목이 해당 조건을 만족시킬 수 있는지 확인하십시오. 실패가 발생하면 그래프를 위로 올라가 문제를 해결하기위한 적절한 항목없이 결정을 내립니다.

운 좋게도 독창적 인 디자인은 적어도 개념적으로 이미 배치되어 있으므로 코드가 현실을 반영하고 쉽게 확인할 수 있어야합니다.

큰 게임을 빌드하는 경우 그래프 검색의 처리 시간이 약간 길어질 수 있으므로 실행하는 데 시간이 걸리고 결과를 보고서로 출력 할 수있는 유틸리티와 같이 빌드하십시오.


그것은 도구를 개발하는 것을 의미합니다. 마지막 수단으로 쓰겠습니다.
Ali1S232

6
이 도구는 자신의 두뇌, 기록 보관 및 메모리 용량 중 하나이거나 피곤하지 않고 결함을 놓치지 않는 자동화 된 도구가 될 것입니다. =) 게임의 규모와 진행 여부에 따라 다릅니다 같은 엔진에서 다른 엔진을 만들어서 시간을 투자 할 가치가 있는지 여부를 결정하십시오.
Patrick Hughes

이를 수행하는 가장 좋은 방법은 위에서 아래로 (뒤로) 종속성 트리를 작성하는 것이며 트리의 두 항목이 동일한 종속성을 공유하는 경우 (종속성이 선택되어 있어야 함) 위반이 있습니다.
decelratedcaviar

0

이것은 이상한 대답처럼 보이지만 컴파일러를 사용하여 불가능한 이벤트를 쉽게 확인할 수 있습니다 (예 : c ++)! 모든 단계에 대해 정확히 하나의 헤더 파일이 있습니다. 게임은 main.cpp파일로 끝납니다 . 에서 stage a로 갈 수있을 때마다 stage b파일과 관련된 파일 만 포함하면됩니다.stage a 됩니다 stage b. 스테이지에서 새 항목을 얻을 때마다 해당 항목의 값을 정의하기 만하면됩니다. 아이템을 잃어 버리거나 사용할 때마다 아이템을 정의 해제하면됩니다. 각 단계의 마지막에는 해당 단계에서 필요한 항목에 대해 정의 된 모든 값을 사용해야합니다. 다음은 코드에서 이것을 사용하는 방법에 대한 샘플입니다.

#define itemA

bh

#include <a.h>
#undef itemA
#define itemB

ch

#include <a.h>

itemA;

#include <b.h>

itemB;

main.cpp

#include <c.h>
int main()
{
}

실제로 사용하기 전에 약간의 변경이 필요할 수 있지만 이와 같은 코드를 만들 수 있다고 생각합니다. 또한 내가 제안한 접근법 대신 상속을 사용하고 각 단계마다 클래스를 사용할 수 있습니다. 이것들 이외의 도구를 직접 개발해야한다고 생각합니다.


2
컴파일러의 실제 오용입니다!
Ali1S232

3
그것은 흥미롭지 만 그것은 매우 부서지기 쉬우 며 내 이야기에서 객체 / 이벤트 / 섹션 당 수업이있는 경우에만 작동합니다. xml 또는 다른 것에서 읽는 더 많은 데이터 기반 접근 방식을 사용하려고했습니다. 그래도 당신의 제안에 감사드립니다.
DanDan

3
퀘스트가 변경 될 때마다 재 컴파일을 강제하는 것은 좋은 생각이 아닙니다. 또한 최종 사용자 (예 : DLC)에 대한 데이터 업데이트를 허용하지 않거나 서버에서 실행되고 다운로드를 강제하지 않고 수정 프로그램을 적용 할 수 없습니다.
패트릭 휴즈

2
이 코드 샘플은 릴리스 할 코드와 관련된 것이 아니며 해당 코드는 실제로 수행하지 않습니다. 스토리 라인과 퀘스트가 유효한지 확인하는 것입니다. (만약 당신이 컴파일 에러가 아니라면, 게임에서 그 퀘스트 트리를 구현할 수 있습니다!
Ali1S232

오, 나는 잘못 해석했다. 나는이 코드가 퀘스트 로직 오류를 디버깅하는 것보다 실제 데이터를 반영하도록 더 많은 시간을 할애 할 수 있다고 생각합니다.
Patrick Hughes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.