这是一个利用计分板计算的分位系统,能将计分板数值各个位数数字隔离,并红石进行输出
下载地址:
http://pan.baidu.com/s/1pJmclmz使用时请使用↓改变分数(默认为0)
- /scoreboard players set Score score 分数
原理:
首先,由于机械看似庞大,所以我们以数值的方式先来探讨。
下面是一个符合本机械原理的C语言程序:
- #include<stdio.h>
- void main()
- {
- int a = 1 , b = 0 ;
- int c ;
- int d[16] ;
- printf ("请输入正整数。\n") ;
- scanf ("%d", &c) ;
- if (c<0)
- {
- c = -c ;
- printf ("-") ;
- }
- while (c/a != 0)
- {
- d[b] = (c/a)%10 ;
- b = b*10 ;
- b++ ;
- }
- b-- ;
- for (; d >=0 ; b--)
- {
- printf ("%d", d) ;
- printf ("\n") ;
- }
- }
- while (c/a != 0)
- {
- d[b] = (c/a)%10 ;
- b = b*10 ;
- b++ ;
- }
而循环的内容就是以下数值处理,也就是主原理:
一个位的数值=(这个数/10^需要求的位数)%10
准备工作:
储存各个位数数字及假名:
变量d是一个含有假名的变量储存单位,也就是我们可以利用假名来储存各个数字。
b则是不断变化的假名,由于计分板无法控制加名,所以只能预先创建假名。
所以为迎合long的要求,我们创建了s1~s16这16个假名分别储存1-16位数字(事实上积分版只能精确到十位[long int])
并且给每个都设值,从s1-s16都设为0,方便清零
指令分别为:
- /scoreboard players set s1 n 0
- /scoreboard players set s2 n 0
:
- /scoreboard players set s16 n 0
- /scoreboard players set sn n 0
将储存量(假名)全部清零。
设置除数:
为了方便计算,我们仍然采用假名参与计算。
10^1~10^16的值就分别为10^1~10^16
指令为:
- /scoreboard players set 10 n 10
- /scoreboard players set 100 n 100
:
- /scoreboard players set 1000000000000000 n 1000000000000000
- /scoreboard players set 10^n n 10^n
将除数设为相应值。
准备工作做完了,我们接下来进行主部分和测试
测试:
清零
个位
个位2
双位数
全值123456789
全部能实现
主要部分:
接下来,我们就要实现公式:
一个位的数值=(这个数/10^需要求的位数)%10
于是我们将一个公式程序分成了三个/四个部分
对于个位为三个(直接求余),对于其他位为四个(除以相应除数并求余)
黄色部分:
- /scoreboard players operation sn num = Score score
一刻延迟连接:
红色部分:
- /scoreboard players operation sn num %= 10 num
但如果不是分离出个位,
则绿色在上,红色在下,
绿色:
- /scoreboard players operation sn num %= 10^n num
接下来一刻延迟连接蓝色:
蓝色分别为:
- /scoreboard players test sn num 0 0
- /scoreboard players test sn num 1 1
:
- /scoreboard players test sn num 9 9
将这n个(本作为16个)部分全部连接,在起始端:
设置一个单刻脉冲进行输出。脉冲持续时间越短,关于比较起的探测就会越精确。
关注贰逼,关注指令方块!
我的索引贴
@songfeitong @tyson @我的世界sun123 @PotatoMaster101 @ghyzhi10086 @审奥不解释 @67880371@kongbaiyo@zhjjhz
[groupid=546]Command Block Logic[/groupid]