Làm thế nào chính xác mà bạn muốn được? Một lựa chọn tốt nhưng phức tạp sẽ mô phỏng tất cả lịch sử đó:
- Tạo một danh sách khu vực ngẫu nhiên và kề giữa các khu vực này.
- Tạo ra các nền văn minh ngẫu nhiên với các đặc điểm như dân số, hiếu chiến, công nghệ ... và dân cư trong khu vực.
- Mô phỏng bao nhiêu năm lịch sử như bạn muốn, xác định kết quả dựa trên đặc điểm văn minh.
Ví dụ: hai nền văn minh hiếu chiến liền kề có xác suất bắt đầu chiến tranh với nhau cao hơn, dẫn đến dân số thấp hơn theo thời gian. Các nền văn minh thương gia có tài nguyên cao hơn, nhưng là một mục tiêu lớn cho các cuộc xâm lược. Những người đông dân sẽ phát triển nhanh hơn nhưng cũng có nhiều cơ hội đói hơn. Những công dân không đồng nhất về mặt văn hóa có cơ hội chiến tranh nội bộ thấp hơn (có thể dẫn đến sự tan vỡ.) Và như vậy ... Kết quả cũng sẽ sửa đổi các đặc điểm văn minh: công nghệ cao hơn dẫn đến giao dịch tốt hơn, vũ khí mạnh hơn, v.v.
Điều này cũng cho phép một số cách kể chuyện theo thủ tục: bạn có thể xuất ra không chỉ sơ đồ lãnh thổ, mà cả các mô tả văn bản về lịch sử xuyên thời gian. Bạn có thể làm cho hệ thống này phức tạp như bạn muốn.
EDIT: thách thức ở đây không phải là một kỹ thuật, mà là điều chỉnh các heuristic để tạo ra lịch sử thực tế và thú vị. Hãy xem xét kỹ hơn và suy nghĩ về 3 điểm đã nói ở trên ... đó là khá nhiều giải thích kỹ thuật của bạn! Dịch nó thành một vòng lặp (mỗi lần lặp có thể biểu thị bao nhiêu thời gian bạn muốn, 1 năm, nửa năm, 1 tháng ...) và đó là điều đó. Bạn sẽ phải làm việc với các phần tử bên trong (cấu trúc dữ liệu, phương pháp phỏng đoán) và điều chỉnh nó phù hợp với vấn đề và nhu cầu cụ thể của bạn. Đó là phần khó ở đây và không ai có thể giúp bạn, vì đó là về trí tưởng tượng, thử nghiệm và lỗi.
Không có cấu trúc dữ liệu chung cho vấn đề này ngoài những cấu trúc bạn sẽ sử dụng cho hầu hết mọi vấn đề: danh sách, hàng đợi, cây ... và chúng sẽ được gắn với việc triển khai cụ thể của bạn (tôi có cần một cây phả hệ không? trong chiến tranh? một hàng nhiệm vụ cho mỗi công dân?) Tất nhiên bạn cũng cần một danh sách các nền văn minh. Các lựa chọn là hiển nhiên và khá nhiều ý nghĩa phổ biến.
Mô phỏng là một vấn đề về cơ hội / xác suất và bạn có thể biến nó thành một ngàn cách khác nhau với các số ngẫu nhiên. Hãy nghĩ về bất kỳ trò chơi nào khác có mô phỏng như người quản lý bóng đá, game nhập vai (xét cho cùng, điểm nhấn / chỉ số chỉ là mô phỏng chiến đấu ), trò chơi chiến lược ... Đó chỉ là đặc điểm (vì vậy bạn sẽ cần một cách để lưu trữ dữ liệu và đặc điểm văn minh) và kết quả ngẫu nhiên theo thống kê dựa trên chúng (vì vậy bạn sẽ phải thay đổi ngẫu nhiên trạng thái mô phỏng dựa trên các đặc điểm này.)
Đó là bản chất của thuật toán của bạn: khó điều chỉnh các heuristic: cách phân phối các đặc điểm khi bắt đầu mô phỏng cho mỗi nền văn minh và cách thay đổi thống kê trạng thái mô phỏng dựa trên chúng.
Nói tóm lại: thuật toán của bạn chỉ là một vòng lặp trong khoảng thời gian mô phỏng với bất kỳ mức tăng mong muốn nào. Gia số ngắn hơn dẫn đến mô phỏng lịch sử tốt hơn, nhưng rõ ràng sẽ mất nhiều thời gian hơn. Trong vòng lặp của bạn sẽ có một loạt các heuristic như (đại khái):
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()
Sau khi tất cả công việc này (hoặc trong khi bạn không muốn lưu trữ dữ liệu), bạn phải diễn giải tất cả trạng thái mô phỏng thành định dạng có thể đọc được như văn bản, hình ảnh hoặc bất cứ điều gì bạn muốn. Đây là bản dùng thử và lỗi quá và rất cụ thể cho việc thực hiện của bạn.
Cụ thể cho câu hỏi của bạn: để tạo một sơ đồ giống như trong câu hỏi của bạn, bạn sẽ phải theo dõi các khu vực trên thế giới (trên cùng của sơ đồ, trục x, đó là điểm 1: tạo danh sách khu vực trong câu trả lời của tôi) và nền văn minh của họ (màu sắc trong sơ đồ, điểm 2 ) qua thời gian (trục y, vòng lặp mô phỏng ở điểm 3. )
Máy nhà nướckhá giỏi trong việc mô phỏng các chủ đề rộng (mẫu mã ở trên là xấp xỉ của máy trạng thái được mã hóa cứng) - vì vậy bạn có thể bắt đầu bằng cách triển khai khung máy trạng thái đơn giản, dễ điều chỉnh. Mỗi nền văn minh sẽ bắt đầu với một trong những máy trạng thái này và mô phỏng sẽ chạy từng máy trạng thái cho mỗi lượt. Mỗi bộ máy nhà nước sẽ cần có khả năng tương tác với bộ máy nhà nước khác: ví dụ: bắt đầu một cuộc chiến tranh sẽ ảnh hưởng đến bộ máy nhà nước của một nền văn minh khác, có thể với các kết quả khác nhau dựa trên trạng thái bên trong của họ - ví dụ nếu họ ở trong tình trạng 'nạn đói' thì họ sẽ có khả năng muốn đàm phán hòa bình, nhưng một nền văn minh 'tìm kiếm rắc rối' có thể sẽ trả đũa. Mỗi trạng thái trong máy sẽ có tác dụng có ý nghĩa đối với nền văn minh ' số liệu được nêu ở trên trong mỗi 'khung' (sự giàu có, hiếu chiến, dân số, v.v.). Quan trọng nhất là bạn không cần phải chuyển trạng thái trên mọi khung - ngay khi cơ hội và / hoặc cơ hội ngẫu nhiên xuất hiện: điều này cho phép các sự kiện kéo dài (như chiến tranh) xảy ra.