SORU
11 Aralık 2008, PERŞEMBE


Modelleme tahta oyunları için bir benzerlik var mı?

Eğlence için, bir yazılım parçası olarak oğlumun favori tahta oyunları birini yazmaya çalışıyorum. Sonunda üstüne WPF kullanıcı arabirimi oluşturmak için bekliyorum, ama şu an modeller oyunları ve kuralları makinesinde yapıyorum.

Bu benim gibi birçok tahta oyunları için ortak sanırım bu sorunları görüyorum, ve belki de diğerleri zaten benden daha iyi onları çözmüş.

(Oyun oynamak için AI ve yüksek desenler bana ilginç değildir unutmayın.)

Şimdiye kadar benim desen:

  • Birkaç değişmez tür oyun kutusu, örneğin, zarların, Dama, kartları, bir board üzerinde boşluk, para, vb varlıkları temsil eden.

  • Oyuncular kaynakları içeren her oyuncu için bir nesne (örneğin, para, puan), adı, vb.

  • Oyun durumunu temsil eden nesne: kimin sırası olduğunu oyuncu, tahtada peices düzeni, vb.

  • Dönüş sırası yöneten devlet bir makine. Örneğin, birçok oyun her oyuncu ilk kim gider görmek için rulo nerede maç öncesi küçük olması. bu başlangıç durumu. Bir oyuncunun başladığında, ilk rulo, sonra, sonra yerde dans ediyorlar, sonra da diğer oyuncuların ne olduklarını tahmin, o zaman puan alırsınız hareket ediyorlar.

Yararlanmak edebilirim biraz önce sanat var mı?

DÜZENLEME:Bir şey fark ettim son zamanlarda oyun durumu iki kategoriye bölünebilir:

  • Oyun eserdir devlet. "10 dolar var" ya da "sol elim mavi".

  • Oyun sırası durumudur. "İki kez iki katına rulo var; sonraki beni hapse koyar". Devlet bir makine bir anlam olabilir.

DÜZENLEME:Gerçekten işte aradığım şey buiyiyol multiplayer uygulamak için sıra tabanlı oyunlar gibi Satranç ya da Scrabble ve Monopoly. Eminim edebilirim oluşturmak gibi bir oyun sadece çalışma ile başlatmak için son, ama, gibi diğer Tasarım Desenleri, orada büyük olasılıkla bazı yollar için işler çok daha sorunsuz bu değil mi belli olmadan dikkatli bir çalışma. Ben de öyle umuyorum.

CEVAP
17 ŞUBAT 2009, Salı


bu sadece şimdi fark ettim ki 2 aylık bir konu olduğunu, ama ne halt görünüyor. Tasarlanmış ve daha önce ticari, ağa bağlı bir masa oyunu oyun çerçevesinde geliştirdik. Çok hoş bir deneyim ile çalışmak zorundaydık.

Oyun muhtemelen bir (yakın) sonsuz miktarda durumları nedeniyle permütasyon şeyler gibi ne kadar para oyuncu var, ne kadar para oyuncu B, vb... Bu Nedenle de, eminim ki istediğiniz uzak durmaya durum makineleri.

Arkasındaki fikir çerçevesi olduğunu göstermek oyunu devlet yapısı ile tüm veri alanlarını birlikte, sağlamak tam oyun devlet (Yani: eğer istediğin için oyun kaydetmek için disk, yazdığınız yapısı).

Command Pattern bir oyuncu yapabilir geçerli oyun tüm eylemleri temsil etmek için kullandık. Burada bir örnek olacak eylem:

class RollDice : public Action
{
  public:
  RollDice(int player);

  virtual void Apply(GameState& gameState) const; // Apply the action to the gamestate, modifying the gamestate
  virtual bool IsLegal(const GameState& gameState) const; // Returns true if this is a legal action
};

Bir hareket geçerli olup olmadığına karar vermek için o eylem inşa ve İsLegal işlevi çağrısı, geçerli oyun durumu geçtikten sonra. Geçerli ve oyuncu eylem teyit ederse, işlevi aslında oyun durumunu değiştirmek için Geçerli arayabilirsiniz. Tarafından sağlanması, bu sizin oyun kodu tek değişiklik oyun devlet tarafından oluşturma ve gönderme yasal Eylemler (başka bir deyişle, Eylem: Uygula:aile yöntemleri tek şey doğrudan değiştirir oyun devlet), sonra emin olun sizin oyun devlet asla geçersiz. Ayrıca, komut deseni kullanarak, mümkün oyuncunun istenen hamle seri hale getirmek ve diğer oyuncunun oyunu Birleşik Devletleri üzerinde yürütülecek bir ağ üzerinden onları göndermek için.

Oldukça zarif bir çözüm var çıktı Bu sistem ile yakaladım sona erdi. Bazen eylemler, iki veya daha fazla aşama var. Örneğin, oyuncu Tekelci bir özellik üzerinde arazi olabilir ve şimdi yeni bir karar alması gerekiyor. Oyun zarları, ve bir mülk satın almak için karar vermeden önce ya da değil arasında durumu nedir? Bir "Eylem Bağlamı" oyunumuzun üye devlet. sergileyerek, bu gibi durumlar başardık Eylem kapsamında normalde boş, oyun şu anda herhangi bir özel durumu olmadığını belirten olurdu. Ne zaman oyuncu rulo zar ve zar dönme hareketi uygulanır oyun devlet olduğunu ve bu oyuncuya indi bir BM mallarının ve yeni bir "PlayerDecideToPurchaseProperty" eylem bağlamı içeren dizinin oyuncu bekliyoruz ... ... için bir karar. RollDice eylem tamamlandı, oyun devletimizin şu anda belirtilen oyuncu için bir mülk satın almak için karar vermek için bekleyen olduğunu gösterir. Şimdi kolay için tüm diğer eylemler' İsLegal geri dönmek için yöntem yanlış, hariç "BuyProperty" ve "PassPropertyPurchaseOpportunity" eylemleri, sadece yasal oyun devlet vardır "PlayerDecideToPurchaseProperty" eylem bağlamı.

Aracılığıyla eylem bağlamı, asla tek bir noktada yaşam zamanı Oyunu oyunu nerede devlet yapısı değil tamamen temsil TAM olarak ne oluyor oyun bu noktada zaman. Bu kurulu oyun sistemi çok arzu edilen bir özellik. Sen kod yazmak için çok daha kolay hiç tek yapısı incelenerek oyunda neler olduğunu bilmek istiyorum. her şeyi bulabilirsiniz zaman olacak

Ayrıca, uzanır için çok iyi bir ağ ortamları, nerede müşteriler göndermek onların eylemleri üzerinde bir ağ için bir ana makine, geçerli eylem için konak "resmi" oyunu devlet, ve sonra echo eylem arka tüm diğer müşteriler için onları uygulamak için kendi çoğaltılmış oyun Birleşik Devletleri.

Bu özlü ve yararlı olduğunu umuyoruz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ayite Atiwoto (superjiffrey)

    Ayite Atiwot

    29 EYLÜL 2010
  • FD2097

    FD2097

    21 HAZİRAN 2009
  • NLthomas21

    NLthomas21

    20 Mayıs 2008