나는 간단한 텍스트 기반 어드벤처 게임을 프로그래밍하여 최근에 나 자신을 즐겁게 해왔으며, 매우 단순한 디자인 문제처럼 보입니다.
간단한 개요 : 게임은 여러 Room
개체 로 나뉩니다 . 각 객실 Room
에는 Entity
해당 방 에있는 객체 목록 이 있습니다. 각각 Entity
은 간단한 문자열-> 부울 맵인 이벤트 상태와 문자열-> 함수 맵인 조치 목록을 가지고 있습니다.
사용자 입력은 형식을 취합니다 [action] [entity]
. 는 Room
적절한 반환 단체명을 사용하여 Entity
다음 올바른 기능을 찾는 작업 이름을 사용하여 오브젝트를, 그것을 실행한다.
회의실 설명을 생성하기 위해 각 Room
객체는 고유 한 설명 문자열을 표시 한 다음 every의 설명 문자열을 추가합니다 Entity
. Entity
설명은 그 상태에 따라 달라질 수있다 ( 「도어 개방」등, "도어가 잠겨 있습니다」 「도어 폐쇄」).
여기에 문제가 있습니다.이 방법을 사용하면 구현해야하는 설명 및 동작 함수의 수가 빨리 사라집니다. 내 시작 방에만 5 개의 엔티티 사이에 약 20 개의 기능이 있습니다.
모든 작업을 단일 함수로 결합하고 if-else / switch를 통해 전환 할 수 있지만 엔터티 당 여전히 두 가지 기능입니다. Entity
문과 열쇠와 같은 공통 / 일반 객체에 대한 특정 하위 클래스를 만들 수도 있지만 지금까지만 가능합니다.
편집 1 : 요청에 따라 이러한 액션 함수의 의사 코드 예제.
string outsideDungeonBushesSearch(currentRoom, thisEntity, player)
if thisEntity["is_searched"] then
return "There was nothing more in the bushes."
else
thisEntity["is_searched"] := true
currentRoom.setEntity("dungeonDoorKey")
return "You found a key in the bushes."
end if
string dungeonDoorKeyUse(currentRoom, thisEntity, player)
if getEntity("outsideDungeonDoor")["is_locked"] then
getEntity("outsideDungeonDoor")["is_locked"] := false
return "You unlocked the door."
else
return "The door is already unlocked."
end if
설명 함수는 상태를 확인하고 적절한 문자열을 반환하는 것과 거의 같은 방식으로 작동합니다.
편집 2 : 내 질문 문구를 수정했습니다. 다른 행동과 공통 행동 (특정 행동에 대한 상태 기반 반응)을 공유하지 않는 게임 내 객체가 상당수 있다고 가정합니다. 각 엔터티 별 작업에 대해 사용자 지정 함수를 작성하는 것보다 이러한 고유 한 동작을보다 명확하고 유지 관리 가능한 방식으로 정의 할 수있는 방법이 있습니까?