You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为数组属性列表中的单个属性计算独立奖励值技术问询

完善D&D属性奖励计算的Java代码

我帮你补全了属性奖励的计算逻辑,完全遵循D&D 5e的属性奖励规则,同时整理了代码结构让它更完整可运行:

import java.util.Random;

public class CharacterStats {
    // 假设这些是类的成员变量,你可以根据实际需求修改值
    private static String characterName = "Gimli";
    private static String characterClass = "Fighter";
    private static int Level = 1;
    private static Random random = new Random();

    // 模拟掷骰生成属性值:这里用3d6的经典方式,你可以改成4d6取高3个的规则
    public static int rollDice() {
        return random.nextInt(6) + 1 + random.nextInt(6) + 1 + random.nextInt(6) + 1;
    }

    public static void stats() {
        System.out.println("\nName : " + characterName + " " + characterClass);
        System.out.println("Level : " + Level); // 输出角色等级

        int[] statValues = new int[6];
        String[] stats = new String[]{"Str", "Dex", "Con", "Int", "Wis", "Cha"};

        for (int i = 0; i < statValues.length; i++) {
            statValues[i] = rollDice();
            int amount = statValues[i];
            
            // 核心:计算属性奖励,用Math.floorDiv实现向下取整,完全匹配D&D规则
            int abilityBonus = Math.floorDiv(amount - 10, 2);

            // 格式化输出属性值和奖励
            System.out.print(stats[i] + " : " + amount);
            if (abilityBonus > 0) {
                System.out.println(" (+"+abilityBonus+")");
            } else if (abilityBonus < 0) {
                System.out.println(" ("+abilityBonus+")");
            } else {
                System.out.println(" (+0)");
            }
        }
    }

    public static void main(String[] args) {
        stats();
    }
}

关键细节说明

  • 属性奖励计算:Math.floorDiv(amount - 10, 2)是核心逻辑,它会自动对结果向下取整,完美符合D&D的属性奖励规则:
    • 属性值10/11 → 奖励+0
    • 属性值12/13 → 奖励+1
    • 属性值8/9 → 奖励-1
    • 属性值6/7 → 奖励-2,以此类推
  • 掷骰逻辑扩展:当前rollDice()实现的是3d6的经典属性生成方式,如果需要用4d6取最高3个的规则,你可以修改这个方法的逻辑:
    import java.util.Arrays;
    
    public static int rollDice() {
        int[] rolls = new int[4];
        for (int j = 0; j < 4; j++) {
            rolls[j] = random.nextInt(6) + 1;
        }
        // 排序后取后3个的和
        Arrays.sort(rolls);
        return rolls[1] + rolls[2] + rolls[3];
    }
    
  • 输出优化:根据奖励的正负值调整输出格式,让结果更直观,符合TRPG玩家的阅读习惯。

内容的提问来源于stack exchange,提问作者DDSasikala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:03:03