Tôi đang phát triển một game nhập vai và tôi đang ở điểm cần bắt đầu xây dựng cơ sở dữ liệu về kẻ thù. Có một vài thách thức liên quan đến vấn đề này và một vài giải pháp tôi đã xem xét.
Đây là những gì tôi cần làm trong cơ sở dữ liệu kẻ thù của mình:
Tôi có hai lớp kẻ thù chính mà tôi cần để trình bày dữ liệu về:
Một lớp kẻ thù cơ sở bao gồm:
Base Stats
Status Resistance Table
Elemental Resistance Table
Steal Table
Drop Table
Level
Unique ID
Base XP
AI Hook
Name
Display Name
Và một lớp dẫn xuất có thêm khả năng thêm thiết bị, thêm các trường sau:
Main Weapon
Secondary Weapon/Equipment
Armor
Accessories
Tôi có thể thêm các trường bổ sung hoặc các lớp bổ sung trong tương lai nếu nó có ý nghĩa. Tôi đã xem xét hai định dạng có thể cho kẻ thù cơ sở dữ liệu.
Tệp XML
Về cơ bản tôi sẽ làm như thế này:
<?xml version="1.0" encoding="utf-8"?>
<Enemies>
<Enemy name="Red Dragon" type="BaseEnemy" level="56" displayname="Red Dragon">
<Stats HP="55000" MP="2500" SP="2500" Strength="212" Vitality="125" Magic="200" Spirit="162" Skill="111" Speed="109" Evasion="100" MgEvasion="100" Accuracy="100" Luck="55"/>
<StatusResistances>
<Resistance name="Sleep" value="100" />
<Resistance name="Stop" value="100" />
</StatusResistances>
<ElementResistances>
<Resistance name="Fire" value="75" />
</ElementResistances>
<LootTable>
<Item name="Elixir" rate="0.03" count="1"/>
</LootTable>
<DropTable>
<Item name="Elixir" rate="0.03" count="1"/>
</DropTable>
<AIScript value="BasicBehaviour.py" />
<BaseXP value="4800"/>
</Enemy>
<Enemy name="Gaverick 1" type="HumanoidEnemy" level="33" displayname="Gaverick">
<!--Same Stuff as above here-->
<Equipment>
<Weapon name="Dark Eclipse"/>
<Armor name="Terra Defense"/>
<Accessory name="Ribbon"/>
</Equipment>
</Enemy>
</Enemies>
Ưu điểm:
- Dễ dàng mở rộng nếu tôi cần thêm / sắp xếp lại các tham số
- dễ dàng gán giá trị mặc định
- Tôi đã có một trình phân tích cú pháp XML (pugixml) cho các tệp cấu hình, bản đồ được xếp chồng và tải mô tả tài nguyên
Nhược điểm:
- có khả năng chậm (cơ sở dữ liệu của tôi có thể sẽ tấn công hàng trăm kẻ thù)
- không thể truy vấn kẻ thù tùy ý, do đó có thể sẽ cần giữ tất cả kẻ thù trong bộ nhớ.
- Điều này có nghĩa là tôi cũng cần phải khởi động lại trò chơi để tải dữ liệu kẻ thù đã thay đổi
SQLite
Đối với điều này, về cơ bản, tôi sẽ tạo một bảng có các cột biểu thị tất cả dữ liệu tôi cần và để trống các trường không cần thiết
Ưu điểm
- Truy vấn tùy ý có thể giữ dữ liệu kẻ thù không cần thiết ra khỏi bộ nhớ
- Cảm thấy có cấu trúc hơn
- Kích thước tệp nhỏ hơn
Nhược điểm
- Khó khăn hơn để mở rộng / sắp xếp lại các đơn hàng tham số
- Chi phí không cần thiết cho các trường không sử dụng
- Sẽ cần phải viết một trình bao bọc giao diện cơ sở dữ liệu cho sqlite
Với suy nghĩ này, tôi đã tò mò về việc có được một số kinh nghiệm bên ngoài về những gì người khác đã làm. Tôi có thể đang nghĩ về điều này hoàn toàn sai, và nếu vậy, xin vui lòng đề xuất một giải pháp thay thế cho hai khả năng tôi có ở đây.
Ngoài ra, bất kỳ đề xuất nào về cách cải thiện một trong hai khả năng này sẽ được đánh giá cao. Thực sự, tôi chỉ muốn biết nếu tôi đi đúng hướng.
Tôi sẵn sàng sử dụng bất kỳ thư viện miễn phí nào và đã kết hợp tăng cường