얼마나 정확하고 싶습니까? 훌륭하지만 복잡한 선택은 모든 역사를 시뮬레이션하는 것입니다.
- 이 지역들 사이에 임의의 지역 목록과 인접성을 생성하십시오.
- 인구, 호전, 기술 등의 특성으로 무작위 문명을 생성하고 지역을 채우십시오.
- 문명 특성에 따라 결과를 결정하면서 원하는만큼의 역사를 시뮬레이션하십시오.
예 : 인접한 두 호전적인 문명은 서로 전쟁을 시작할 확률이 높으므로 시간이 지남에 따라 인구가 줄어 듭니다. 상인 문명은 자원이 많지만 침략의 큰 목표입니다. 인구가 많은 사람은 더 빨리 자라지 만 기아 가능성이 더 큽니다. 문화적으로 이질적인 문명은 내부 전쟁의 가능성이 낮습니다 (이로 인해 이탈이 발생할 수 있습니다.) 등등 .. 결과도 문명 특성을 수정할 것입니다. 높은 기술은 더 나은 거래, 더 강한 무기 등으로 이어집니다.
이를 통해 절차 적 스토리 텔링도 가능합니다. 영토 다이어그램뿐만 아니라 시간의 역사에 대한 텍스트 설명도 출력 할 수 있습니다. 이 시스템을 원하는만큼 복잡하게 만들 수 있습니다.
편집 : 여기의 도전은 기술적 인 것이 아니라 사실적이고 흥미로운 역사 생성을 위해 휴리스틱을 조정합니다. 자세히 살펴보고 앞서 언급 한 3 가지 사항에 대해 생각해보십시오. 이는 기술적 인 설명과 거의 같습니다! 루프로 변환하십시오 (각 반복은 원하는 시간, 1 년, 반 년, 1 개월을 나타낼 수 있습니다 ...). 내부 (데이터 구조, 휴리스틱)를 작업하고 특정 문제와 요구에 맞게 조정해야합니다. 그것은 어려운 부분이며 상상력, 시행 착오에 관한 것이므로 아무도 당신을 도울 수 없습니다.
목록, 대기열, 나무 등 거의 모든 문제에 사용할 것 외에이 문제에 대한 일반적인 데이터 구조는 없습니다. 목록, 대기열, 나무 등이 특정 구현에 묶여 있습니다 (계보 트리가 필요합니까? 문명 목록). 전쟁에서, 각 문명에 대한 작업 대기열?) 물론 문명 목록도 필요합니다. 선택은 명백하고 거의 상식입니다.
시뮬레이션은 우연 / 확률의 문제이며 난수를 사용하여 수천 가지 방법으로 만들 수 있습니다. 축구 매니저, RPG (히트 포인트 / 통계는 단지 전투 시뮬레이션 ), 전략 게임 과 같은 시뮬레이션이 관련된 다른 게임을 생각해보십시오. 그냥 특성 일뿐 입니다. (문명 특성과 데이터를 저장하는 방법이 필요합니다) 통계적 으로 결과에 따라 임의의 결과가 생성 되므로 이러한 특성에 따라 시뮬레이션 상태를 임의로 변경해야합니다.
이것이 알고리즘의 핵심입니다. 휴리스틱을 조정하기 어렵다 : 각 문명에 대해 시뮬레이션 시작시 특성을 분배하는 방법과이를 기반으로 시뮬레이션 상태를 통계적으로 변경하는 방법.
간단히 말해 , 알고리즘은 시뮬레이션 된 시간을 원하는 증분으로 범위를 지정하는 루프 일뿐입니다. 증분이 짧을수록 과거 시뮬레이션이 더 미세 해지지 만 분명히 더 오래 걸립니다. 루프 안에는 (대략) 다음과 같은 많은 휴리스틱이 있습니다.
for each civilization
if civ.isAtWar
civ.population -= civ.population * 0.05;
civ.wealth -= 1000.0;
civ.belligerence += 1.0;
if civ.population < 100
civ.negotiatePeace()
이 모든 작업을 마친 후에 (또는 데이터를 저장하지 않으려는 경우) 모든 시뮬레이션 상태를 텍스트, 이미지 또는 원하는대로 사람이 읽을 수있는 형식으로 해석해야합니다. 이것은 시행 착오이며 구현에 매우 구체적입니다.
귀하의 질문에 고유 : 귀하의 질문에 있는 것과 같은 다이어그램을 생성하려면 세계 지역 (다이어그램의 상단, x 축, 1 점 : 내 답변에 지역 목록 생성 )과 문명 ( 다이어그램, 포인트 2 )부터 시간까지 (y 축, 포인트 3 의 시뮬레이션 루프 )
상태 머신광범위한 주제를 시뮬레이션하는 데 능숙합니다 (위의 코드 샘플은 하드 코딩 된 상태 머신의 근사치입니다). 따라서 전체적으로 조정하기 쉬운 간단한 상태 머신 프레임 워크를 구현하여 시작할 수 있습니다. 각 문명은 이러한 상태 머신 중 하나에서 시작하여 시뮬레이션은 각 턴마다 각 상태 머신을 실행합니다. 각 국가 기계는 다른 국가 기계와 상호 작용할 수 있어야합니다. 예를 들어, 전쟁을 시작하면 다른 문명의 국가 기계에 영향을 줄 수 있습니다. 예를 들어 내부 상태에 따라 다른 결과를 낼 수 있습니다. 평화 협상을 원하지만 '문제를 찾는'문명은 보복 할 것입니다. 기계의 각 상태는 문명에 의미있는 영향을 미칩니다. 각 '프레임'(부, 호전, 인구 등) 동안 위에 요약 된 지표. 가장 중요한 것은 기회 및 / 또는 임의의 기회가 발생할 때마다 모든 프레임에서 상태를 전환 할 필요가 없다는 것입니다. 이렇게하면 전쟁과 같은 장기적인 이벤트가 발생할 수 있습니다.