Enum Vs. Số nguyên cho các giá trị kỹ năng


10

Tôi đang thực hiện một hệ thống kỹ năng và thuộc tính cơ bản, mặc dù tôi có suy nghĩ thứ hai về cách tôi nên đi về nó.

Ví dụ: tôi có thể sử dụng Từ điển / HashMap, sử dụng enum SkillType để biểu diễn các khóa và các giá trị nguyên biểu thị các giá trị. Nhưng tôi có nên làm điều này?

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
}

Tôi muốn biết lợi ích của an toàn loại ở đây, trái ngược với việc chỉ sử dụng các số nguyên cơ bản. Có khuyến nghị nào không?


Tôi interface Skill { /* ... */ int toInt(); }; public class Skills : IList { private ArrayList<Skill> skills; /* ... */ };thực sự thích ...
Martin Sojka

Câu trả lời:


8

Nếu cuối cùng sẽ có:

  • rất nhiều loại kỹ năng trong trò chơi của bạn,
  • hoặc các mục cấp khả năng,
  • hoặc buff khả năng,
  • hoặc một cây khả năng lớn,

sau đó tôi bắt đầu thích tính linh hoạt của các khóa chuỗi hoặc số nguyên trong từ điển thay vì các trường riêng lẻ hoặc thậm chí từ điển có khóa enum.

Lý luận của tôi-- Bởi vì bạn có thể sớm nhận ra ...

Boy, thật tuyệt nếu tôi có thể điều chỉnh mathcraft của mình và chọn các khả năng của đơn vị trong (trình soạn thảo văn bản yêu thích của tôi | Excel | một công cụ tùy chỉnh).

... Tại thời điểm đó, một từ điển với các khóa chuỗi hoặc số nguyên trở nên phù hợp tự nhiên hơn là phải tự duy trì các giá trị enum hoặc một danh sách dài các trường đối tượng. Tuy nhiên, công cụ cho biết luôn có thể được viết để tạo mã C #, vì vậy bạn có thể tìm thấy một phép lai hạnh phúc.

Nếu độ phức tạp trong trò chơi của bạn sẽ khá đơn giản và nhiều kỹ năng của bạn nhỏ, thì việc quản lý các trường đối tượng bằng tay (thay vì từ điển & enum) có vẻ thuận tiện hơn và tránh được mức độ gián tiếp, cả trong thời gian chạy và "gõ phím" - thời gian.


Bạn có ý nghĩa gì bởi khả năng đơn vị và mathcraft mặc dù? Tôi không hoàn toàn theo dõi, ít nhất là về vấn đề đó. Tôi muốn sử dụng một enum, nếu điều đó thực tế.
blissfreak

Tôi đồng ý một phần với bạn, chuỗi rất tuyệt vời ở cấp độ cao hơn (ví dụ API tập lệnh) nhưng để di chuyển chuỗi xung quanh không phải là ý tưởng hay (bộ nhớ và thời gian di chuyển giới hạn số lượng op tối đa bạn có thể làm trên mỗi khung hình). Được lai có thể là một tùy chọn: các thực thể được đặt tên với số nhận dạng số nguyên. Tên phải được lưu trữ một lần (có lẽ trong bản đồ đơn) và các thực thể tự nhận dạng bằng cách sử dụng số nguyên. Làm như vậy bạn có thể đặt các chuỗi trong giao diện của mình nếu cần và hoạt động như thể chúng là enum.
FxIII

@fxiii Tôi đồng ý và là lý do tại sao tôi đề cập đến "chuỗi hoặc số nguyên". Mặc dù vậy, tôi không đi sâu vào chi tiết, vì vậy cảm ơn bạn đã nêu ra một số lý do và cách sử dụng số nguyên.
DuckMaestro
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.