玩《我的世界》的小伙伴許多都是大觸,我的世界這個(gè)平臺(tái)可以實(shí)現(xiàn)許多游戲做不到的事,你甚至可以在游戲中用紅石做一個(gè)計(jì)算器,進(jìn)行計(jì)算。但是工程量浩大,下面就讓小編來(lái)為大家詳解一下我的世界計(jì)算器怎么制作吧!
我們知道算法中的加法和減法在《我的世界》利用紅石比較器能夠比較簡(jiǎn)單的實(shí)現(xiàn),但是乘除法就相對(duì)復(fù)雜得多,所以下面就為大家介紹一個(gè)比較精簡(jiǎn)的二進(jìn)制串行乘法器~
一:算法原理
1.十進(jìn)制的乘法運(yùn)算
當(dāng)我們進(jìn)行兩位數(shù)乘兩位數(shù)運(yùn)算的時(shí)候(如32x46),我們通常會(huì)先將其中一個(gè)兩位數(shù)拆成一位數(shù)(4和6),然后用另一個(gè)兩位數(shù)(32)去乘那兩個(gè)一位數(shù)(32x4=128,32x6=192),將位權(quán)高的位數(shù)對(duì)應(yīng)的乘積移動(dòng)到指定位置(因?yàn)?在十位,所以32x4的128理應(yīng)是32x40=1280,所以將128左移一位得到1280),將乘積們相加(1280+192=1472)即可得到結(jié)果(32x46=1472)。(注:移位的本質(zhì)是乘以10,任何進(jìn)制都是這樣,只不過(guò)這個(gè)“10”的含義隨著進(jìn)制變化而改變,如十六進(jìn)制的10在10進(jìn)制下是16,二進(jìn)制下的10在10進(jìn)制下是2。)
2.二進(jìn)制數(shù)的多位數(shù)乘一位數(shù)
二進(jìn)制的多位數(shù)乘一位數(shù)的乘法比十進(jìn)制要簡(jiǎn)單很多,因?yàn)橐晃粩?shù)只有兩種情況。一個(gè)多位數(shù)n在乘以一位數(shù)的時(shí)候,若一位數(shù)是0,那么結(jié)果肯定是0.若一位數(shù)是1,那么結(jié)果就是n。這里如果用傳統(tǒng)數(shù)電方法就用一排與門就好,與門只有在兩個(gè)輸入都為1的時(shí)候才會(huì)輸出1,與二進(jìn)制的一位數(shù)乘一位數(shù)不謀而合。而二進(jìn)制下的多位數(shù)乘一位數(shù)不存在進(jìn)位問(wèn)題,所以一排與門就可以解決了。
3.二進(jìn)制數(shù)的多位數(shù)乘多位數(shù)
按照1中的步驟來(lái)看,現(xiàn)在只需要將這一堆多位數(shù)乘一位數(shù)的結(jié)果進(jìn)行左移與相加了。但是這兩步實(shí)際上可以同時(shí)進(jìn)行。比如用十進(jìn)制來(lái)舉例,2000x52=104000,2x52=104,這里移位需要進(jìn)行3次,而其他還會(huì)有數(shù)需要進(jìn)行2次或1次移位的。那么不妨最高位得到的乘積移位一次后就與低一位的數(shù)相加,這時(shí)再進(jìn)行移位的話就相當(dāng)于將兩個(gè)數(shù)都進(jìn)行了移位,總體算來(lái)最高位那個(gè)數(shù)已經(jīng)移位兩次了。所以,移位與相加這兩步可以混合在一起。如a乘b首先引入一個(gè)新的變量t=0,a與b的最高位用2中的方法相乘后的結(jié)果與t相加存入t(這一步叫累加,存儲(chǔ)t的存儲(chǔ)器連著對(duì)應(yīng)的加法器還有一個(gè)名字叫累加器),然后t左移一位存入t。接著用a乘以b低一位的數(shù)累加入t,t左移,以此類推。當(dāng)a與b最低位相乘出結(jié)果并與t累加后,就不用再移位了,因?yàn)閍與b最低位乘出來(lái)的數(shù)是不需要移位的,而更高位的結(jié)果此時(shí)已經(jīng)移位完成了。此時(shí),計(jì)算已經(jīng)完成。
二:實(shí)現(xiàn)到游戲里
1.beta1.7就存在的遠(yuǎn)古累加器
從算法原理部分我們知道,實(shí)現(xiàn)乘法器要用到累加,因此我們先來(lái)介紹一下累加器,如下圖,這是一個(gè)十分傳統(tǒng)的累加器單元,以至于生存測(cè)試階段出現(xiàn)粘性活塞之后就已經(jīng)可以使用這個(gè)架構(gòu)了。
下圖中,從右往左的淡藍(lán)色羊毛分別表示從低位到高位,抬起的羊毛代表“0”,落下的羊毛代表“1”。如下圖的狀態(tài)是0000000(二進(jìn)制)。按鈕從右向左分別表示+1(二進(jìn)制),+10(二進(jìn)制,換算回十進(jìn)制就是+2),+100(還是二進(jìn)制),+1000+…。于是這個(gè)累加器就可以直接將一個(gè)二進(jìn)制數(shù)累加進(jìn)這個(gè)存儲(chǔ)器了。如果輸出的數(shù)字很大,但是輸入不大,那么也需要酌情砍掉一部分的輸入(或者說(shuō)增加一部分存儲(chǔ)器)。
例如,按兩下右數(shù)第二個(gè)按鈕,表示10+10(二進(jìn)制)=2+2(十進(jìn)制),如下圖所示,可以看到,輸出為100(二進(jìn)制)=4。
原理就是粘性活塞接收“短脈沖”的時(shí)候只會(huì)進(jìn)行一次推出或收回的動(dòng)作,不會(huì)同時(shí)推出和收回。例如上圖,當(dāng)按下右數(shù)第三個(gè)按鈕時(shí),信號(hào)傳遞給粘性活塞并且讓羊毛充能,充能的羊毛將信號(hào)向左傳遞,同時(shí)粘性活塞推出羊毛,這樣就完成了移位。
知道了算法和累加器的原理之后,應(yīng)該就比較好理解乘法器的建造思路了,那么接下來(lái)我們就開始一步步建造這個(gè)乘法器吧。
首先注意,按照這種建造方法建造的最小乘法器為4位乘4位的,那么接下來(lái)為大家介紹的乘法器就以8位乘8位為例。
第一步:搭出基礎(chǔ)框架,這里用不同羊毛來(lái)區(qū)分乘法器中起著不同作用的部分。淡灰色羊毛表示刪除或者復(fù)位部分,其作用是將運(yùn)算結(jié)果清除復(fù)位乘法器以方便下一次運(yùn)算。綠色羊毛表示輸入部分,藍(lán)色羊毛表示累加器及輸出部分,紫色羊毛表示時(shí)序控制和循環(huán)部分。
第二步:按照下圖所示放置熔爐和粘性活塞,并在每個(gè)熔爐中放入一個(gè)物品。
第三步:如圖所示鋪設(shè)紅石電路,注意紅石中繼器和紅石比較器的方向,圖中中間位置的紅石中繼器下方需要放置半磚,否則會(huì)將下方的紅石線阻斷。
下面這張是反面,在中間的藍(lán)色羊毛上放一個(gè)絆線鉤。
當(dāng)拉動(dòng)綠色羊毛處的拉桿時(shí),表示輸入為1,粘性活塞將方塊推出,將輸入部分和加法器的電路連接,從而將輸入載入移位寄存器中。
第四步:接著如下圖所示把這個(gè)模塊密排堆疊8個(gè),這樣就代表了二進(jìn)制的8位數(shù),其中每個(gè)拉桿代表一個(gè)位數(shù)的輸出。
第五步:緊貼著綠色羊毛模塊的高位建造另一個(gè)乘數(shù)(橙色羊毛)部分,如下圖,右邊(輸出)部分和綠色羊毛部分的構(gòu)造是一模一樣的。
第六步:下面兩張圖是左半部分的構(gòu)造,添加了漏斗和投擲器,上方的投擲器和漏斗朝向綠色羊毛部分,下方兩個(gè)漏斗的方向和上面的相反。
第七步:.然后在剛才那8個(gè)綠色羊毛模塊的左側(cè)(也就是高位側(cè))堆疊8個(gè)出來(lái)。如下圖所示,這樣一個(gè)8位乘8位的乘法器的框架就出來(lái)了。
第八步:.接下來(lái)我們需要在一些地方補(bǔ)充裝置,使得乘法器每個(gè)部分能夠連接起來(lái),正常運(yùn)作~
1.把橙色部分的最左側(cè)(高位處)修改成下圖這樣~ 右側(cè)那三個(gè)方塊都是投擲器,其中一個(gè)投擲器是原來(lái)就存在的,向著模塊內(nèi)部的方向,剩下兩個(gè)都是向上,漏斗向左。
2.然后在前面增加一層,變成下圖這樣。中間的沙子可以替換成不受重力影響的方塊,還有三個(gè)熔爐,上面和左下的熔爐放一個(gè)任意物品,中間的熔爐放一個(gè)不可堆疊物品(如最便宜的木鏟或石鏟),左上角的白色羊毛處增加一個(gè)按鈕作為啟動(dòng)鍵。
3.連接橙色部分和啟動(dòng)部分的電路修改成如下圖所示:
4.這里增加兩個(gè)粘性活塞以及補(bǔ)一些羊毛。
5.下圖中連接部分加一堆漏斗,這些漏斗連接高位部分的漏斗。
6.找到末尾的位置,改成下面這樣,注意原來(lái)左下角的那個(gè)中繼器變成了紅石線。
7.重要,下圖中末尾部分的四個(gè)中繼器改成4tick增加延遲,保證下一次運(yùn)算不會(huì)出錯(cuò)。
8.下圖十字準(zhǔn)星所指向的投擲器內(nèi)部放兩個(gè)不可堆疊物品(如木鏟)
9.下圖中加上一個(gè)紅石火把,注意先破壞掉中繼器。
到這里,所有的修改都完成了,同時(shí)乘法器也就大功告成了。
使用的時(shí)候,橙色部分輸入其中一個(gè)乘數(shù),綠色部分輸入另一個(gè)乘數(shù),按照習(xí)慣左側(cè)輸入高位,右側(cè)輸入低位,按下按鈕就可以計(jì)算了。比如,我們計(jì)算3*3,換算成二進(jìn)制就是11*11,如下圖所示把相應(yīng)的拉桿拉起。
得到紅石比較器的輸出是1001,也就是2^4+1=9 (注意,從這個(gè)方向看的話,輸出端左側(cè)是低位,右側(cè)是高位。)
當(dāng)投擲器旁邊的比較器高頻時(shí)鐘閃爍之后,表示此次運(yùn)算已經(jīng)完成,方可進(jìn)行下一次運(yùn)算。當(dāng)運(yùn)算結(jié)束后,再次輸入乘數(shù)并按下按鈕,灰色羊毛部分開始運(yùn)作,會(huì)將輸出端的粘性活塞推出,先將上一次的運(yùn)算結(jié)果,同時(shí)啟動(dòng)加法器和移位寄存器開始下一輪的計(jì)算。
以上就是精簡(jiǎn)串行乘法器的教程,本篇教程介紹的乘法器相比于其他乘法器具有體積更小的優(yōu)點(diǎn),不足是運(yùn)算速度較慢。但是由于建造起來(lái)比較方便,同時(shí)體積小也彌補(bǔ)了在運(yùn)算速度上的缺憾,所以這個(gè)乘法器還是比較實(shí)用的,希望大家能夠喜歡~
瀏覽量:02023-01-26
瀏覽量:02021-10-07
瀏覽量:02021-08-05
瀏覽量:02021-07-14
瀏覽量:02021-07-09
瀏覽量:02021-07-08
安卓版|1785116753
安卓版|1785116753
安卓版|1785116753
安卓版|837738824
安卓版|1785116753
安卓版|1785116753