我的世界附魔指令代码是// 返回一个区间为[0,n-1)的随机整数function randomInt(n);// 返回一个区间为[0,1)的一个随机实数function randomFloat();// 利用三角随机分布,生成一个区间为[1,1+(附魔能力/2))的随机数enchantability_2 = enchantability / 2;int rand_enchantability = 1 + randomInt(enchantability_2 / 2 + 1) + randomInt(enchantability_2 / 2 + 1)。
详细答案:
附魔基础
当把一件可附魔的物品放上附魔台时,可用的附魔等级将会依据以下公式随机生成。附魔等级由附近书架的数量(最多15个)及附魔等级在附魔列表中所在的行数决定。
以下是可用附魔等级的计算步骤:
可用附魔等级基数(base) = (1..8 + (b/2) + 0..b)
其中b 是附近书架的数量(≤15),“x..y”表示在[x,y]闭区间内产生一个随机数。产生基数后,游戏会根据附魔等级所在的行数,进行第二步计算:
第一行等级 = max (base / 3, 1)
第二行等级 = (base × 2) / 3 + 1
第三行等级 = max (base, b × 2)
每一行等级计算时会使用新的附魔等级基数,即一次计算过程会生成3次base
在正式版 1.3 前,可用附魔等级基数计算公式为 base = (1..5 + (b/2) + 0..b) ,并乘以“行列因数”(第一行为1⁄3,第二行为2⁄3,第三行为1)得到。最小的附魔等级与附魔台周围有效书架数目的一半相同。
在正式版 1.1 前,上式的“(b/2)”项曾是“0..(b/2)”,这使得附魔等级随机性变大,刷出高等级附魔选项会耗费大量时间。同时,可用附魔等级的最低级固定在1,不会受书架数目的影响。
魔咒是如何选择出来的
“魔咒等级”是某一魔咒所需的经验级别(在按钮上的绿色数字)。
“魔咒威力”是某一特定魔咒的力量。例如,“锋利IV”有4点威力。
魔咒的挑选
首先游戏会把两个调节值加入到被选的附魔等级中。每个调节值会被限制在一定的范围内,数字接近范围中央的会比靠近两端的更常见。
第一调节值是基于附魔对象的“附魔能力”,这取决于该物品的材料和类型(见下表)。游戏会在0至附魔能力的一半(实际上,游戏会先将附魔能力除以4,四舍五入为整数后再乘以2)之间随机挑选一个数字,然后将这个数字和1加到附魔等级里。此时,弓的附魔能力是1。然后,这个随机数会经过正态分布处理,使得最终结果靠近附魔能力一半的几率远大于靠近极端值的几率。
接着,Minecraft会在0.85和1.15之间挑选一个值,并再次经过正态分布处理。修改后的附魔等级会乘以这个值(因此它可以增加或减少最多15%),然后四舍五入至整数,得到最终的等级调节值。
伪代码
// 返回一个区间为[0,n-1)的随机整数
function randomInt(n);
// 返回一个区间为[0,1)的一个随机实数
function randomFloat();
// 利用三角随机分布,生成一个区间为[1,1+(附魔能力/2))的随机数
enchantability_2 = enchantability / 2;
int rand_enchantability = 1 + randomInt(enchantability_2 / 2 + 1) + randomInt(enchantability_2 / 2 + 1);
// 选择附魔能级
int k = chosen_enchantment_level + rand_enchantability;
// 0.85至1.15之间的附魔奖励
float rand_bonus_percent = (randomFloat() + randomFloat() - 1) * 0.15 + 1;
// 最终计算得到等级
int final_level = (int)(k * (1 + rand_bonus_percent) + 0.5);