Eğlenmek için oğlumun en sevdiği masa oyunlarından birini yazılım olarak yazmaya çalışıyorum. Sonunda üstüne bir WPF kullanıcı arayüzü oluşturmayı bekliyorum, ancak şu anda oyunları ve kurallarını modelleyen makineyi yapıyorum.
Bunu yaparken, birçok tahta oyununda ortak olduğunu düşündüğüm sorunları görüyorum ve belki başkaları bunları benden daha iyi çözmüş olabilir.
(Oyunu oynamak için yapay zekanın ve yüksek performansla ilgili kalıpların benim için ilginç olmadığını unutmayın.)
Şimdiye kadarki kalıplarım:
Oyun kutusundaki varlıkları temsil eden birkaç değişmez tür, örneğin zar, dama, kart, tahta, tahtadaki boşluklar, para vb.
Her oyuncu için oyuncu kaynaklarını (örneğin para, skor), isimlerini vb. İçeren bir nesne.
Oyunun durumunu temsil eden bir nesne: sıra gelen oyuncular, tahtadaki peiceslerin düzeni vb.
Dönüş sırasını yöneten bir durum makinesi. Örneğin, birçok oyunda her oyuncunun ilk kimin gittiğini görmek için yuvarlandığı küçük bir ön oyun vardır; bu başlangıç durumu. Bir oyuncunun sırası başladığında, önce yuvarlanırlar, sonra hareket ederler, sonra yerinde dans etmek zorundadırlar, sonra diğer oyuncular ne tür tavuk olduklarını tahmin ederler, sonra puan alırlar.
Yararlanabileceğim önceki teknikler var mı?
DÜZENLEME: Son zamanlarda fark ettiğim bir şey, oyun durumunun iki kategoriye ayrılabileceğiydi:
Oyun artefakt durumu . "10 dolarım var" veya "sol elim mavi".
Oyun sıralaması durumu . "İki kez çift attım; bir sonraki beni hapse atıyor". Bir durum makinesi burada mantıklı olabilir.
DÜZENLEME: Burada gerçekten aradığım şey, Satranç veya Scrabble veya Monopoly gibi çok oyunculu sıra tabanlı oyunları uygulamanın en iyi yolu. Eminim baştan sona üzerinde çalışarak böyle bir oyun yaratabilirim, ancak diğer Tasarım Kalıpları gibi, muhtemelen dikkatli bir çalışma olmadan açık olmayan bazı şeyleri daha sorunsuz ilerletmenin bazı yolları vardır. Umduğum şey bu.