为数组属性列表中的单个属性计算独立奖励值技术问询
完善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
相关产品推荐
相关产品推荐

