Enum Vs. Beceri Değerleri için Tamsayı


10

Temel bir beceri ve nitelik sistemi uyguluyorum, ancak bu konuda nasıl ilerlemem gerektiği konusunda ikinci düşüncelerim var.

Örneğin, tuşları temsil etmek için SkillType enums ve değerleri temsil eden tamsayı değerleri kullanan bir Dictionary / HashMap kullanabilirsiniz. Ama bunu yapmalı mıyım?

public class Skills
{
    public IDictionary<StatType, Int> skills; //StatType is enum, being the key; the int //is the value.

}

vs.

public class Skills
{
    public int LongBlade, Armor, Marksman; //...etc
}

Sadece temel tamsayıları kullanmanın aksine, tip güvenliğinin faydalarını bilmek istiyorum. Herhangi bir tavsiye?


Tercih ederim interface Skill { /* ... */ int toInt(); }; public class Skills : IList { private ArrayList<Skill> skills; /* ... */ };, aslında ...
Martin Sojka

Yanıtlar:


8

Sonunda olacaksa:

  • oyununuzda çok çeşitli beceri türleri,
  • veya yetenek kazandıran öğeler,
  • veya yetenek kazandıran güçlendiriciler,
  • ya da büyük bir yetenek ağacı,

sonra tek tek örnek alanları yerine bir dize veya tamsayı anahtarlarının esnekliğini veya hatta bir enum anahtarıyla bir sözlüğü tercih etmeye başlarım.

Akıl yürütmem-- Çünkü yakında farkedebilirsin ...

Çocuk, benim matematik gemimi değiştirip birim yeteneklerini (favori metin düzenleyicim | Excel | özel bir araç) seçebilirsem iyi olurdu.

... bu noktada dize veya tamsayı tuşlarına sahip bir sözlük, enum değerlerini veya uzun bir örnek alanı listesini kendiniz tutmak zorunda olmaktan daha doğal bir uyum sağlar. Bununla birlikte, bahsedilen araç her zaman C # kodu oluşturmak için de yazılabilir, böylece mutlu bir melez bulabilirsiniz.

Oyun karmaşıklığınız oldukça basit olacak ve çeşitli becerileriniz küçük olacaksa, örnek alanlarını elle yönetmek (sözlük ve numaralandırma yerine) daha uygun görünüyor ve hem çalışma zamanında hem de "tuş vuruşunda" dolaylı bir seviyeden kaçınıyor - saati.


Ünite yetenekleri ve mathcraft ile ne demek istiyorsun? En azından bu konuda tam olarak takip etmiyorum. Eğer pratik olsa da, bir enum kullanmak istiyorum.
blissfreak

Kısmen size katılıyorum, dize daha yüksek seviyeler için harika (örn. Komut dosyası API'sı) ancak dizeleri hareket ettirmek iyi bir fikir değil (bellek ve hareket süresi kare başına yapabileceğiniz maksimum ops miktarını sınırlar). Karma olmak bir seçenek olabilir: tamsayı tanımlayıcılarına sahip varlıklar. İsimler bir kez (belki de tek bir haritada) saklanmalıdır ve varlıklar kendilerini tamsayılar kullanarak tanımlar. Böylece gerektiğinde arayüzlerinize dizeler koyabilir ve numaralar gibi çalışabilirsiniz.
FxIII

@fxiii Kabul ediyorum ve bu yüzden "string veya integer" den bahsettim. Yine de çok ayrıntılı bir ayrıntıya girmedim, bu yüzden tamsayıların kullanımı ile ilgili neden ve nasıl olduğunu açıkladığınız için teşekkür ederiz.
DuckMaestro
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.