Minecraft Wiki

除另有声明,转载时均必须注明出处若簡繁轉換出錯,請以遊戲內為準请勇于扩充与修正内容有兴趣逛逛我们的微博沟通交流,欢迎到社区专页需要协助,请在告示板留言

了解更多

Minecraft Wiki
Advertisement
Clock
此条目需要更新。

条目中某些信息已经不符合当前版本情况。

此条目的内容需要改进。

这些内容因翻译质量较低而违反或未达到条目标准
你可以帮助我们来改进此条目。

本文在探讨Minecraft中计算系统的设计和实现。

第一节, 建造一台计算机的教程,这是一个关于如何在Minecraft中建造计算机以及如何扩展与改进的详细教程。不需要大量的计算机科学方面的知识。尚未完成

第二节, 设计一台红石计算机,提供了在Minecraft中设计与理解一个红石计算机的基本概念。不需要大量的计算机科学方面的知识。

概述

计算机促进了人们通过编程来交流的想法的实现

这篇文章将会解释为在Minecraft中设计与建造计算机打下基础,假定读者相当了熟悉红石并且有基本水平的计算机知识。

 事实上在不了解计算机是如何工作的情况下是无法建造计算机的。此教程旨在解释你需要知道的所有内容,但这确实需要一点对计算机科学的了。我们将涉及的最深层次是IGCSE CS。

所有的计算机系统都至少有一个处理单元。在运行时,处理单元执行存储在计算机内存中的指令。为了使在Minecraft中建造计算机有一个良好的开始,你应该学习计算机科学。有非常多的资源与教程可以用来学习计算机科学。但是推荐观看Crash Course on Computer Science作为一个基础的开始。尤其是1-8节。即使它不够彻底,但可以做为你理解计算机的基础。

在Minecraft中,大多数计算机是由红石粉红石火把以及红石中继器组成的,以引起粘性活塞或者红石灯的变化。 它们是被一系列的按钮拉杆压力板等等所控制。另外一些想法(本文没有涉及)是利用漏斗矿车与红石。

第一节 '建造一台计算机的教程,这是一个关于如何在Minecraft中建造计算机以及如何扩展与改进的详细教程。不需要大量的计算机科学方面的知识,因为会对其解释,但会对其深入研究。

第二节 设计一台红石计算机,提供了在Minecraft中设计与理解一个红石计算机的基本概念。不需要大量的计算机科学方面的知识,因为会对其解释,但会对其深入研究。

实现

计算机可以被用在很多方面,从创造一个智能房子到运行一张冒险地图。但是,由于Minecraft对于计算机的限制(将会在下面说明),它们仍然是一个抽象概念,并且是一个理解CPU结构与嵌入式系统的良好工具。

计算机与计算器的区别在于计算器在没有用户输入时无法连续执行很多指令。计算机可以连续比较并处理指令来完成任务。

但是,在Minecraft中红石计算机非常慢并且臃肿,以致很难为它们找到实际应用。即使是最快的红石计算机也要花数秒来完成一个计算,并且占据数千方块的体积。在Minecraft中命令方块由于它们的速度以及清晰且高级的指令,所以相比于计算机有很大的优势, 有一些Mod可以改变计算机的速度,比如TickrateChanger 会改变游戏刻速率。

红石计算机的规划

当设计一个计算机,设计结构会影响整个红石计算机。规模和性能取决于计算机的组成。

一些事情需要考虑:

  • 执行模型(内存的计算机组织与程序存储和执行)
  • 字节大小(信息的大小,你的红石计算机用这些执行命令)
  • 命令集(红石计算机的一个结构)
  • 内存大小(数据可以存储在内存中,可存储数据多少取决于内存大小)


有一个选择决定将提供强有力的指导在各种组件的设计你的电脑。

执行模型

命令存储块的技术叫做程序在内存是允许计算机同时执行各种不同的任务。使用的设备由计算机来存储和检索这些程序是计算机的执行模型。世界上最成功的两个执行模型,哈佛和冯·诺依曼,今天将近100%的可用的计算机上运行。

哈佛结构

The Harvard architecture 检索器分离的命令组成一个活跃的程序从数据访问器的程序在执行期间访问。   编写的程序对电脑使用哈佛架构可能执行的任务达到快100%访问主内存总线。但是要注意,哈佛架构的某些记忆电路体积会很大。

冯·诺依曼结构

The von Neumann architecture使用一个两步的过程来执行命令。首先,加载内存包含下一个命令,然后新命令加载是允许访问相同的内存,因为它执行,使用一个内存的程序和数据促进元编程技术像编译器和自我修改代码。    冯诺依曼体系结构是第一个提出模型的计算和几乎所有真实的计算机是冯·诺依曼在《自然》杂志上。

位宽与指令位数

位数大小是计算机物理尺寸的主要因素。 在Minecraft中,从1位一直到32位的机器已经被成功构建出来。 常见的字大小的组合:

数据 命令
4 8
8 8
8 16
16 16

数据字符

计算机在任何特定时间可以操作的信息量代表了计算机的数据字大小。

在数字二进制中,计算机的数据字大小(以位为单位)等于计算机主总线中通道的宽度或数目。

数据字通常表示整数,或编码为二进制数字模式的整数。

最大大小的数量可表示的二进制整数编码是2 ^数据字宽度在位- 1。

一些常见的整数数据大小是:

最大可表示的数量 所需的字节数
1 ( 2 ^ 1 - 1 ) 1
7 ( 2 ^ 3 - 1 ) 3
15 ( 2 ^ 4 - 1 ) 4
255 ( 2 ^ 8 - 1 ) 8
65535 ( 2 ^ 16 - 1 ) 16
4294967295 ( 2 ^ 32 - 1 ) 32

数据字大小还决定了可以由计算机的ALU(算术和逻辑单元)处理的数字的最大大小。

命令字

计算机完成一条命令所需的数据量代表计算机命令字大小。

计算机的命令字大小通常是其数据字大小的背书,这有助于在程序执行期间检索命令时最小化存储器未对准。

计算机的设计

命令集架构

状态

内存是一系列的位。在Minecraft中,尽管曾经成功创造过32位和64位[1]计算机,但是通常情况下内存占8位或16位。每一位都是两种可能的状态中的一种:开或闭。而内存就是一系列的开和闭,用于完成特定的任务。

信号

现实世界计算机使用二进制,一系列的1和0。“1”表示“开”和“0”表示“关”。在"Minecraft,最好的体现是红石:有信号意味着“1”,没有信号表示“0”。然而,根据距离红石从内存存储,它是“0”可以是任何信号强度从0到14。你也可以设计,使“1”信号强度从1到15。

我们常规的十进制是一种以10为基数的数字系统。在电脑中使用的数制——二进制,则是以2为基数。为了比较两者,我们看一下两位数。在十进制中,左边的那一位是十位。在二进制中,则是“二位”。比如在十进制中,“10”表示“十”。而在二进制中,“10”表示“二”。有两种常用的十进制转二进制的方法:

最高位优先:这种方法需要一点直觉。我们以42为例。首先我们找(小于等于42的)最大的2的幂(“2的幂”就是如32 [2^5] 或65536 [2^16])。在这个例子中,是32。然后我们用例子中的数字来减它,42-32=10。那么最左边的一位就是“1”。随后我们继续找下一个2的幂,看它是否小于等于当前的数字。对于这个例子来说,下一个是16,16并不比10小,所以接下来这一位是“0”。一直找下去直到数字为0为止。无论二的幂是小于还是等于当前的数字,都要减掉它,并且记下一位为“1”。否则下一位就是“0”。就我们的例子来说接下来就是 8<10-->10-8=2-->"1" 4>2-->"0" 2=2-->2-2=0-->"1" 1>0-->"0" 因此最终42的二进制表示就是“101010”。不错。

最后是最低位:这个方法不需要记忆许多2的指数。相反,它重复将数字除以2,使用商作为下一个被除数,余数作为二进制位。 但请记住,此方法从右到左写入二进制数,而不是像前一种方法一样从左到右写入。 让我们重用我们的例子,42: 42/2=21 r 0 (最右边的数字是0) 21/2=10 r 1 (向左边一位的数是1) 10/2=5 r 0 (向左边一位的数是0) 5/2=2 r 1 (向左边一位的数是1) 2/2=1 r 0 (向左边一位的数是0) 1/2=0 r 1 (向左边一位的数是1)

商数为0,所以我们停止。 这给了我们二进制数“101010”。与之前的方法相同。

过渡

命令

功能本质上是由计算机命令构成的,命令的例子包括:

  • 加、减、乘、除
  • 从RAM/ROM/第三存储器的读/写
  • 读取和写入数据到内存
  • 分支的其他部分代码
  • 比较寄存器
  • 计算一个逻辑函数 (NAND,NOR,NOT etc.)

命令可以被编程到内存,从ROM加载或直接通过一个拉杆或按钮激活。每条命令都有它自己的特定的二进制串分配(比如0000=从寄存器加载数据,0001=A加B,等),并且可能需要其自己的二进制到十进制或二进制到BCD到十进制编码器和总线到ALU或寄存器。

归类

抽象

映射

符号
数字

符号可以用红石灯或者活塞的推拉方块产生凸凹起来显示:

注:如果用红石灯的话不要用黄色的方块做面板,不然不容易分辨。

功能

形式化

可计算性
变量

变量是数字、字符串、字符(套)或布尔值(真/假)存储在RAM中的空间。例如,布尔值可以用来保存信息如果程序已经达到某种状态。以下信息需要保存一个变量:名称,类型(数字、字符串或布尔),和变量值。变量,顾名思义,改变。命令操作可以改变变量。在运行程序时创建变量,一旦程序结束,变量值会被从内存中删除。当一个程序重启,变量会被重置。


层次结构

内存

内存是储存您的程序数据的地方。 它是可更改的 (但它在计算机关闭后将会被删除),它也用于储存您计算机的数据。例如说,在一个从1开始计算的程序中,1就被储存在了内存中,从内存中加载出来的1被添加上原来的1便得到了2。

执行

语义

数据

数据是计算机处理的信息,使用二进制表示。

控制单元(CU)

机器架构

数据通道

Processing

算术逻辑单元(简称ALU)

1-bit 3 function ALU

ALU是计算机最重要的组件之一,在现实生活和Minecraft中。首先,你必须选择你希望能够实现的功能。大多数时候,这些都是加法、减法和一组逻辑选项。

与,或,与非,或者你所喜欢的。你必须建立单位和所有你想要的逻辑门和数学函数和选择哪一个的输出显示。

(数据)总线

用总线允许您的计算机的组件相互通信。

一条总线可以通过使用创建红石布线连接你的计算机的运算器,随机储存器,只读储存器,中央处理器和寄存器在一起,这样他们就可以互相之间发送数据。通常是重要的计划,建立你的电脑的组件,否则你创建总线过长,或者更糟的是,没有空间来创建总线,在这种情况下,您可以删除的组件并重建一个适当的位置,或者使用像WorldEdit移动组件到其他地方。

存储

Register

随机存取存储器

4byteRAM default

随机存取存储器又称RAM,是程序使用的一种存储器,具有易失性。易失性是指当电源断开时,它将丢失信息。大多数情况下,在Minecraft中内存数据不会失去,所以最简单的方法就是使用d-触发器来添加读写功能。

二级存储器

这相当于HDD和SSD。下面介绍一种非常紧凑的存储技术,要涉及到红石比较器,能够存储高达1KB的实际数据大小。

https://www.youtube.com/watch?v=1zE_XZLTDBw

三级存储器

第三,也是最后一点,是第三级内存,它需要大量的时间来读/写,牺牲速度但可以存储大量信息。在现实世界中,三级存储器使用的是一种老式的挂载内存的机制,而且现在也很少使用了。在Minecraft中,这种系统要用潜影盒来完成,潜影盒中的方块必须由排序系统进行排序,以表示某种形式的数据。由于这些工作需要大量的比较器和大量的时间,所以读/写速度相当慢。然而,利用某些mod可以加快游戏tick的速度并消除这个问题。这用于存储长期数据,这些数据需要在程序开始时加载。相当于一台真正的计算机的机械硬盘或固态硬盘。

机器状态

程序计数器

程序计数器用于告诉CPU应该运行哪行代码。在每个时钟周期,解码器将访问这个计数器来获取下一个要执行的命令。一些命令会比另一个访问不同的数据量,或任何数据,因此解码器将适量增加程序计数器的下一个命令。使用的计数器也跳转命令控制程序流。   

控制路径

处理

控制单元

File:Redstone Computer Control Unit.PNG

总线

File:Redstone Computer Control Busing.PNG

硬盘

File:Redstone Computer Tertiary Memory.PNG

固体方块可以被红石中继器强冲能,强充能方块可以点亮周围的红石粉。透明方块却不可以被冲能,这就是一个简单的硬盘。

程序内存

File:Redstone Computer Program Memory.PNG

程序内存,最基本,ROM(只读存储器)。ROM是最常用的远程执行一系列任务(如一个程序,因此得名)。它可以用来在用户控件(如图片)或每一行之间的时钟和足够的延迟2不是在同一时间。最简单、最高效的设计之一是一个图中,这可能是也可能不是加上解码器。它可以很容易地扩大,这是另一个优势。

机器状态

File:Redstone Computer Machine State.PNG

程序计数器

Redstone Computer Program Counter

时钟

File:Redstone Computer Clock.PNG

时钟同步组件或使用时间。(Minecraft)在大多数情况下,可以避免使用但有时它是计算机的功能所必需的。它基本上可以由红石火把链接成一条线/圈的非门(奇数建议或者你的输出必须“取反”),或者中继器,如上图所示。

提示

  • 你也可以使用一些像是WorldEdit的模组
  • 如果你在生存模式没有太多的红石中继器 你可以用两个红石火把代替
  • 利用颜色进行分区(例如用蓝色羊毛建造RAM(随机存取存贮器),黄色羊毛建造ALU(算术逻辑部件运算器)等)
Advertisement