Bir oyun için bir envanter sistemi uygulamak nasıl?

2 Cevap

PHP nasıl bir oyun için bir envanter sisteminin uygulanması hakkında gitmek istiyorsunuz? Ben öğeler dinamik, örneğin, yerine sadece envanter oturan kullanılabilir böylece bir çıkış yolu anlamaya çalışıyorum , silah donatılması iksir kullanarak, ışınlandıktan, vb

Ben kadar gelebilir tek çözüm veritabanında PHP kodu saklamak ve madde kullanıldığı zaman onu almak için, ama bu gerçekten uygun görünmüyor. Bu uygulamak için daha iyi bir yolu var mı?

Netleştirmek için: Bu bir MMO tarayıcı oyun, ve her oyuncunun envanter oyun yoluyla devam etmek gerekiyor. (Öğeleri yüzlerce olabilir) her öğe için bir sınıf olan herhangi bir değişiklik yapılacak olsaydı korumak için zor görünüyor.

2 Cevap

Önerdiği gibi bir 'baseItem' sınıfı uygulamanın yanı sıra, aynı zamanda tüm öğeleri olmalıdır yöntemlerini özetleyen için bir arabirim sınıfı gelişmekte dikkate isteyebilirsiniz. Sonra, her öğe türü farklı bu yöntemleri uygulamak olabilir.

Örneğin, tüm öğeleri bir 'donatmak ()' yöntemi olması gerekebilir, ama öyle öğelerin hangi tür dayalı farklı şekilde uygulamak. Sen her öğe için bir sınıf oluşturmak için gerek olmayabilir, ama muhtemelen (veritabanında saklanabilir) sağladığınız veri yapısı çeşit dayalı öğelerin benzersiz örneklerini yaratma yeteneğine sahip sınıflar oluşturmak gerekir.

Gerçekten genel bir örnek olabilir:

class Leather_Armor extends Armor_Base implements Equippable
{
     // these would probably be defined in the base class instead of here
     protected $_itemName;
     protected $_itemDescription;
     protected $_defenseRating;

     public function __construct(params)
     {
         // intialize properties with data from the db
     }


     // the Equippable interface requires us to define this function
     public function equip()
     {
        // call a function from the base class
        $this->recalculateDefenseRating($this->defenseRating)
     }

}

Muhtemelen tam bir fikir edinmek için arayüzleri ve soyut sınıflar kadar okumalısınız.

Ayrıca, bu bin farklı şekillerde yaklaşılabilir daha çok geniş, açık uçlu bir soru olduğunu unutmayın. Daha spesifik bir şey sormak, ya da somut örnekler sunmak isteyebilirsiniz.

(? Simgesi ses miktarı) tüm öğeler için ortak şeyleri içerir hangi öğeleri devralan bir "baseItem" sınıfına dahil - bir envanter sınıf kurmak gerekir, ve her öğe için sınıfları olacak PHP Kullanımı.

Sen bir oturum değişkeni stok sınıfının kullanıcının örneğini saklamak gerekir. Eğer devam etmek istiyorsanız bir veritabanında olmalıdır.

Envanter erişen herhangi bir sayfa öğesi ve stok sınıflarını içeren dosyayı başvurmak gerekir.

This link bir oturuma bir nesne ayarı ve sayfalar arasında erişmesini gösterir.

EDIT: yazdınız çok hızlı ve bir çift anahtar terimleri karışık