Phát triển hệ thống gặp gỡ RPG


8

Tôi đang ở giữa một hệ thống chạm trán cho một game nhập vai XNA. Ý tưởng là, bạn đi bộ xung quanh một hầm ngục, và một số ô nhất định được đặt tên là RandomBattleTiles và bạn có một khu vực trong bản đồ xác định những gì quái vật có thể gặp phải. Những gì tôi cần là một cách để bố trí cách tăng cấp của quái vật và cách tăng chỉ số. Tôi đã suy nghĩ điều gì đó dọc theo những dòng này:

<Species>
    <Name>MonsterA</Name>
    <ID>001</ID>
    <SpriteName>monstera_sprite</SpriteName>
    <Levels>
       <Level>
          <LevelID>1</LevelID>
          <Stats>
              <Attack>12</Attack>
              <Defense>10</Defense>
              <Speed>20</Speed>
          </Stats>
          <Moves>
               <Move ID="1" Level="2"/>
          </Moves>
        </Level>
     </Levels>
</Species>

Điều này sẽ đúng? Moves sẽ theo một mô hình định nghĩa tương tự.

Câu trả lời:


5

Tôi đã thấy loại cơ sở dữ liệu XML này được sử dụng trong một số roguelike.

Tôi đề nghị bạn lưu trữ các loài và các bảng gặp gỡ ngẫu nhiên riêng biệt.

Bạn không cần phải đặt một bộ số liệu thống kê riêng cho mọi cấp độ có thể. Chỉ cần sử dụng một cho mức tối thiểu và một cho tối đa. Trò chơi của bạn nên nội suy giữa chúng để lấy chỉ số của quái vật theo cấp độ của nó.

<Species>
    <Name>MonsterA</Name>
    <ID>001</ID>
    <SpriteName>monstera_sprite</SpriteName>
    <Levels>
       <!-- Monster's stats at level 1 -->
       <Level>
          <LevelID>1</LevelID>
          <Stats>
              <Attack>12</Attack>
              <Defense>10</Defense>
              <Speed>20</Speed>
          </Stats>
       </Level>
       <!-- Monster's stats at level 100 -->
       <Level>
          <LevelID>100</LevelID>
          <Stats>
              <Attack>1200</Attack>
              <Defense>900</Defense>
              <Speed>15</Speed>
          </Stats>
       </Level>
    </Levels>
    <Moves>
        <!-- Monster's possible moves, according to its level and the circumstances of battle -->
        <Move Name="Slash" MinLevel="1" MaxLevel="25" AiRestrictions="Always" />
        <Move Name="Heal" MinLevel="15" MaxLevel="100" AiRestrictions="HP<25%" />
        <Move Name="Poison" MinLevel="25" MaxLevel="100" AiRestrictions="Enemy.Status!=POISON" />
    </Moves>
</Species>

Sau đó, riêng biệt, tạo các cuộc gặp gỡ ngẫu nhiên:

<RandomEncounters>
    <RandomEncounter>
        <ID>100</ID>
        <Probability>3</Probability>
        <ExperiencePoints>3600</ExperiencePoints>
        <Gold>1000</Gold>
        <Monsters>
            <Monster Species="1" MinLevel="17" MaxLevel="20" />
            <Monster Species="2" MinLevel="11" MaxLevel="12" />
            <Monster Species="2" MinLevel="11" MaxLevel="12" />
        </Monsters>
    </RandomEncounter>
</RandomEncounters>

Tôi biết điều này thực sự nằm ngoài mục đích nhưng trong ví dụ của bạn, một quái vật thuộc loài 1 có con số 26+ không bao giờ sử dụng dấu gạch chéo?
lathomas64

Vâng, nhưng sau đó người chơi nên có chỉ số phòng thủ cao hơn, khiến Slash trở thành một cuộc tấn công không hiệu quả. Đây là tất cả về Cân bằng, không?
Patrick Godwin

Thay vì sử dụng Cấp 1 và Cấp 100, tôi không thể có lớp Stat, làm BaseStat và MaxStats, và sau đó có giới hạn cấp quái vật toàn cầu?
Patrick Godwin

Vâng, tôi đoán sẽ thuận tiện hơn khi khai báo giới hạn cấp là một loại hằng số toàn cầu thay vì mã hóa cứng thành một số cố định như 100.
Người dùng không tìm thấy
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.