Minecraft 编程雅思考6.5 难度有多大大

&>&&>&&>&&>&正文
技术宅惊世之作 《我的世界(Minecraft)》如何打造计算机
12:24:16 来源:人人网 作者:季文瀚 编辑:暗影猫 浏览:loading
  对于用《我的世界》打造计算机这一消息相信大家已有所耳闻,下面小编便为大家找来的详细教程,有兴趣的同学可以一试。如果看不懂,全当我们对于逆天技术宅的膜拜吧。
  (文章来自季文瀚——《基于Minecraft实现的计算机工程》)
  日更新,更新内容为超越函数计算器和CPU指令实现部分。
  断断续续终于做好了视频和介绍,就用日志一起发出来了。工程还未完工,视频展示计算器功能,电子表和字符显示器时序控制。
  视频建议看的时候点右下角设置选超清+全屏观看,选标清既不清楚有时候还会卡,高清也看不清细节,就算是超清也比我上传的原视频缩了。优酷60秒的广告还要缩画质满地节操真心抱歉。。。
  本工程基于一个叫Minecraft的游戏,我使用的版本是1.4.7。之所以使用一个游戏作为平台,是因为这个游戏可以做到实时运行超大规模集成电路模型(大于10000个逻辑门)并且提供壮观的可视化效果(三维数字电路)。
  半年前我刚接触这个游戏的时候,想做一个简单的计算器。国外玩家两年前已经有人做到了,基于整数ALU和直连总线的机器。我开始规划做一个16bit的计算器,输入输出线路一样是直连的,也就是说这个计算器完全是专用的芯片,连单片机的等级都不到。后来我发现这个游戏可以实现更加复杂的东西。原因很简单,游戏只提供了“或”“非”逻辑电路,但理论上“或”“非”门可以表达一切逻辑。同时游戏提供的基于活塞机械的断路,继电器的延时时序特性以及继电器的锁存特性会让很多高级触发器成为可能。换句话说,FPGA能实现的东西这个游戏基本都能实现,区别在于这个游戏提供的是一个纯粹数学模型化的信号系统,元器件是简化的模型而不是现实中根据半导体材料设计的具有一定特性的电子元件,在线路连接的拓扑结构上也和现实中的电路不同。
  在造计算器到一半的时候我打算改单片机,也就是具有“图灵完备性”的简单计算机,他可以执行一切计算机程序。我规划了指令集架构,储存器架构和指令发射方式等。随着除法器,可读写储存器,缓冲队列等重要电路结构的设计成功,我开始有了一个大胆的设想,尝试实现一个具有流水线结构,总线结构,溢出中断,堆栈,标志位寄存器,基本的分支预测和乱序执行等现代高级计算机技术的16bit RISC CPU以及一个附属的包含超越函数的单精度浮点处理器32bit FPU(目前只规划作为计算器使用)。
  工程现在进展顺利,只是因为工程量巨大进度较慢。我已经将16bit整数计算器改成了完全时序逻辑电路控制,并且有溢出判断的计算器。这在全世界Minecraft红石电路玩家里应该是首次。这个计算器作为片外系统借用CPU的ALU部分进行运算并经过总线传输数据。目前CPU的ALU,主储存器,和寄存器等EU部分已经完工,内部环状总线已经完工,CU部分,也就是最繁琐的部分正在建设中。而FPU部分已经完成了加法器,乘法器,三角函数运算单元,开方运算单元。现在整个工程大约有10万门以上的电路。
  目前不可逾越的困难是游戏的基准单位延时t是0.1秒,加载地图最大范围是长宽1024m,高256m的范围,这就限制了计算机的运算速度以及造出来的硬件规模。特别是储存器,我的片上程序储存器只有1kb,这对于现实中的储存器容量而言太小了。所以想利用这有限的空间做一个汇编编译器,简易的操作系统实在是太困难。
  对于工程的介绍我分为6部分:信号系统,硬件单元和硬件算法,储存器架构和流水线,指令集架构,总线和时钟,图形显示原理。我尽量用非专业的语言来介绍,不可避免会用一些术语。
  本工程需要的专业知识基本就是微机原理,数字电路,少许编译原理和计算机图形学。
  先贴一张CPU架构图
  其中每一个方框都代表一个或若干个硬件单元,小一点的大约一两百个门电路,大的有几千个门电路。架构图基本是按照实际距离做的,在工程上方俯视看到的结构和架构图可以一一对应。下面的俯视图对应架构图的右半部分(Data Bus以及其围住的右下部分。
  PS:目前决定把乱序执行模块取消。
信号系统:
  构成超大规模信号系统的逻辑等级基本如下:
  基本信号元件→基本逻辑门→复杂逻辑门→简单功能结构:组合电路,时序电路,触发器→复合功能结构→硬件功能单元→硬件功能模块→计算机
  或门,非门→与门,异或门→全加器,信号长度转换器,多态选择器,储存器单元,译码器单元,求补码单元,移位器单元→可读写储存器,译码器,加法器,移位器,时钟发生器→加减法器,乘法器,除法器,可读写储存器阵列,寄存器,程序计数器→总线,ALU,CU→计算机
信号元件:
  先从逻辑底层开始介绍。这个游戏用于传输信号的原件称为“红石电路”,是在游戏地下的矿藏里挖出来的红石矿物加上各种材料合成出来的东西。最主要的原件只有四个,如下图:
  从左到右依次为:1.继电器/二极管/锁存器/延时器(同时兼有四个功能)2.红石火把(高电平信号源)3.红石粉(红石导线)4.粘性活塞(可推拉的开/通路元件)
  这些元件可以被放置在其他实体方块上,方块是这个游戏所有东西占据的空间结构,每一个物品占据一个正方体空间,将一个方块空间占满的是实体方块,像下面几个图中蓝色的,紫色的都是实体方块。长度的计量单位游戏中每一个方块的边长是1米,玩家身高大约1.7米。本工程占地大约600x600x200米
  红石火把和继电器:红石火把给邻近的同一高度的方格输出高电平信号,红石粉和继电器都会被激活并传递信号,如下左,而继电器同时为二极管,所以是单向导通的,如下右。继电器亮了表示信号通过,不亮的那个是因为方向反过来所以信号不通过。
  信号不是无限传输下去的,每传输15个方格就需要1个继电器延续信号,如下左,可以看到距离红石火把越远的红石导线亮度就越暗,当超过15格还没有继电器的时候就会熄灭。同时每个继电用的电路元件会花0.1秒来反应,并不是一瞬间就继电。游戏中0.1秒即为最小的时间单位,这对应为数字电路里的一刻时间“1t”,一切时序逻辑都是建立在0.1秒这个最小单位上的,这也正好对应现实电路中电子传递速度导致的信号传递延迟。继电器有延时器的特性,可以选择1,2,3,4四种档位,分别对应0.1秒,0.2秒,0.3秒,0.4秒的延时(反应时间),也就是说默认的最小0.1秒反应时间可以延长到0.4秒。如右下,靠左上的继电器档位在1,靠右下的档位在4。这一特性可以用于用尽量少的器件累积长时间延时。比如5个4档继电器串联时信号输出就将延迟2秒。
  另外一个重要的特性是,只要信号输入时间够长,继电器将累积一定的信号,累积值和输入时间相等,最大累积值和档位延迟时间相同。比如4档继电器输入端输入信号0.1秒,则0.4秒后继电器输出信号,长度为0.1秒,当输入端输入0.3秒信号,则0.4秒后继电器输出信号,长度为0.3秒。当输入0.4秒信号及以上,输入端关闭后,继电器输出端将输出0.4秒信号。
  像下图那样,红石火把发出信号,之后蓝色方块上每15格继电一次。第二个继电器到第一个橙色方块正好是第16格,此时没再加继电器,所以橙色两个方块上的红石导线熄灭了。每15格的传输线需要一个继电器,所以一个单位传输线路最长距离是15格的线+1格的继电器=16格,16格正好是二进制数,游戏开发者选这个数肯定是为了方便编程。
更多相关资讯请关注:
友情提示:支持键盘左右键“← →”翻页
用手机访问
扫一扫,手机浏览
相关新闻:
游戏制作:Mojang Studio、Microsoft
游戏发行:网易游戏
游戏平台:PC/Xbox360/XboxOne/PS3/PS4/PS Vita
上市时间:
游戏特色:
又是一个有生之年系列!由“我的三体制作组”利用游戏《我的世界》制作的动画《我的三体》终于更新到了第二季第二集。
《我的世界》高自由度的玩法使得玩家中涌现出各种大神,打造出一个又一个令人叹为观止的世界。不过大部分作品都是还原某个游戏或影视作品中已经存在的场景,而今天要介绍的这位玩家则是打造了一个纯原创的震撼王国。
在《我的世界》10月4日的更新内容中,就将带领我们进入中国的神话领域,感受“方块版”的仙侠元素。
玩家Alan Becker将这个世界带到了游戏中来,在《我的世界》中重塑了属于宫崎骏的动画天堂,近日Alan的新作品《我的世界》版《龙猫》正式完工,放出了宣传片。
喜欢《守望先锋》的玩家一定对好莱坞这张地图不陌生。这张地图的机制是先占领要点后运载目标,出场率很高。今天要给大家带来国外团队Team GBF用《我的世界》打造的这张地图。整个地图一砖一瓦都是玩家团队一点点打造出来的,甚至对内部也进行了还原,非常精细。
近日,国外大神公布了一段用《我的世界》游戏画面制作的视频,里面没有复杂的场景,只是沿一条轨道快速向前行进,而整个世界的画面都是扭曲旋转的。
国人团队@NLT_工作室出品了新的《我的世界》中世纪作品——《忒伊亚》,其规模的宏大用震撼来形容都不够。
今天,微软宣布《我的世界》Windows 10版本正式推出支持Oculus Rift的版本。
国内《我的世界》创造达人@青知Vision 则别出心裁,利用新的手法打造出了我的世界版《盗墓笔记》的动态海报场景。
一位ID名为MrSquishyYT的玩家在Reddit发帖,展示了自己费尽心血的成果:他总算能《我的世界》游戏中玩《口袋妖怪:火红》了。
虎牙直播第二届YSL《我的世界》建筑直播大赛正赛打响,脱颖而出的A、B两组首轮亮相,用完美表现为正赛拉开帷幕,一起来欣赏他们的作品吧!
《我的世界》玩家总是能带来不一样的惊喜,这次我们要介绍的是一位被日媒gamespark报道了的《我的世界》版“时代广场”。
近日有国外玩家以《纪念碑谷》为灵感,在《我的世界》中重现了游戏的城堡。
这次要介绍的是以《旺达与巨像》为灵感建造的两只巨像,作者Divici曾经打造过《我的世界》版的《霍比特人》。
我们之前曾经报道过有关VR版本《我的世界》的新闻,如今游戏发布了截图,来体会一下像素游戏保持原汁原味的风格。
《我的世界》作为游戏界的膝盖收割机,近日用一张截图再次让很多国内外玩家跪服,无论是在reddit还是微博推特上,都被疯狂转发。
一位《我的世界》外国画伯在游戏里花了六个小时制作了一副超现实主义画像,将它放到了一辆车上展示,起名为“Carry The Impossible”,画的内容是一座燃烧中的教堂,或许还带着点信仰意味?
今天要介绍的这位《我的世界》大神lukep323也是其中的一员,他在《我的世界》中打造了一座芝加哥城,用1:4的比例还原了整座城市的建筑。
一位玩家在《我的世界》里建造了一座城堡,他将《超级马里奥64》中的城堡用小方块搬到了《我的世界》中来,让我们来看看别人的世界是怎样打造奇迹的?
《我的世界》能玩《口袋妖怪》了!请注意,本次可不是一款《口袋妖怪》Mod,而是真的在“玩”《口袋妖怪》。
综合热点资讯
单机游戏下载
游民星空联运游戏扫码下载官方App
学习过该课程的人还学习过:
其他联系方式
所属系列课程
网易公司()旗下实用技能学习平台。与优秀讲师、专业机构、院校合作,为您提供海量优质课程,以及创新的在线学习体验,帮助您获得全新的个人发展和能力提升。
关注我们:
& 网易公司 版权所有
编程一小时( MineCraft 我的世界),浙江豆爸,“编程一小时”(The Hour of Code) 是一个全球性活动,有来自全球180多个国家、数以千万的学习者参加。任何人在任何地方都可以组织“编程一小时”活动。教学内容长1小时,有30多种语言支持。学习此课程无需编程经验。
这款基于游戏《我的世界》(《Minecraft》)的编程教程,是由code.org发起,得到比尔·盖茨、扎克伯格、奥巴马等达人政要推荐的全球性活动“Hour of Code(编程一小时)”的一部分。
我们团队无论在线上,还是在线下活动中,发现不论年纪大的,不的,男的,女的,都喜欢这种基于游戏式编程,对于问题求解的非常感兴趣。
编程的思维训练,问题求解能力锻炼,请跟我们一起来吧。
适用人群:4-100岁,对信息世界的编程感兴趣的人!从编程的角度来看,Minecraft 是怎么样设计的? - 知乎1810被浏览133328分享邀请回答public Chunk provideChunk(int x, int z)
// 生成一个区块专属的伪随机种子,这个种子只跟x和z的位置有关
this.rand.setSeed((long)x * L + (long)z * L);
ChunkPrimer chunkprimer = new ChunkPrimer(); // 封装了一下方块设置的操作
// 生成低分辨率的生物群系、密度图、方块,后面会讲
this.setBlocksInChunk(x, z, chunkprimer);
// 生成标准大小的生物群系
this.biomesForGeneration = this.worldObj.getBiomeProvider().loadBlockGeneratorData(this.biomesForGeneration, x * 16, z * 16, 16, 16);
// 按照生物群系替换掉高度图里面的普通方块
this.replaceBiomeBlocks(x, z, chunkprimer, this.biomesForGeneration);
// 前面生成选项里面看到的各种设置,要不要洞穴之类的
if (this.settings.useCaves)
this.caveGenerator.generate(this.worldObj, x, z, chunkprimer);
if (this.settings.useRavines)
this.ravineGenerator.generate(this.worldObj, x, z, chunkprimer);
if (this.mapFeaturesEnabled)
if (this.settings.useMineShafts)
this.mineshaftGenerator.generate(this.worldObj, x, z, chunkprimer);
if (this.settings.useVillages)
this.villageGenerator.generate(this.worldObj, x, z, chunkprimer);
if (this.settings.useStrongholds)
this.strongholdGenerator.generate(this.worldObj, x, z, chunkprimer);
if (this.settings.useTemples)
this.scatteredFeatureGenerator.generate(this.worldObj, x, z, chunkprimer);
if (this.settings.useMonuments)
this.oceanMonumentGenerator.generate(this.worldObj, x, z, chunkprimer);
// 构造区块对象,把方块和生物群系数据填进去
Chunk chunk = new Chunk(this.worldObj, chunkprimer, x, z);
byte[] abyte = chunk.getBiomeArray();
for (int i = 0; i & abyte. ++i)
abyte[i] = (byte)Biome.getIdForBiome(this.biomesForGeneration[i]);
// 生成基础的天空光照(见前文)
chunk.generateSkylightMap();
重点的setBlocksInChunk函数:public void setBlocksInChunk(int x, int z, ChunkPrimer primer)
this.biomesForGeneration = this.worldObj.getBiomeProvider().getBiomesForGeneration(this.biomesForGeneration, x * 4 - 2, z * 4 - 2, 10, 10); // 这是一个低分辨率的生物群系表,用在generateHeightmap里面的
// 生成密度图,原文虽然写的是高度图,但是实际上是密度图,可能是fml的人理解有问题
this.generateHeightmap(x * 4, 0, z * 4);
// 这里往下的这么一大段都是在插值,密度大于0的填上石头,低于海平面而且不是石头的
// 填上海水,别的都是空气。
// 话说这段真是乱七八糟,一堆magic number,估计fml的人也懒得看懂,
// 既没加注释也没改变量名。。。
for (int i = 0; i & 4; ++i)
// 为什么是33和5呢? 33=32+1, 5=4+1
int j = i * 5;
int k = (i + 1) * 5;
for (int l = 0; l & 4; ++l)
int i1 = (j + l) * 33;
int j1 = (j + l + 1) * 33;
int k1 = (k + l) * 33;
int l1 = (k + l + 1) * 33;
for (int i2 = 0; i2 & 32; ++i2)
double d0 = 0.125D;
double d1 = this.heightMap[i1 + i2];
double d2 = this.heightMap[j1 + i2];
double d3 = this.heightMap[k1 + i2];
double d4 = this.heightMap[l1 + i2];
// 于高度y方向线性插值
double d5 = (this.heightMap[i1 + i2 + 1] - d1) * 0.125D;
double d6 = (this.heightMap[j1 + i2 + 1] - d2) * 0.125D;
double d7 = (this.heightMap[k1 + i2 + 1] - d3) * 0.125D;
double d8 = (this.heightMap[l1 + i2 + 1] - d4) * 0.125D;
// 于x和z方向线性插值
for (int j2 = 0; j2 & 8; ++j2)
double d9 = 0.25D;
double d10 = d1;
double d11 = d2;
double d12 = (d3 - d1) * 0.25D;
double d13 = (d4 - d2) * 0.25D;
for (int k2 = 0; k2 & 4; ++k2)
double d14 = 0.25D;
double d16 = (d11 - d10) * 0.25D;
double lvt_45_1_ = d10 - d16;
for (int l2 = 0; l2 & 4; ++l2)
if ((lvt_45_1_ += d16) & 0.0D)
primer.setBlockState(i * 4 + k2, i2 * 8 + j2, l * 4 + l2, STONE);
else if (i2 * 8 + j2 & this.settings.seaLevel)
primer.setBlockState(i * 4 + k2, i2 * 8 + j2, l * 4 + l2, this.oceanBlock);
d10 += d12;
d11 += d13;
感觉这一段还要解释一下。x和z不是16,32这样的世界坐标,而是区块坐标,是世界坐标的16/1,也就是区块(1, 2)代表了世界坐标上面的(16,32)到(31,47)的矩形区域。这里首先生成了一个低分辨率的生物群系,长宽是10*10,是因为接下来要用的密度图长宽是5*5。然后生成密度图,这个待会儿也会讲。之所以说是密度图而不是高度图是因为它是三维的5*33*5,而不是二维的结构,所以只能称之为密度。接下来是线性插值。一个区块是16*256*16,而为了让密度更为平滑,这里把密度图的长宽各放大4倍,高度放大8倍,再做线性插值就会比较光滑不会变化特别突兀。有人要问,5*4不是20吗?33*8不是264吗?其实因为5*33*5多出来的一圈是不用的,而且插值需要两个值才能计算,所以四个采样点其实需要5个数据,33也一样是这个道理。再浅显一点来说,密度图里面的0,1,2,3,4(java数组从0开始)对应的是区块x或z轴里面的0, 4, 8, 12, 16,既然我们要计算位置为13,14,15的方块,那就得用12和16对应的3和4来插值。插值的过程从循环变量为j2的那个循环开始,0.125就是8分之1,因为高度上放大8倍,后面的0.25也是因为放大了4倍,lvt_45_1其实可以写得易懂一点的,也是一个插值变量,跟前面的d1,d2,d3,d4,d10,d11是一样的,只不过mojang的程序猿为了装逼特地写了这么个东西罢了。。所以说代码质量差不仅在于架构,还在于其中各种细节的写法,像这种绝对就不算优秀的代码。先到这里吧。。还有好多。。各位先看着哈。。--------------------------------------------分割线-------------------------------------------------总结全文,深化主旨,首尾呼应:Minecraft是个好游戏,但代码写的确实不咋地。我最初接触MC还是13年,那时候大部分还在用1.4.2或者1.5,当然,都是盗版。一开始只是玩单机,打生存,搭房子,有时候开创造玩玩红石电路,特别喜欢一个人晚上独自边打MC边听他的bgm。C418的歌,很宁静,让人很放松。后来基本上大部分玩法都玩儿遍了,也不怎么愿意去花功夫做那种超大的红石电路或者建筑之类的,总想着找点别的花样。于是我装了Forge,下了很多mod,比如IndustrialCraft这种大名鼎鼎的,还有一些辅助性的mod,比如1.6.2之后就停止开发的SPC(Single Player Command 卖安利)。SPC是模仿WorldEdit的担任命令行mod,就是各种批量编辑,一个人搭建筑非常方便(因为WorldEdit WE只有多人能用,SPC可以单人模式用)。结果换1.7.2之后SPC不支持了,于是就萌生了自己开发一个的想法。(好吧最后还是流产了,当时水平不够做出来的性能很差,现在有能力做了又没了当初那种激情)又因为刚好学java,听说MC也是用java写的,所以就网上找教程写mod。我还记得14年的时候架着100K不到的梯子屁颠屁颠地装fml的时候,去maven central仓库上下东西动不动就停住了,结果一晚上都没装好。国内(哪怕到今天)都缺少真正有质量的mod开发教程,特别是中文的基本没有。贴吧上曾找到过一篇讲mod开发环境配置的,不过也止于1.6.2,到了1.7之后FML的整个API变了好多,原来的教程都用不了了。后来在网上找到了一篇文章: ,是MC最早的开发者Markus Persson(马库斯·泊松,网名notch)的个人博客,还有一篇讲述他的地形生成算法的博文:大概翻译一段(水平有限):In the very earliest version of Minecraft, I used a 2D Perlin noise heightmap to set the shape of the world. Or, rather, I used quite a few of them. One for overall elevation, one for terrain roughness, and one for local detail. For each column of blocks, the height was (elevation + (roughness*detail))*64+64. Both elevation and roughness were smooth, large scale noises, and detail was a more intricate one. This method had the great advantage of being very fast as there’s just 16*16*(noiseNum) samples per chunk to generate, but the disadvantage of being rather dull. Specifically, there’s no way for this method to generate any overhangs.在Minecraft最早的版本中,我将一张2维perlin noise图作为高度图来确定世界的形状。或者说,好几张perlin noise图。一张是整体海拔,一张是地形的粗糙度,一张是小范围的细节。对于每一列方块,其高度是 (海拔+(粗糙度*细节))*64+64。 海拔和粗糙度的图都是连续光滑的,大尺度的噪声图,而细节则更加参差不齐。这个生成方式有一个巨大的优点就是奇快无比,因为对于每个区块,只不过需要生成16*16*(噪声图的数量) 个采样点,然而缺点就是地图相当单调无趣。更重要的是,这种方式根本生成不了悬崖。So I switched the system over into a similar system based off 3D Perlin noise. Instead of sampling the “ground height”, I treated the noise value as the “density”, where anything lower than 0 would be air, and anything higher than or equal to 0 would be ground. To make sure the bottom layer is solid and the top isn’t, I just add the height (offset by the water level) to the sampled result.于是我改成了一种有些相似的、基于3维perlin noise的生成方式。我并不是对“地面高度”进行采样,而是将这个噪声的数值看做是“密度”(因此我说前面代码中应该是密度图而不是高度图 ——译者注),其中密度小于0的点都是空气而大于等于0的会成为大地(其实就是实心方块 ——译者注)。为了确保地图底端是地面而顶端是空气,我便把采样值加上采样点的高度(海拔高度)。(其实应该说是“减去采样点的高度”更易懂,因为大于0的才是方块,而水下的高度是负值 ——译者注)Unfortunately, I immediately ran into both performance issues and playability issues. Performance issues because of the huge amount of sampling needed to be done, and playability issues because there were no flat areas or smooth hills. The solution to both problems turned out to be just sampling at a lower resolution (scaled 8x along the horizontals, 4x along the vertical) and doing a linear interpolation. Suddenly, the game had flat areas, smooth hills, and also most single floating blocks were gone.不幸的是,我立刻碰上了可玩性和效率两方面的麻烦。因为有大量的点需要被采样所以效率很成问题,又因为缺乏大片的平地或平滑的山丘而缺乏可玩性。这两个问题共同的解决方案最终定为了这样:用一个更低的分辨率去采样噪声图(横向8倍,纵向4倍)(代码里面是横向4倍纵向8倍,可能跟后来的代码改动有关 ——译者注)并且进行线性插值(见setBlocksInChunk函数 ——译者注)。突如其来地,世界上有了平原、丘陵,而且单独浮在空中的诡异方块中的绝大部分也都消失无踪了。(其实还有很多了啦 ——译者注)这激起了我浓厚的兴趣。于是我把长长的代码打印下来,8号字体,一面3列,足足十几张纸,每天一有空就看代码,读代码,用笔做注释,并且为我觉得命名不当的部分想一个更好的名称。到现在这些还藏在我的书桌里面。这些东西百度根本搜不到,google也很少有结果,而以fml对这些代码的注释程度来看他们根本懒得去读这些既混乱又不必要读懂的代码。当然后来还是不了了之了。我自己也仿造过MC,当时就是完全追星似的疯狂模仿,用的java,跟MC一样的LWJGL库,同样(好吧我承认这么做有盗版的嫌疑)的纹理,几乎相同的文件格式、区块大小、渲染原理、(基于notch文章的)地形生成、体系架构,几乎就是我前面写的这么多的一个自己的重现。我甚至还学习MC混淆了编译后的代码。可笑的是,迫于当时的水平,效率竟比MC原版还要低。最后开发进程是因为我U盘的丢失而终止的,源码自然也丢了,只剩一份速度奇慢的编译版本,下载地址:,有兴趣的自己下载来玩玩吧。今年想过要重制,结果忙了一个夏天又泡汤了,现在想来总觉得有点可惜。后来被朋友忽悠着去打了一段时间MC服务器,也买了正版,不过服务器没有打过一个月的,基本两三个星期就崩掉关服不开放了,也不知道是我的问题还是整个现状都这样。(我真的没有干过坏事啊!)据说国内开一个服很快就会有黑客来勒索要钱否则就DDoS攻击(Distributed Denial of Service分布式拒绝服务攻击,用大量肉鸡的流量淹没对方,让对方或因为过高的流量费用而关闭服务,或因为过低的响应速度而降低服务质量到一个不可接受的程度),也不知道是不是真的,反正崩了好几个服,打拼好久的家园东西都没了,也就不打了。最近确实玩的不多,也就偶尔休息的时候像以前那样,搞搞建筑,搭搭红石电路之类的,都是单机玩,一方面没空,一方面也有点享受那种独自一人的感觉和C418的背景音乐。我知道这段算不上问题的“从编程的角度来看”,不过写了前面这么多,也使我回想起来以前发生过的不少。要不是这个答案,也不知道这段往事会被封存到什么时候。就借此机会,一吐为快吧。希望大家不必计较,并且欢迎任何技术上的讨论。以上。各位看官看完记得点个赞再走啊。。。谢啦。。。92196 条评论分享收藏感谢收起}

我要回帖

更多关于 专升本英语难度有多大 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信