请选择 进入手机版 | 继续访问电脑版
查看: 1159|回复: 44

[命令方块] @r、随机扩散、刷怪笼、战利品表,制作随机器

[复制链接]

11

主题

94

帖子

41

积分

Lv.2 石器学徒

UID
27266
小麦
4
金锭
227
下界之星
0
发表于 2018-9-5 23:13:45 | 显示全部楼层 |阅读模式
本帖最后由 Roach_123 于 2018-9-16 19:34 编辑

欢迎大佬来交流
个人觉得我的描述不如直接看指令更容易懂。。。
随机器——@r篇
Minecraft 1.12.2 2018_9_5 23_15_07.mp4_20180905_231857.gif


最大最小值可以直接改MAX和MIN的random的分数

大致原理:召唤(MAX-MIN+1)(即随机范围)个实体,第一个的random分数设为MIN分,第二个的random分数设为(MIN+1)分 . . . 最后一个设为MAX分,再用@r随机选择其中一个实体打上标记,最后打印输出有这个标记的实体的random的分值。
marker用的是药水云,因为药水云只存在1游戏刻,并且不需要渲染,如果随机的范围特别大,使用盔甲架做marker会导致游戏崩溃
这里用了递归的方法来实现循环召唤(MAX-MIN+1)个实体并赋值,先将最小值赋给ROLL test(这个分值是用来遍历MIN到MAX的分值),
递归的内容:
1、重置所有marker的test分(这个分数是用来比较是否达到最大值),
2、在玩家或其他实体身上召唤tag=random的marker,
3、将ROLL test 赋值给离玩家最近的marker的random分,
4、将最大值赋值给离玩家最近的marker的test分,
5、用marker的test分减marker的random分(即用最大值减去marker的random分,如果减去后test分=0,则循环结束),
6、将离玩家最近的marker向上tp1格(再次召唤的marker成为离玩家最近的),
7、ROLL test分数加一,
8、检测是否存在marker的test分数大于等于1,若存在,则执行第一步。
执行完上面的内容,我们便得到了random分数从MIN依次加一到MAX的marker,最后再用@r随机选择一个marker打上tag,
接下来只要对有标记的marker进行操作即可,可以打印输出它的random分数,也可以自己构建一个物品池,根据这个分数找到对应物品,从而实现抽奖,或者是执行对应的事件,实现随机事件,等等。玩家可以根据自己的想象,利用随机器来做出自己想要的东西。


#触发随机
/scoreboard players set @p roll 1

#创建记分板,随便执行一下
scoreboard objectives add roll dummy
scoreboard objectives add random dummy
scoreboard objectives add test dummy
scoreboard players set ROLL test 0
scoreboard players set 1.random test 1
#最大值
scoreboard players set MAX random 100
#最小值
scoreboard players set MIN random 1



#主函数
execute @a[score_roll_min=1] ~ ~ ~ /kill @e[tag=random]
execute @a[score_roll_min=1] ~ ~ ~ /scoreboard players operation ROLL test = MIN random
function random:random if @a[score_roll_min=1]
scoreboard players tag @r[type=area_effect_cloud,tag=random] add roll.num
title @a title ["",{"text":"随机数:","color":"gold","bold":true},{"score":{"name":"@e[tag=roll.num]","objective":"random"},"color":"green","bold":true}]
scoreboard players reset @a[score_roll_min=1] roll



#实现随机数部分random:random
execute @a[score_roll_min=1] ~ ~ ~ /scoreboard players reset @e[tag=random] test
execute @a[score_roll_min=1] ~ ~ ~ /summon area_effect_cloud ~ ~ ~ {Tags:["random"]}
execute @a[score_roll_min=1] ~ ~ ~ /scoreboard players operation @e[tag=random,c=1] random = ROLL test
execute @a[score_roll_min=1] ~ ~ ~ /scoreboard players operation @e[tag=random,c=1] test = MAX random
execute @a[score_roll_min=1] ~ ~ ~ /scoreboard players operation @e[tag=random,c=1] test -= @e[tag=random,c=1] random
execute @a[score_roll_min=1] ~ ~ ~ /tp @e[tag=random,c=1] ~ ~1 ~
execute @a[score_roll_min=1] ~ ~ ~ /scoreboard players operation ROLL test += 1.random test
execute @a[score_roll_min=1] ~ ~ ~ /function random:random if @e[tag=random,score_test_min=1]




随机器——spreadplayers篇
Minecraft 1.12.2 2018_9_15 10_14_33.mp4_20180915_102201.gif



大致原理:这个就比较简单了,先摆出平面n*n(n为奇数即可)的命令方块随机池,利用随机扩散实体,然后执行该实体脚下的命令方块即可。

随机扩散的中心改为正方形中心的坐标,最小范围0,最大范围为(n-1)/2,命令方块里面的内容可以随意修改,例如give某个物品,summon某个boss,等等。
上图为5*5的命令方块,如果spreadplayers在范围内的每个坐标概率都相等,那么每个方块的概率即为1/25
也可以在命令方块里面再次执行一个新的随机扩散,假设这个随机池为3*3,那么这个新的随机池里的每个方块的概率为(1/25)*(1/9)

kill @e[tag=sp]
execute @p ~ ~ ~ /summon area_effect_cloud ~ ~ ~ {Tags:["sp"]}
spreadplayers -412 292 0 2 false @e[tag=sp]
execute @e[tag=sp] ~ ~ ~ /blockdata ~ 4 ~ {auto:1b}
execute @e[tag=sp] ~ ~ ~ /blockdata ~ 4 ~ {auto:0b}



随机器——刷怪笼篇
随机器——战利品表篇
(还没开始写,别急)

游客,如果您要查看本帖隐藏内容请回复











评分

参与人数 2 小麦 +2 金锭 +3 收起 理由
№1史蒂夫 + 1 + 3 因吹丝汀 什么时候出详细讲解
Argon_gas + 1 感谢分享

查看全部评分

一个小小的陶森特

11

主题

94

帖子

41

积分

Lv.2 石器学徒

UID
27266
小麦
4
金锭
227
下界之星
0
 楼主| 发表于 2018-9-12 10:29:37 | 显示全部楼层
本帖最后由 Roach_123 于 2018-9-15 11:08 编辑

我觉得我讲的挺细了。。要是啥看不懂,就直接回复问我吧。。Orz

1

主题

157

帖子

37

积分

Lv.2 石器学徒

UID
5717362
小麦
-4
金锭
101
下界之星
0
发表于 2018-9-5 23:25:24 | 显示全部楼层
= =

1

主题

14

帖子

5

积分

Lv.1 新手木匠

UID
5577212
小麦
0
金锭
9
下界之星
0
发表于 2018-9-8 12:47:19 来自手机 | 显示全部楼层
ee

0

主题

36

帖子

10

积分

Lv.1 新手木匠

UID
5413
小麦
1
金锭
35
下界之星
0
发表于 2018-9-8 12:55:03 来自手机 | 显示全部楼层

没人?

40

主题

1356

帖子

748

积分

Lv.6 附魔大师

UID
5000750
小麦
362
金锭
1063
下界之星
0
发表于 2018-9-8 13:33:51 | 显示全部楼层
我还是感觉懵逼,解释一下会更好

0

主题

59

帖子

13

积分

Lv.1 新手木匠

UID
108559
小麦
-2
金锭
4
下界之星
0
发表于 2018-9-8 13:41:21 来自手机 | 显示全部楼层
回复(真不是水贴)

11

主题

94

帖子

41

积分

Lv.2 石器学徒

UID
27266
小麦
4
金锭
227
下界之星
0
 楼主| 发表于 2018-9-8 14:06:52 | 显示全部楼层
Argon_gas 发表于 2018-9-8 13:33
我还是感觉懵逼,解释一下会更好

稍后写更详细点吧。。
把我知道的四种随机器都写出来。。
一个小小的陶森特

26

主题

1232

帖子

334

积分

Lv.5 农牧专家

UID
5678568
小麦
-1
金锭
309
下界之星
0
发表于 2018-9-12 12:16:06 来自手机 | 显示全部楼层
我觉得!

26

主题

241

帖子

92

积分

Lv.3 矿物能手

UID
113157
小麦
4
金锭
70
下界之星
0
发表于 2018-9-13 22:27:09 | 显示全部楼层
看不懂

0

主题

6

帖子

2

积分

Lv.1 新手木匠

UID
4044614
小麦
0
金锭
0
下界之星
0
发表于 2018-9-14 17:39:20 | 显示全部楼层
顶两下

40

主题

1356

帖子

748

积分

Lv.6 附魔大师

UID
5000750
小麦
362
金锭
1063
下界之星
0
发表于 2018-9-14 18:37:14 | 显示全部楼层
更新了啊
前来顶贴,另外期待一下刷怪笼

9

主题

583

帖子

160

积分

Lv.4 怪物猎人

UID
5132350
小麦
4
金锭
511
下界之星
0
发表于 2018-9-14 20:07:54 | 显示全部楼层
后排支持,可以的
收藏+赞

2

主题

132

帖子

47

积分

Lv.2 石器学徒

UID
43227
小麦
11
金锭
246
下界之星
0
发表于 2018-9-14 20:24:04 来自手机 | 显示全部楼层
这应该是想讲伪随机数生成算法吧

11

主题

94

帖子

41

积分

Lv.2 石器学徒

UID
27266
小麦
4
金锭
227
下界之星
0
 楼主| 发表于 2018-9-14 23:28:40 | 显示全部楼层
luobojun 发表于 2018-9-14 20:24
这应该是想讲伪随机数生成算法吧

这个是基于@r,随机扩散,刷怪笼,战利品表的随机,如果非要说这四种是伪随机,那这个也就是伪随机吧。
一个小小的陶森特
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部