Ne kadar doğru olmak istiyorsun? İyi ama karmaşık bir seçim tüm bu tarihi taklit eder:
- Bu bölgeler arasında rastgele bir bölge listesi ve bitişler oluşturun.
- Nüfus, savaş, teknoloji ... gibi özelliklere sahip rastgele medeniyetler oluşturun ve bölgeleri doldurun.
- Medeniyet özelliklerine dayanan sonuçları belirleyerek istediğiniz kadar tarihin simülasyonunu yapın.
Örn: iki komşu savaşçı medeniyetin birbiriyle savaş etme olasılığı daha yüksektir, bu da zamanla nüfusun azalmasına neden olur. Ticari medeniyetlerin kaynakları daha yüksektir, ancak istilalar için mükemmel bir hedeftir. Yüksek nüfuslu olanlar daha hızlı büyüyecek fakat daha fazla açlık şansına sahip olacaklar. Kültürel olarak heterojen olan sivillerin daha az iç savaş şansı vardır (bu da ayrılıklara yol açabilir.) Ve bunun gibi ... Sonuçlar medeniyet özelliklerini de değiştirir: yüksek teknoloji daha iyi ticaret, daha güçlü silahlar vb.
Bu aynı zamanda bazı ussal hikaye anlatımlarına da izin verir: yalnızca bir bölge şemasını değil, aynı zamanda geçmiş zamanın metinsel tanımlarını da çıkartabilirsiniz. Bu sistemi istediğiniz kadar karmaşık yapabilirsiniz.
EDIT: Buradaki zorluk teknik değil, gerçekçi ve ilginç tarih üretimi için sezgisel özellikleri ayarlıyor. Daha yakından bir göz atın ve bahsettiğiniz 3 konuyu düşünün ... bu teknik açıklamanızdan çok daha fazlası! Bunu bir döngüye çevirin (her yineleme istediğiniz kadar zaman, 1 yıl, yarım yıl, 1 ay ... olarak gösterebilir) ve hepsi bu kadar. İç çamaşırları (veri yapıları, sezgisel taramalar) çalışmak zorunda kalacaksınız ve bunu kendi probleminize ve ihtiyaçlarınıza göre uyarlayacaksınız. Buradaki zor kısım ve hayal gücü, deneme ve yanılma yüzünden kimse size yardım edemez.
Neredeyse herhangi bir sorun için kullanacağınız yanı sıra, bu sorun için ortak veri yapıları yoktur: listeler, sıralar, ağaçlar ... ve bunlar sizin özel uygulamanıza bağlanır (bir soy ağacına ihtiyacım var mı? Savaşta? Her vatandaş için bir görev sırası?) Tabii ki bir medeniyet listesine de ihtiyacınız var. Seçenekler açık ve neredeyse çok sağduyulu.
Simülasyon bir şans / olasılık meselesidir ve rastgele sayılarla bin farklı şekilde yapabilirsiniz. Simülasyonun futbol menajerleri, RPG'ler (sonuç olarak, hit puanlar / istatistikler sadece savaş simülasyonu ), strateji oyunları gibi rol oynadığı herhangi bir oyunu düşünün ... Bu sadece özelliklerdir (medeniyet özelliklerini ve verilerini depolamak için bir yola ihtiyacınız olacak) ve bunlara dayalı istatistiksel olarak rasgele sonuçlar (bu nedenle bu özellikleri temel alarak simülasyon durumunu rastgele değiştirmek zorunda kalacaksınız.)
Algoritmanızın özü budur: Sezgiyi ayarlamak zordur: Her medeniyet için simülasyonun başlangıcında özelliklerin nasıl dağıtılacağı ve simülasyon durumunun bunlara göre istatistiksel olarak nasıl değiştirileceği.
Kısacası: algoritmanız sadece simüle edilmiş zamanı herhangi bir artışla değişen bir döngüdür. Daha kısa artışlar daha ince tarihsel simülasyonlara neden olur, ancak açıkça daha uzun sürecektir. Döngünüzün içinde (kabaca) gibi bir grup buluşma olacak:
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()
Tüm bu çalışmalardan sonra (veya verileri saklamak istemiyorsanız), tüm simülasyon durumunu metin, görüntüler veya istediğiniz gibi insan tarafından okunabilir bir formata çevirmelisiniz. Bu, deneme yanılmadır ve uygulamanız için çok özeldir.
Sorunuza özgü : Sorunuzdaki gibi bir diyagram oluşturmak için dünya bölgelerini (diyagramın üst kısmı, x ekseni, bu nokta 1: benim cevabımda bölge listesi oluştur) ve uygarlıklarını (medeniyetindeki renkler) izlemek zorundasınız . diyagram, nokta 2 ) zamana kadar (y ekseni, 3. noktadaki simülasyon döngüsü )
Devlet makinelerigeniş konuları simüle etmede oldukça iyidir (yukarıdaki kod örneği, sabit kodlu bir durum makinesinin yaklaşık bir değeridir) - bu nedenle, genel olarak ayarlanması kolay olan basit bir durum makinesi çerçevesi uygulayarak başlayabilirsiniz. Her medeniyet, bu devlet makinelerinden biriyle başlayacak ve simülasyon, her devlet makinesini her bir tur için yürütecektir. Her bir devlet makinesinin başka bir devlet makinesiyle etkileşime girmesi gerekebilir: örneğin bir savaş başlatmak, başka bir medeniyetin devlet makinesini etkileyebilir, muhtemelen kendi iç devletlerine dayanarak farklı sonuçlar doğurabilir - örneğin 'kıtlık' durumundaysa, muhtemelen Barışı müzakere etmek istiyorum, ancak 'bela arayan' bir medeniyet muhtemelen misilleme yapacak. Makinedeki her devletin medeniyet üzerinde anlamlı etkileri olur ' Her bir “çerçeve” sırasında yukarıda belirtilen metrikler (zenginlik, savaşçılık, nüfus vb.). En önemlisi, her çerçevede durumları değiştirmenize gerek yoktur - sadece fırsat ve / veya rastgele bir şans ortaya çıktığında: bu, uzun süreli olayların (savaş gibi) ortaya çıkmasına izin verir.