黑小麦种植植是南北方向一列种还是东西方向种mc

扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
下载作业帮安装包
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
一种小麦磨成面粉后重量减轻15%,要得到m千克面粉,需要小麦多少千克
A.(1+15%)mB.(1-15%)mC.
作业帮用户
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
为您推荐:
扫描下载二维码微信:doyo_game
我的世界-1.8版自动种植小麦塔建造图文教程
  自从mc升级到1.8版本后 原版小麦自动化 可以实现自动种植。
  从图能看出 小麦塔自动种植的核心就是农民伯伯
  1.8更新后 村民中 农民能够自动收割作物 并用所获得的种子进行补种 值得注意的是 只要是耕地(村庄天然生成的耕地or玩家的创造的耕地)农民都会在手头有种子的情况下进行补种 还有一点是农民能够捡起玩家丢弃的种子(小麦种子 马铃薯 萝卜)
  利用这个特性 我们可以通过丢种子给农民 让他们帮忙补种 我们要做的就是让农民完成补种工作后 等作物成熟 然后收割
  自动种植的小麦塔也算是1.8前小麦塔的进阶 既然是进阶 那首先你得有一个小麦塔
  (9x9的耕地 中间水 你懂的)这是一个被大众广泛使用的小麦塔单层基本框架
  首先是作物的收割装置
  这里我使用的是发射器 一是省空间 二是好看 (注意的是一侧是不能布线的) 就这样收割装置算是撸好呢 完全没有技术含量
  接下来就是自动种植的部分 大致思路是建造一个储存农民的空间 确保农民不会把成熟的作物收走 但是一般而言 农民不会在补种完毕后乖乖进入玩家所设定空间 这里需要巧用村民的一个特性
http://www.doyo.cn/article/182080
阅读本文后,您的心情是:(选择后可查看结果)
顶395踩228
今日关注游戏&p&很久以前,世界一片圆滑细腻。&/p&&p&Notch说:要有方!于是就有了方。&/p&&p&Minecraft并不是第一个沙盒游戏(虽然它资格够老),但它是“3D沙盒游戏里面要求最低的”,同时也是“小型沙盒游戏里唯一一个3D的”,这就是先声夺人,同时满足了3D和低配的需求。&/p&&p&MC作为一个3D游戏,难得抛弃了现有的物理学,建筑学,材料学,动力学,天文学,以气死牛爵爷的代价,让玩家可以专心的实现内心庞大的建筑梦想——哪个孩子没有梦想做过公主王子,生活在三亿平方米的宫殿里?又有几个孩子没有梦想过修筑巨大的铁路网,修到那雪域高原,一日看尽长安花?&/p&&p&就这样,数字化的乐高开始进入大家的视野。&/p&&p&当版本演进到beta1.8的时候,才刚刚有创造模式,有村庄,地牢等结构的生成,连床都没有,然后一群放荡不羁爱搞事的玩家“轻而易举”地扒开了notch的源码,并往源码里插了点东西——这就是MCP,也就是后来的forge的开端,同时出现了为大家所熟知的工业mod(注意,IC的logo上的2并不是版本2,而是平方)。&/p&&p&Dinnerbone也在前人的基础上,搞出了bukkit这个最早的服务端,MC开始在MCP和Bukkit这两个玩家强行插入的API上蓬勃发展起来,并由大量的模组和插件(插件也算是一种模组)续着命,一直火到今天。&/p&&p&建筑作为有效的切入点,模组社区提供了强大的生命支持,为MC的良好发展打下基础。&/p&&p&当然,Mojang说到底是个独立公司,不会真的被野生开发者同人逼死官方,在此同时,notch也制作了红石系统,一个数字电路系统,这让玩家在游戏内部实现复杂机关和单片机成为可能。&/p&&p&不要仅仅将红石看做是一个有无穷的演绎性的系统,同时它也是“对抗”模组的武器——即使不玩模组,玩家一样可以在原版中用宏伟的宫殿,复杂的电路系统找到慰藉。&/p&&p&随着beta阶段的结束,MC的三大支柱:建筑,红石,模组均已出现,虽然还没有完善,但是已经形成了对其他沙盒游戏的优势。&/p&&p&然后MC的生态蒸蒸日上,越来越多的生存特性被加入进来(例如附魔),使得纯生存玩法更加丰满,可以让玩家获得更逼真的体验(看着天上漂浮的石头块,这话还真没什么说服力啊),即使是不爱烧脑的玩家,也可以获得一段珍贵的回忆,比如和男女朋友联机撒狗粮什么的。&/p&&p&国内外一批批大神级的人物和资本力量纷纷涌入,为这个有着无限可能的游戏添砖加瓦。&/p&&p&国外:2005年创立的Curse原来就是一个投递各种游戏模组的网站(包括魔兽,老滚5),早在09年便很贴心地为大家推出了Minecraft Forum(MCF)这个网站,现已成为国外最大的MC讨论网站;MC推出1.0版本后,11年8月底开始有第一批模组上线Curse,作者可以根据下载数量获取报酬(现在的报酬是1000下载6美元),这提供了稳定的模组下载网址,也为作者提供了一定的经济来源刺激开发。令我惊讶的是,旅行地图(JourneyMap)是11年第一批上线Curse的模组之一,在同时期投递的模组中,只有它一个活到了今天——也让它成为了Curse下载量最大的MC模组。2016年该网站被Twitch(国外著名的视频直播网站)收购。&/p&&p&工业(IndustrialCraft)一直都是2.x.x,神秘时代(ThaumCraft)在劳模作者的更新下经常大改,改得不亦乐乎,MJ三元老(建筑BuildCraft,林业Forestry,铁路RailCraft)和红石力量(RedPower)已经崭露头角,并成为国内服务器的标配,它们的丰富内容(相信我,绝对不亚于原版的两大系统)还在深远地影响着MC,那些无良整合包作者不加个林业养蜂,BC装配台拖拖科技线累死几个人,都对不起他们锃光瓦亮的脑门。&/p&&p&说起来,那个时候组整合包的真的可以算作大神,因为在1.4以前(或许记忆有误,请指出),模组是要塞进MC的jar里面的,很容易因为ID冲突什么的就崩溃了,不过因为MC自身代码的问题,把依赖于它的MCP也变成了畸形儿,为MC做模组是个很蛋疼的事,一共也就那几个,捏着鼻子也就得了。&/p&&p&KingLemming(热力膨胀Thermal Expansion的主创,TeamCofh的组长,这个组的历史甚至可以追溯到90年代末)为BC写了个流体API,规定了一桶为1000mb,然后代码被forge整个拿走,对以后的流体度量进行了规定。&/p&&p&然后BC很久都没有进行更新,KL忍不住了自己写了个redstone flux API,没错就是那个被一些玩家和UP主咒骂的RF,由于开发友好受到了开发者的欢迎,并成为了大多数模组的能量单位,还衍生出了一批后续能量单位,比如tesla和forge现在采用的forge energy。&/p&&p&这时是1.6.4左右,模组三大能量单位EU、MJ、RF聚齐(别说魔法类了,且不说数量不算多,一个模组的能量就给自己一家用,很难分),出现了“现代意义”上的模组包,FTB(feed the beast)之类的专业整合包团队出现——他们手上掌握着MineTweaker,HQM之类的魔改游戏工具,可以有效地修改原版和模组的合成表,决定一个玩家在整合包里发展顺序,甚至不惜修改原作者的代码,并自己编写模组以达成整合包的效果——例如圈地插件FTB Utilities。直到1.7.10,模组发展到顶峰,这是后话了。&/p&&p&当然国外不只有模组这种东西——这就不得不提Hypixel这个国外占统治地位的小游戏服务器了,该服务器于2012年9月成立,现有21个小游戏,其中最有名的就是起床战争,声势浩大到甚至引起了网易的注意,网易代理国服MC时把它也叫上了。&/p&&p&国内:国内的开发者也是有一批的,虽然主要不在模组上;更多的是UP主,翻译者和教程作者,相对下游,注意,不是相对下流!&/p&&p&2010年,一个叫纸月的玩家(小号素履信游)创立了mcbbs,国内的MC专属玩家社区正式诞生,第二年此人成立HAYO Studio小组(现为开发与模组研究小组)。&/p&&p&与此同时MC有了自己的百度贴吧(我们称之为主吧),前任吧主忘却的旋律在10年制作了旋律启动器(已死),13年huanghongxun(黄鱼)制作了HMCL启动器(应用最广泛的一款),还有 &a class=&member_mention& href=&//www.zhihu.com/people/88e49d7f4c57ea10e5030& data-hash=&88e49d7f4c57ea10e5030& data-hovercard=&p$b$88e49d7f4c57ea10e5030&&@bangbang93&/a& 在同年制作的BMCL启动器,也是这个人搭建了重要的bangbang93下载源,为国内的三方启动器提供了更加高效稳定的下载,15年 &a class=&member_mention& href=&//www.zhihu.com/people/9835cbcb93e41b3b544a3c265861fed0& data-hash=&9835cbcb93e41b3b544a3c265861fed0& data-hovercard=&p$b$9835cbcb93e41b3b544a3c265861fed0&&@刘国庆&/a& 制作了BakaXL启动器,此外还有其他的一些启动器,容后补充。&/p&&p&2011年11月,TheRedPixel(TRP)小组成立,该组产出了大量令人惊叹的红石作品。&/p&&p&2012年7月,SkinCookie小组成立,该组主要立足于皮肤制作等美工创作。&/p&&p&2012年8月,霜露制作组(后改名为蒹葭制作组)成立,该组主要立足于建筑,地图和命令方块。//注:第一任组长猫小沫听上去是个妹子,也只是听上去。&/p&&p&2013年5月,上古之石小组成立,该组目前是mcbbs唯一一个十项全能组。&/p&&p&2013年6月,rom718(mcbbs现在的管理员之一)成立Cthuwork组,它有一个更加出名的名字——国建,国家建筑师,国内诸多的殿堂级建筑作品出自这里。&/p&&p&2014年1月,三角函数(后改名为Infinity Studio)组成立,该组主要负责开发。&/p&&p&2014年2月,CommandBlockLogic(CBL)组成立,专业的命令讨论组,此时MC还没出1.8,它的第四支柱命令方块(CB)尚未崛起。&/p&&p&这时的主吧主要是图文直播的天下(以至于泛滥到吧主禁绝直播,但这其实是矫枉过正还掰断了的那种,失去了图文直播,主吧等于失去了最重要的流量入口,你能想象笔记本吧没有小白求推荐贴的样子吗?这是后话),defanive2(德芙),海绵苏苏等人各种技术直播休闲直播,不亦乐乎。&/p&&p&当然作为一个模组玩家,图文直播压过了各种技术教程的坏处就是,工业教程不好找了(滑稽),然后有个叫兔9的家伙自己建了个名义上讨论工业2的贴吧——MC的各个领域都是这样,在主吧之外有自己的小圈子,构成了一个个“卫星城”,然后就像一个个西方大城市一样,人口扩张,导致核心区域空虚,例如图文吧的建立。图文吧本身没什么好说的,但是它是主吧图文直播分裂出去之后的产物,有必要提一提。&/p&&p&当时是14年初,主吧的吧务组开启了图文直播审核制度,要求明确直播结束时间,且通过率并不高;该制度持续一年后吧主在15年初全面禁止图文直播并将直播全部迁移到图文吧,“你们喜欢直播,那我给你单独开个吧直播”,这并不是一个明智的举措,毕竟我们都知道,把细胞核从细胞里拿出来,整个细胞全死了——然后图文吧也跟主吧的卫星吧一样,自身走上了小圈子异化的道路,相当于主吧的图文直播萎缩了。&/p&&p&同时在视频制作方面,MC从不缺人才,例如12dora——相信不止MC的玩家,很多人都熟悉刀哥,要不是新闻搞得太大,很有可能MC最火的主播就不是籽岷了;敖厂长也做过相当时间的MC视频,直到现在他的MC服务器仍在开放。&/p&&p&说起服务器,其实无数的MC私服也是MC的重要支柱,即使是Mojang在14年发布了EULA,禁止售卖影响游戏性的物品之后,国内的商业私服收入依旧不减(国情,国情),至于MC的插件,和插件或者CB修改出的屠龙宝刀有多赚钱,咱们不妨看看月亮岛事件,这里就不展开了。&/p&&p&除了刀哥,厂长,籽岷这几个流量最多的,还有舞秋风,大pi,马里奥红叔,SFchipan等知名主播来为MC吸引着流量——此时此刻(指的是2014上半年),游戏本身创意足够好,玩家社区足够强大,以及诸多玩家氪金/情怀的支持,无论是人流(别误会),还是钱流,抑或数据流,MC都有了,一片河蟹美好,鲜花着锦,烈火烹油的景象(当然这只是我一个晚入坑玩家对当时的想象)。&/p&&p&然后树大招风,微软这头巨兽出现了。从此MC走上了新的,不同的历史进程。&/p&&p&这场景有点像《海洋》纪录片,海豚鲨鱼海鸥鲣鸟吃得正尽兴呢,结果微软就像一头巨鲸般突然闯入,一张嘴全吃没了,弱小的Mojang就这样在2014年9月,被绑上了这台隆隆作响的战车,彼时1.8和Windows 8,Java 8刚刚发布,也算是个巧合凑足一套三八。&/p&&p&微软当然不会全盘接收愚蠢的Java代码啦,这摊子留给接下来的Jeb继续霍霍就可以了,他们则着手布置磁贴应用和后来的UWP,并将MC部署到其他平台上——直到几个月前,微软终于将非Java版本的MC(包括MCPE携带版)统一成一个名称“基岩版”,实现除Java平台外微软的大权独揽。&/p&&p&MC作为一个3D游戏,相对于其他2D沙盒(我针对的就是你泰拉瑞亚),更适合搭载在Hololens和其他诸多微软平台上,如同 &a href=&https://www.zhihu.com/question/& class=&internal&&微软花 20 亿美元收购 Minecraft 意义大吗?&/a& &a href=&https://www.zhihu.com/question/& class=&internal&&微软为什么要 25 亿美元收购游戏 Minecraft 的开发商 Mojang?&/a& 所说,一个搭载着大量用户尤其是青少年的游戏平台,融入微软的游戏平台中,将带来巨大的效益——前一阵子Mojang还搞买Java正版送UWP正版的优惠呢,微软在上面做的工作也一点不少啊。&/p&&p&然后由于MC在1.7和1.8之间的更新拖得太久,模组作者都被“养懒了”,再加上MC1.8的巨大变动,连累forge也要大改,然后模组社区陷入了相当一段停滞,直到1.8.9,forge才又开始更新,但是应者寥寥,神秘(TC)的作者倒是兴致高涨写了个TC5,结果显而易见,它凉了。可能这段不愉快的经历伤到了TC作者,直到现在,TC6才出第一个beta版本,慢的跟蜗牛一样。&/p&&p&总而言之,在1.8-1.9这段时间,模组是不太景气的(除了MC不再支持数字ID),而这时MC的第四支柱CB开始大幅强化,并在1.8.3出现了著名的盘灵古域地图,珀尔的中国地图(16年元旦开始制作)等,更加强大的CB和RPG地图就这样站在一起,而且原版RPG地图和模组不一样的是,模组受forge限制,有自己的适用版本,但是地图随便更新到哪个版本都可以发布——mcbbs的匠艺板块,展示分享区有不止一个做了两年甚至三年的地图,如此长的更新周期,有几个这样的作品?GTNH这个模组整合包据说也做了三年,但是人家立足于1.7这个万年续命版本,和地图还不一样。而MC自CB强化后,也再没有添加系统性的游戏机制,而是往RPG的方向发展,或许与此有关?不得而知。1.9的战斗更新更加“科学”,玩家的装备多了冷却时间,骷髅走位更加风骚,或许这是MC争议最大的一个更新,毕竟无脑连击是废了。&/p&&p&2015年底,主吧答疑组成立,基本的活动限于吧置顶的答疑帖,但同时也举办过一个重大的吧级活动“黑暗森林”,并获得了不错的效果。&/p&&p&此时(16年1月)网易已经在布局MC相关的工作,还发生了用钱从mcbbs挖人的事件——不过酬劳好像不算太多,一月600,说白了就是找个低价劳动力,最后也不了了之,但是这另一只藏在水下的巨鲸已经冒头。&/p&&p&//2016年4月份,MC迎来了又一次重大事件——我入坑了(你特么要脸不要脸啊),之前我&/p&&p&//一直以为自己是15年下半年入坑的,这里是一个萌新在向你们吹逼。&/p&&p&或许是我的信息获取能力不够强,感觉那个时期的国内MC社区也没闹出个什么大新闻,果然是不识庐山真面目,只缘身在此山中啊。顺带说一句,Unknown Domain组在2016年2月份成立。&/p&&p&微软相公分付Mojang这个郑屠再刷10个版本,不要见半点优化在上面,就这样Mojang急赤忙慌地更完1.9.4就上了1.10(这其实与Java的命名方式一样,不过Java再也没有1.9了),然后就是1.x.2之后必换大版本,最近的1.13更新(尚未发布)换了LWJGL 3.&/p&&p&1.10.2的时候(16年6月),模组开发者们总算找到了节奏,开始集中爆发更新,各大主流模组终于抛弃了1.7这具僵尸,拥抱新的版本,虽然可能有些不尽如人意(比如越发糟糕的优化),但终究是前进了。由于Mojang变快的开发速度,现在的模组开发也更加快速,更多的中小型模组出现,一些大型模组(例如格雷官方版)就这样留在了1.7。不过旧的模组死掉也为新的模组腾出空间,比如BC驴年也没更新个版本(前些天刚刚出了个alpha版,针对1.12),它的建筑部分被Rftools取代,炼油部分被TE取代,管道部分被EIO(末影接口),TE和MEK(通用机械)瓜分,装配台被AA(实用拓展)取代,也免得新手就知道BCBC。此外,一些新的模组制作人出现,例如16年7月出现的TeamRoots,开发了余烬(Ember),根源魔法(Roots)等模组。&/p&&p&原来的bukkit早就化作暗夜朽骨,新的服务端(Cauldron,Spigot,Sponge等等)争相涌现,不过还没有一个独霸天下,这个贴子或许能帮到你:&a href=&//link.zhihu.com/?target=http%3A//www.mcbbs.net/thread--1.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&服务端种类&i class=&icon-external&&&/i&&/a&,还有一些新的服务器端正在开发。&/p&&p&2017年,VS2017上线了,此IDE支持模块化安装,更加自由,启动更快,社区版不要钱……好吧这和我们讲的有关系吗。&/p&&p&同年5月,又是一个大新闻,网易代理了MC。鉴于国内厂商的代理质量,老实说有很多人(包括我)是不看好网易的,然后网易就真的不负众望,搞出个不按GPL协议修改forge的黑锅,一时民情汹汹,然后网易赶紧开放了修改的部分,forge自己也很无奈,毕竟网易的体量也太大,而且在中国。至于国服的体验嘛……只能说不尽如人意,不能自由添加材质与模组,甚至出现了“拔刀剑材质增加攻击距离”这样的蠢话,去贴吧看看或许有更多亲历者的体验,当然读者也可以自己找个服试试。&/p&&p&最近网易做的事倒是比较正轨,提出“开发者计划”招揽开发者和原来的MC硬核玩家,已经和多个mcbbs优秀小组和个人达成合作,也四处向国外模组作者索要授权(刚刚上线了拔刀剑),毕竟网易说到底,也是正规的代理商,没有一个人会无缘无故和它(包括它的钱与平台)过不去的。&/p&&p&日,Java 9上线,由于Oracle采用了新的模块化手段,导致其不能正常兼容Java 8的代码,不能用其启动MC。但是Oracle是不会坐视以前的代码失效的,接下来他们应该会逐步提高Java 9对以前代码的兼容性,并将Java 8的支持周期延长到2022年,目前Mojang和模组社区情绪稳定。&/p&&p&同时主吧恢复14年的旧制审核制度,图文直播重新起步,虽然仍有些艰难,但,总会好的,对吧?&/p&&p&MC的变现史到目前为止就告一段落,一个小型游戏,火了8年已经算是奇迹了,我在这里也不想预测它会在多久后以什么样的方式死掉,毕竟我也会在100年后老死。&/p&&p&未来可能有两门语言会更加深远地改变MC:&/p&&p&kotlin:forge自带scala类库,而scala据轮子哥所说,是“太阳系内复杂度超过C++的唯一语言”,对新人不算很友善,而1.7死掉的&a href=&//link.zhihu.com/?target=https%3A//github.com/shadowfacts/Forgelin& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Forgelin&i class=&icon-external&&&/i&&/a&在1.10又重新复活,另有人制作了&a href=&//link.zhihu.com/?target=https%3A//github.com/ocpu/Boxlin& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Boxlin&i class=&icon-external&&&/i&&/a&,这两个前置模组(任选其一)允许开发者使用kotlin这个谷歌钦定的安卓第一开发语言进行forge模组开发,问题在于有多少kotlin开发者知道MCforge这么个东西。&/p&&p&C#:更加擅长游戏制作,拥有比Java优雅得多的语法,即使是kotlin也不过是将C#的语法移植到Java的生态上,是微软的亲儿子MC的老大哥,自身也是家底雄厚,有&a href=&//link.zhihu.com/?target=https%3A//github.com/sharpdx/SharpDX& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SharpDX&i class=&icon-external&&&/i&&/a&这样优秀的开源库支持,还有VisualStudio的背书,事实上,已经有不止一个人用C#和Unity重写过MC。&/p&&p&回到题主的问题,那就是MC的创意,吸引玩家和变现史,为沙盒游戏指引了一条光明的方向,不再是小众玩家在3A大作抑或大型网游饭后的甜点,而是切实创造了一个生态——沙盒游戏的作者可以怎么做,应该怎么做,不应该怎么做。总有一天,会有人为游戏立书作传,而MC将在其中留下光辉灿烂的一笔。&/p&
很久以前,世界一片圆滑细腻。Notch说:要有方!于是就有了方。Minecraft并不是第一个沙盒游戏(虽然它资格够老),但它是“3D沙盒游戏里面要求最低的”,同时也是“小型沙盒游戏里唯一一个3D的”,这就是先声夺人,同时满足了3D和低配的需求。MC作为一个3D…
&blockquote&有一天就会发现,原本舒适的“摇篮”突然变成了“坟墓”。 &br&
——大前研一&/blockquote&&h2&&b&你以为你玩的只是个游戏?其实你在演示着未来&/b&&/h2&&p&我的世界是一款沙盒游戏,玩法多样,玩家在游戏中可以自由的构筑世界。&/p&&p&整个游戏世界由方块构成,这些像马赛克一样的方块构建了这个世界的所有元素。当然,这些方块也有各自属性。比如,土、木头、沙岩、花岗岩等,多种多样,宛如现实世界一般。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-bbab705fe77ee8ca21d83_b.jpg& data-caption=&& data-rawwidth=&720& data-rawheight=&405& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&https://pic4.zhimg.com/v2-bbab705fe77ee8ca21d83_r.jpg&&&/figure&&p&更有趣的是通过将这些元素进行不同组合,还会产生许多新的物质元素。比如火把、砖、篱笆、铲子、柜子、床等。甚至当玩家开采到红石这种矿石时,还能做出电线这样的设备,串联、并联也不在话下,活脱脱一个现代科技社会。&/p&&p&在游戏里我们并不孤独,还有许多小动物的陪伴。比如无限下蛋的鸡,不停生宝宝的猪和牛,剪不完羊毛的羊。虽然这些小动物们长得不尽人意,全凭方块拼凑而成,但它们却是游戏里物质资源不断生产的主力军。&/p&&p&《我的世界》可不是一款友善的种地游戏,在这个世界里还有许多不怀好意的生物。一到天黑,僵尸、巫婆、猪妖、末影人、啪啪怪等怪物们便开始四处游荡,若是碰见了玩家,他们一定会蜂拥而上。为了对付这些怪物,玩家们建碉楼,挖地洞,甚至筑起了护城河来抵御这些怪物。可这款游戏还会带给你另外一种体验,这种体验的感觉叫“防不胜防”。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-8d4fd28eb1df6136eaeadd6_b.jpg& data-caption=&& data-rawwidth=&720& data-rawheight=&450& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&https://pic3.zhimg.com/v2-8d4fd28eb1df6136eaeadd6_r.jpg&&&/figure&&p&当玩家们好不容易建好了高楼,筑好了碉堡,甚至连长城和护城河都一起用上,来确保自己的房产和物资安全时。一群智商远高于怪物们的生物出现了,他们的名字叫做&b&“另一批玩家”&/b&。如果是游戏初期,这些玩家或许只会徒手拆你家大门,可要是等到游戏能研制炸药的时候,那我只能说声抱歉了。无论你是否上线,他们都会背着TNT(超级炸药),埋在你家附近的各个角落,随后在远处点燃,看着你家精彩的螺旋爆炸。&/p&&p&许多小伙伴自从入手这款游戏后,便开始废寝忘食,没日没夜的构建着属于自己的世界。游戏模式的高度自由,建造方式的快速简洁,满足着玩家们的不同趣味。&b&但当你以为你只是玩个游戏时,其实你是在演示着人类社会未来的发展。&/b&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-a474ee7ebd97ec65fedaa_b.jpg& data-caption=&& data-rawwidth=&505& data-rawheight=&287& class=&origin_image zh-lightbox-thumb& width=&505& data-original=&https://pic4.zhimg.com/v2-a474ee7ebd97ec65fedaa_r.jpg&&&/figure&&p&什么,你觉得不可思议?那么让我们来看看,在《我的世界》里究竟发生了什么?又预言着怎样的未来?&/p&&h2&&b&这款游戏是对未来的预言&/b&&/h2&&p&“我的世界”因其游戏节奏的迅速,很快的缩小了“私有财产差距”这一现象。其原因是随着游戏进程的推进,科学技术及生产力得到迅速提高和发展,物质资源也因此极度丰富(甚至可再生)。&/p&&p&随着地盘的不断扩张,资源的极大丰富。玩家们常常猛地一下安静起来,发现之前的游戏方式陡然失去意义。曾经为了物质资源而不断展开的战争随着游戏科技的的进步,资源的不再短缺,让他们开始无所事事起来。玩家在游戏中丧失了明确的目标,若是饿了便打开仓库煮煮米,若是闲了便在自己建的城堡里荡来荡去,再无别的追求。不知从何时开始,一大部分玩家失去了在我的世界里创造的热情。而这群玩家,就成了游戏中的“低欲望”玩家。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-80c7ddf5ecb0ce_b.jpg& data-caption=&& data-rawwidth=&597& data-rawheight=&414& class=&origin_image zh-lightbox-thumb& width=&597& data-original=&https://pic3.zhimg.com/v2-80c7ddf5ecb0ce_r.jpg&&&/figure&&p&在这样的大环境下,人人都能过上丰衣足食的生活。抱团协作的人开始有了分流,因为物质资源的极大丰富,“低欲望”玩家们开始&b&“躲进小楼成一统,哪管春夏与秋冬”&/b&。除了偶尔下楼收把菜,钓个鱼,杀头牛,好似这个世界与他在无甚相关。而另一部分不甘于此的玩家,或重新寻觅团队,或开始独行构建世界,&b&但终究这样的情况渐渐成了一种现象,周而复始的循环下去。&/b&构建世界的玩家越来越少,热衷于“躲在小楼”的“低欲望”玩家越来越多。对于一个开放式,没有结局的游戏而言,一切的预言才刚刚开始。而这个预言的名字,叫做“低欲望社会”。&/p&&h2&&b&“低欲望社会”是什么?&/b&&/h2&&p&被英国《经济学人》誉为“世界五大管理大师”的大前研一先生率先对“低欲望社会”做出定义。在其著作的《低欲望社会》一书中,也对这一现象释义到:&b&“不断降低自己欲望的年轻人”。&/b&&/p&&p&他所描述的低欲望社会,具体来说指:年轻人不愿意背负风险,丧失物欲、成功欲,对于拥有物质毫无欲望,也没有很强的要出人头地的意愿。消费信心低落,对利率没有反应等。&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-a62a2169bfa5b5873d7f_b.jpg& data-caption=&& data-rawwidth=&350& data-rawheight=&350& class=&content_image& width=&350&&&/figure&&p&大前研一先生所著的《低欲望社会》一书,以日本为例,对“低欲望社会”进行初步的剖析。当今日本无论是科学技术还是经济水平,均属世界前列。书中明确的说明当今日本的年轻人正是这“低欲望社会”的一代。这一代年轻人较之自己的父辈,对物质需求的欲望急剧下降。他们大都认为即使再拼搏,大家也都差不多,何必把自己折腾来折腾去。日本优渥的社会福利待遇,成了这一代年轻人的挡风牌。他们不再有过多的追求,反之,却是极其享受这“低欲望的人生”。&/p&&p&《我的世界》亦是如此,随着《我的世界》中每个玩家里的箱子都装满了用不完的道具时,小院外的瓜果蔬菜永远也割不完时,院子中的飞禽走兽肆意草场时,玩家们渐渐开始无所事事,“不奋斗我就已经不错了”的想法在玩家身上得到体现。追求马斯洛需求理论塔尖的人本就是极少数,大多的人攀爬到中间,便觉得一切都是最好。&/p&&h2&&b&游戏粗浅的表现,是未来社会现实的投影&/b&&/h2&&p&&b&游戏粗浅的表现,是未来社会现实的投影。&/b&《我的世界》中这一低欲望社会表象,投向现实世界的现在和未来。&/p&&p&未来世界毋庸置疑的是一个科学技术高度发达,物质资源极度丰富的世界。社会劳动生产率的提高,社会必要劳动时间大幅减少的现象不单只会发生一件商品身上,更有可能的是所有商品的社会劳动生产率普遍得到提高。在这种情况下,一方面的确为物质资源提供了坚实的保障,另一方面过剩的产能却转化为难以清理库存。在这种物质资源过于丰富的情况下,私有财产的差距也随之进一步缩小。乍看之下,这好像还是一个挺不错的现象。&/p&&p&物欲的下降让他们对一切都迟钝开来,良好的社会福利又为他们日常生活得以正常展开提供了物质保障,一切都显得如此安逸,好像捧着瓶保温杯,坐在长椅上,望樱花云起云落,便此生足矣。什么武士道,什么大河魂,都随这樱花飘落碾落成尘。一群平成年代的宅男,敲着键盘,告慰着彼此,&b&“你瞧,这样的日子也挺不错!”&/b&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-4da3a8dbdc_b.jpg& data-caption=&& data-rawwidth=&720& data-rawheight=&408& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&https://pic1.zhimg.com/v2-4da3a8dbdc_r.jpg&&&/figure&&p&&br&&/p&&p&某机构曾对1000名日本首都圈的年轻员工做调查,想不想出人头地,非常想的只有12%,能出人头地的话最好28.8%,没有执念的43.4%,完全没兴趣的15.8%。&b&没有欲望,没有梦想,没有干劲&/b&,是日本这一代年轻人的真实写照。&/p&&p&社会福利保障优渥的北欧国家,也存在不少这样的“低欲望”青年。据英国智库莱加顿研究所的报告显示,北欧国家整体就业率仅为59.3%。以挪威为例,低就业率的一大主要原因就是20-24岁提前退休的年轻人数量显著提高。在坚实的社会福利保障支撑下,挪威的年轻人对物欲的追求不在敏感,大都觉得,既然是生活,就没必要把自己折腾的那么累。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-e9daa62a2df_b.jpg& data-caption=&& data-rawwidth=&600& data-rawheight=&337& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic4.zhimg.com/v2-e9daa62a2df_r.jpg&&&/figure&&p&而当下的中国,因物质资源的相对匮乏,社会福利保障体系的不完善,许多年轻人在安全感缺位的情况下,呈现出一种“高欲望”的拼搏状态。企业疯狂加班、“空巢青年”、被大城市限制的劳动力流动这些都是当下中国“高欲望”的表象体现。但是随着物质资源的不断丰富和人们的基本生活日益保障,我们也将会迎来由“高欲望”转向“低欲望”的社会现象问题。&b&如“丧文化”这般的思潮,恰似“低欲望社会”的苗头初露。&/b&&/p&&p&叹息社会固化,丧失成就感,维持基本生活的福利待遇,就这样小确幸的活一辈子也好。这般的景象和《我的世界》中“躲进小楼成一统”何其的相似。更别说像游戏里随着科学技术发展进步和物质资源愈加丰富后,还有多少人会选择踏踏实实拼搏,又会有多少人选择宅在家中,键敲天下。&/p&&p&普普通通的工作?认真的工作?拼命的工作?越来越多的人会选择普普通通的工作了此一生,毕竟对他们而言只要“还不错”就好。在这个未来的社会里,我们渐渐和《我的世界》的轨迹相平行,相重合,然后像游戏里一样,搬个椅子,每天看看夕阳就好。试问,在所有的物质生产资料都逐渐过剩,供给过度饱和,我们人人都衣食无忧,对于那些满足于“生存和繁衍”就足以的绝大多数人而言,还有什么理由不去享受这“低欲望”的人生?&/p&&h2&&b&“低欲望社会”是未来社会的主流现象&/b&&/h2&&p&有人说这也许是一个偶然现象,游戏只是碰巧描述了未来缤纷世界里的一种可能性。一款不错的游戏,的确存在对未来可能性的预测。但一款伟大的游戏,他所揭开的,即是这未来世界里的必然面纱。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-df3c28aeefbb9a69aaa7d1_b.jpg& data-caption=&& data-rawwidth=&720& data-rawheight=&540& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&https://pic2.zhimg.com/v2-df3c28aeefbb9a69aaa7d1_r.jpg&&&/figure&&p&2016年7月,“葛优躺”图片的走红,旋即兴起一场“丧文化”和“小确丧”的青年流行文化,持续至今。一种较传统相悖、略显慵懒的文化开始登上这历史的舞台。它是或许正在暗示,中国新一代的年轻人们,正开始从心理上,由“高欲望”逐步走向“低欲望”,甚至在未来的某一天,它将成为社会的主流现象。&/p&&p&大前研一先生对“低欲望社会”持相当不乐观的态度,认为这种环境最终将成为人们坟墓。虽然《我的世界》中呈现的“低欲望社会”是各项条件超前的,但不能否能,无论条件是否超前,现实生活的人也好,虚构社会的玩家也罢,大都避免不了走进这“低欲望社会”的坟墓。&/p&&p&&/p&
有一天就会发现,原本舒适的“摇篮”突然变成了“坟墓”。 ——大前研一你以为你玩的只是个游戏?其实你在演示着未来我的世界是一款沙盒游戏,玩法多样,玩家在游戏中可以自由的构筑世界。整个游戏世界由方块构成,这些像马赛克一样的方块构建了这个世界的…
谢邀。(第一次用好兴奋啊!)&br&在讨论哲学思想之前,先关注一下最后一句:&br&&blockquote&Wake up.&br&该醒了。&/blockquote&这让我想到了一个在MC中关于HIM(Herobrine)的传说:&a href=&//link.zhihu.com/?target=http%3A//minecraft.gamepedia.com/Herobrine%23Origins_and_popularity& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Herobrine&i class=&icon-external&&&/i&&/a&&br&其中有着这样一段话:&br&&blockquote&It has been reported that some victims of torture, during the act, would retreat into a fantasy world from which they could not WAKE UP. In this catatonic state, the victim lived in a world just like their normal one, except they weren't being tortured. The only way that they realized they needed to WAKE UP was a note they found in their fantasy world. It would tell them about their condition, and tell them to WAKE UP. Even then, it would often take months until they were ready to discard their fantasy world and PLEASE WAKE UP.&/blockquote&我粗鄙地翻译一下:&br&&blockquote&有报道称一些被折磨的受害者在被折磨期间会逃避到另一个幻想世界,一个他们可能不会再醒来的世界。在这种紧张性精神分裂状态下吓,受害者会生活在和他们正常生活一样的世界,只是没有那些折磨。他们(应该是现实世界的人格?)意识到除非能在幻想世界里找到一条笔记,他们将无法从这个世界中醒来。而那条笔记,将告诉他这个现实世界中所有的环境,告诉他他应该醒来。就算那样,他们也要花好几个月来为厉害幻想世界作准备。但是,&b&请务必一定要醒来啊!&br&&/b&&/blockquote&已无法考证两者哪个更先出现,但是我认为两者有着相似的思想所在,那就是&b&不要逃避现实的世界,无论幻想多么美好,我们最终还是要面对可能有些残酷的现实啊。&/b&&br&&br&&br&整首诗可以说是比较层层递进的。&br&首先它提到,游戏世界可能是美好的,但那只是游戏的梦境,在这之中是达不到最高的境界的。&br&&blockquote&That, it must achieve in the long dream of life, not the short dream of a game.&br&那层境界,它必须完成生命的长梦,而非游戏中黄粱一梦。&/blockquote&接着又提到现实,现实可能是残酷的,有悲伤,有黑暗,我们会惧怕它。但是宇宙是爱你的呀,宇宙是仁慈的呀,宇宙是你所眼见的山水鸟兽,宇宙是你所感受的空气、重力,甚至宇宙就是你自己呀,为什么要惧怕面对这个宇宙呢。&br&&br&最后升华了整个中心,游戏不过是从一个开始跳到另一个开始的美梦,而宇宙(现实)才是背后你真正生存价值的体现。&br&&blockquote&And the player was the universe. And the player was love.&br&玩家就是宇宙。玩家就是爱。&/blockquote&【好吧,我编不下去了&br&最后引用一段对于这首诗作者的访谈:&a href=&//link.zhihu.com/?target=http%3A//boingboing.net//ending-an-endless-game-an-int.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&原文&i class=&icon-external&&&/i&&/a&&br&&blockquote&TC(Interviewer): I think people have given your story the title “wake up”, because that line comes at the end, and it feels like it’s about different layers of dreams, or realities...??&br&&br&JG(Author)&strong&:&/strong& The word “dream” gets used, but it’s really a story about the dream of a game, and the dream of life. It’s dream as metaphor. I love the strangeness that comes when people get so lost in a game that the game becomes the world. Because you do get lost like that. Especially in something like Minecraft, that’s so endless. &b&You’re actually startled to come back into your life at the end of it. So I wanted to play with that moment, where you’re between two worlds, and for a short little period you’re not sure which one is more real.??&/b&&/blockquote&
谢邀。(第一次用好兴奋啊!) 在讨论哲学思想之前,先关注一下最后一句: Wake up. 该醒了。这让我想到了一个在MC中关于HIM(Herobrine)的传说: 其中有着这样一段话: It has been reported that some victims of torture, during the act, would…
其实MC在瑞典还是哪个欧洲国家的某贵族中学里被当做建筑类必修课(真可怕,中学就有建筑课(# ?Д?)的教辅软件……还有的发达国家的小部分小学把MC作为启智课程。可以看到MC在发达国家还是很被重视的……以上是我比较久以前在第一财经周刊上看到的一篇MC的专题稿的内容,记不太清了但是那篇文章提到很多MC的应用。好像还有建筑师和一小撮科学家也会用到MC?记不清了。只记得国外有个小工作室花了两年建成冰与火之歌的建筑群…连房间都有。&br&&br&提主朋友(其实是女友吧)的观点明显较为肤浅,而且带有负面感情(什么叫MC和吸毒一样啊(°ー°〃)……评价有点非理性哦……嘛,各人有各人的看法啦,不强求,只是求别黑。&br&&br&另外,艺术修养提的太高的话……曲高和寡吧……还有请原谅渣渣的我实在理解不了为什么素描可以提高艺术修养而建筑就不行。
其实MC在瑞典还是哪个欧洲国家的某贵族中学里被当做建筑类必修课(真可怕,中学就有建筑课(# ?Д?)的教辅软件……还有的发达国家的小部分小学把MC作为启智课程。可以看到MC在发达国家还是很被重视的……以上是我比较久以前在第一财经周刊上看到的一篇…
11.30更新:见后面地形生成和总结部分。过百赞了知乎小透明好开森,谢谢大家!&br&12.3更新:谢大家厚爱。回答一位 &a data-hash=&de96a5c62a75321ecf4815& href=&//www.zhihu.com/people/de96a5c62a75321ecf4815& class=&member_mention& data-editable=&true& data-title=&@兔子先生& data-hovercard=&p$b$de96a5c62a75321ecf4815&&@兔子先生&/a& 的问题,见文章:&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&答兔子先生&/a&,欢迎讨论。&br&&br&研究过MC地形生成和基础架构的强答一发。&br&长文预警。&br&&br&先说架构。&br&&br&MC分客户端和服务端两面,客户端主要负责渲染,服务端是本地服务器或者远程服务器(本地游戏两个都要跑,真正的MC服只跑服务端)。其实这俩就共享一个IWorld接口,然后这个接口里面乱的一塌糊涂。&br&&br&地图的基础单元是chunk,就是16*256*16的大方块,里面包含小方块。小方块可以是普通IBlock,可以带特殊数据(metadata),也可以有TileEntity(按照方块处理的实体)。区块里面还存了Entity就是实体(人啊,僵尸啊,猪啊还有掉落的物品之类的),实体的位置和方向都是浮点数float或double(双精度),因此拥有更大的自由度。&br&前后端(客户端和服务端)存储数据都靠的这个chunk,传输和生成也是以chunk为单位,所以会看到服务器卡的时候是一块一块冒出来的。chunk放到HashMap里面备用。&br&保存(1.2之后的原版服务端anvil文件格式)把32*32个chunk放到一个.mca(老版是.mcp)文件里面,用一种碎片化管理的方式来节省空间同时减少IO句柄数量,具体的格式MC Wiki上有详细的解释。&br&&br&所有MC的存储数据(注意不包括方块和音乐本身这种理论上是做死了的数据)都用一种二进制数据格式存储(NBT Named Binary Tags 命名二进制标签 ——Minecraft Wiki),里面包含数组数据、浮点数、整数或者字符串,其实结构相当简单,项目有树形结构,每个子项还有字符串形式的名字。它其实可以和JSON简单互译,做命令方块地图时会用到的JSON格式的实体数据就是这个东西。&br&&br&服务端动态加载/保存区块,然后用一个单线程来每个tick更新整个地图(所以很慢啊喂!),具体方式既粗暴又简单:遍历每个方块,看到有计划更新(比如水、岩浆、刷怪笼、植物这种)的就让他更新一下,看到TileEntity或者Entity每个tick都更新,同时处理玩家的数据:放方块/砸方块/开箱子/熔铁锭等等。对了,服务端还要负责更新光照(看后面)。&br&要是玩家走到了没有生成过的荒野,就会启动区块生成器来生成新的区块。生成这个特别复杂,也是我主要研究的问题,一会儿再讲。&br&&br&客户端维护一个非常 *智障* 的GUI系统,里面的渲染基本上都是legacy opengl直接瞎写的,GUI更新基本上都是全屏更新的,鼠标行动基本上全是轮询的,根本不管什么事件啦dirty区域啦缓存啦,就两个字:粗暴。当然MC总共也没什么GUI好谈,所以也就算了。&br&这里提一句其实服务器里面花花绿绿的字符的实现原理也非常暴力,就是用小结号§来代表下一个字符是格式转义字符,从k到r(好像?)都代表不同的意义,颜色或者加粗或者倾斜或者随机颜色,封面MINECRAFT大字旁边那行字就是用这个渲染的。什么?你问§怎么办?没办法。(摊手)&br&&br&除了GUI就是游戏主要的渲染部分。MC应用15年前的opengl技术成功地把每一个chunk编译成16个list(opengl中的列表,可以理解为把要画的步骤先告诉显卡以后再用只要告诉他列表的号码就行了,用来提升效率),每个16*16*16,不包括TileEntity和Entity——它们是每帧单独渲染的,所以MC生物一多就卡,而用bug透视的时候看不到方块但是能看得到生物和箱子。&br&客户端每帧要是看到新的改变过的chunk(被什么东西更新过了)就把它和它四周的chunk都重新生成一遍list(这里你会看到要是服务器加载很慢的话最远处的chunk是看得到截面的),这个过程叫做tessellation,就是把每个小的面片(长方形)放到一起组成一个大的顶点数组(就是一个大模型),一股脑儿传给显卡(因为从cpu传连续数据比零零散散地传数据要快很多)。&br&最后渲染的时候也是通过数学计算把在视野(按照玩家视角)中的list找出来一一调用渲染。这里有个小bug,就是筛选是否在视野中是假定这个list里面的所有东西都包含在这16*16*16的大方块里面的,所以如果你搞一个信标的话,它的光柱会一直延伸到天空上,但是一旦整个list被判断不可见,这个光柱也会一起消失掉。&br&&br&至于光照,光照也是在服务器端算好的(是不是难以想象?),我们看到的有渐变的平滑光照也是在方块光照上加工计算出来的。&br&光照有两部分,一部分叫做天光(sky light),也就是不算任何方块光源这个位置的光照强度。细节上,他是这么计算的:如果他直接被阳光照射(上面没有别的方块),那么亮度是16(或者说15,取决于你是从0开始数数还是从1开始),如果上面一个是半透明方块,那么亮度是上面的亮度减去版透明方块的阻碍值(比如树叶是2,玻璃是1),如果上面是不透明方块(比如石头),那么亮度是0。你可能要问,山洞里面也不是全黑啊?别急,慢慢讲。&br&区块生成的时候只会这样一遍地生成最简单的光照,而把光照的扩散放到一个队列里面等待服务端更新时一点点处理,每个tick能上限好像是1个事件。(理论上这是为了加快速度不让光照计算拖慢服务器来着,然而。。)处理事件是一个递归的过程,从这个方块出发,如果他6个方向(上下左右前后)的方块的亮度大于等于它,那就不递归(这种时候定义空气的光阻为1),否则把那个方向上的方块+(自身亮度-1)放进队列。当然要是减到0就不动了。&br&按照mojang员工的天真想法,既然光照最大是15(因为我从0开始数数),每一格至少减弱1,那么跟我源头上这一个坐标差距大于十五的我就不用管了咯?所以他们限制每次递归最多递归到这么远,之后不管亮度多少都留到下一个tick去吧。但是这里会有一个bug:如果山洞顶上被开了一个洞,从天上漏光,结果从山洞边缘开始计算天光,算到洞附近发现开始变亮了,但是又碍于距离限制不能再算下去,所以有时候就会看到非常突兀的亮度变化。&br&光照的另一部分叫做方块光(block light),也就是萤石啊南瓜灯啊火柴啊这种方块的灯光。这种也是碰到空气就-1,碰到不透明的石头就变成0,碰到半透明的就减去他的光阻量(代码里面叫做opacity,意为不透明度)。然后每个方块上的亮度以最大值为准,同样塞到前面的那个队列里面。服务端更新的时候计算。&br&&br&光照当然是用来渲染的,而这也是MC渲染极其重要的一部分。&br&每个方块的光照强度等于方块光和天光的最大值,那么晚上怎么办呢?其实天光在晚上的亮度就等于 原先亮度 - 夜晚的亮度降,也就是原来12级光,白天是15级阳光,算出来就是12级,晚上变成11级月光,就是 12 - (15 - 11) = 8级光。当然这个值不能小于0。&br&最早的光照对应就是一个线性的亮度,15级就是100%的亮度,7级就是50%,0级就是0%,后来发现这样效果不好,就改成了对数型:第(n-1)级的亮度是第n级的90%,这样亮度变化比较自然,而且哪怕光照为0也不是全黑(地狱/下界的这个系数是90%,0级光实际上还有46%的亮度,所以显得下界特别亮)。&br&后来觉得还不好,所以就干脆弄了一个二维的亮度图,横坐标是天光,纵坐标是方块光,这个在minecraft.jar里面找得到一个纹理文件(哎呀名字我忘了),就是这个。因此可以看到方块光偏暖色,天光偏冷色,也是这么来的。&br&&br&渲染更重要的当然就是大家关心的纹理,所谓MC像素之称的来源之一。&br&如果打开beta以后的minecraft,jar文件就会看到,纹理图片都是分开的图片,但是一个list(还记得list吗)只能用一个纹理单元,因此MC就用了一种取巧的做法:程序启动的/更换材质包时候把所有要用的纹理加载一遍然后拼到一张图上面,有时候会存到.minecraft/下的一个临时文件夹里面,再加载进显卡,就可以一起用了。当然Entity和TileEntity的纹理是不用这么干的,因为他们每个都是独立渲染的,不需要这么弄。&br&这也是为什么MC的API要求方块必须在使用之前就在Registry里面注册好,这样才能知道你到底要哪些纹理啊。(貌似这个问题在1.8采用了新的model模式后有了改善)这也是为什么在切换语言之后MC都要卡好久,因为切换语言也算作切换材质包,要把所有的小纹理图片再拼接一遍,还要把所有的chunk已经生成好的list重新生成一遍。(卡!)&br&&br&然后就要根据玩家的位置,角度,以及人称(第一人称/背后第三人称/面对第二人称)来计算投影矩阵(也就是摆摄像机)。这个过程是在客户端处理的,所以就算服务端卡爆了你的脑袋还是可以自由旋转的,至于为什么你可以看到多人中别的玩家的脑袋转,我猜是时不时地传一些数据回去做插值弄的。&br&最后直接丢给opengl画出来,三维渲染部分就基本完成了。其实这里MC还允许像光影mod那样的后期处理(post-processing),1.7左右的版本有一个“Super Secret Setting”的按钮在游戏暂停的设置里面,点一下可以在好多后期特效之间切换。&br&还要画天空、太阳、月亮、天气和云层,当然太阳月亮就是贴个图(月有阴晴圆缺哦,纹理文件有一个专门管月相的),下雨下雪就是一个动画,云层也就是一堆半透明的方块。&br&最后一个部分:第一人称的手和手上拿的东西,这个也是三维渲染的,不过难度不大,相信大家想想就明白了,也就不多说了。&br&&br&然后是介于三维和二维之间的粒子系统。粒子系统其实原来是用来模拟像水滴、碎片、树叶这样数量巨大的东西,以至于渲染成真正的三维模型代价过高,不得不用一个永远对着玩家的面来代替,后来就管所有这种永远面向玩家的面叫做“粒子”(particle),或者“标志板”(bulletin board)。&br&MC的粒子系统主要都是一些效果:入水/钓鱼是的水滴,吃饭时的食物残渣,多人模式中别人头顶上的名字,魔药产生的效果,经验球,爆炸的“冲击波”,都是粒子。(是不是有点大)&br&反正粒子一般放在同样的三维环境中渲染,用同样的投影矩阵,但是往往会被归为一个特殊的粒子引擎,因为它们作为没有体积的物体却经常要表现出一种重力感(就比如说水滴会跳起来再落下去),不能放到一般的三维场景中渲染。&br&&br&三维画完了是二维:下面的道具栏和聊天内容这种,按E可以赛艇(划掉)打开的完整物品栏(inventories)、各种可交互菜单(箱子、铁毡、熔炉、村民……)。这些凌驾于所有三维内容之上(因为不会被挡掉),最后被渲染,同时也充当与玩家交互的功能。(所以说MC的GUI很乱啦。。这里都不分清楚的)&br&&br&说到交互,肯定大家会想,电脑到底是怎么知道我选中了哪个面,往哪里放了东西了呢?其实判断选中的面还简单,做点小计算都不难,真正的难点在于客户端和服务器之间的传输协议。&br&传输协议,顾名思义,就是两者之间关于信息传输所商定的协议。具体的技术细节在&a href=&//link.zhihu.com/?target=http%3A//wiki.vg/Main_Page& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&wiki.vg&i class=&icon-external&&&/i&&/a&这里有详细说,我就不展开了。总结一下,就是:MC里面除了区块(chunk)的传输是全局的以外,其他各种东西的传输协议都是个管个的:箱子有箱子的传输协议,玩家有玩家的协议,熔炉有熔炉的协议。你作为玩家不管干了什么,改变了什么东西,都要通过相应的协议把实际内容传输给服务器端监听这个数据的东西,然后再由它对地图中的内容进行操作。&br&这里也能看出MC的一大毛病:该耦合的不耦合,该分离的不分离,协议一大堆各自为政,各种方块(block)又互相调用,乱成一团——一个基础的Block类足足有几千行。&br&&br&---------------------------------------------分割线-----------------------------------------------------&br&&br&说了这么多,我们来理一下思路吧。&br&&br&MC启动你的游戏有两种:本地 or 远程。&br&本地游戏需要 玩家操作GUI生成或加载世界 -& 启动本地服务端(IntegratedServer)-& 加载地图 -& 以单人单机模式提供游戏。&br&或者远程服务器由服务器管理员启动(官网上有下载原版的minecraft_server.jar,但是基本上现在用的都是水桶bukkit服),然后 启动服务端(原版是MinecraftServer) -& 加载地图 -& 以多人联机模式提供游戏。&br&&br&服务端启动后的基本流程是: 等待玩家连接并通过验证 -& 发送初始数据 -& 按需发送/加载/生成地 图 -& 更新(tick)地图内容,加上散播生物啊之类的操作 -& 发送地图 -& ……&br&而客户端则是: 连接服务端 -& 获取初始数据(时间、玩家位置、验证信息等) -& 获取地图(区块)数据 -& 渲染地图 -& 接受玩家输入(鼠标/键盘操作) -& 发送数据包给服务端 -& 获取更新过的地图 -& ……&br&当然理论上这里很多步骤都应该是多线程并行进行的,但是MC的这个代码写的啊……很多都没有优化,这也是为什么MC老是卡的重要原因之一。&br&&br&这大致就是整个MC里面在发生的事情的总结,接下去的内容比较技术向,请不愿看者直接跳到再下一个分割线。&br&&br&-------------------------------------------分割线---------------------------------------------------&br&&br&说说MC的地形生成吧。这个我研究的比较多,也想借此机会说一说。&br&&br&多图杀猫预警!!!!!!!!!!!&br&&br&更新:来填坑啦!&br&是时候祭出我尘封已久的mod开发工具了!&br&(本段内容基于1.10.2的fml反编译,使用的是IntelliJ idea进行开发,教程。。有空再说吧)&br&&figure&&img src=&https://pic1.zhimg.com/v2-ab89da9ade74_b.png& data-rawwidth=&1365& data-rawheight=&726& class=&origin_image zh-lightbox-thumb& width=&1365& data-original=&https://pic1.zhimg.com/v2-ab89da9ade74_r.png&&&/figure&好吧这是今年8月从fml官网上直接生成的,前面那个换电脑的时候丢了。。悲伤。。&br&不过这都不能阻止我的脚步!ctrl+alt+F10运行!&br&&figure&&img src=&https://pic3.zhimg.com/v2-f6cc05ed0a56de75ad68d9f7a2eaa252_b.png& data-rawwidth=&857& data-rawheight=&510& class=&origin_image zh-lightbox-thumb& width=&857& data-original=&https://pic3.zhimg.com/v2-f6cc05ed0a56de75ad68d9f7a2eaa252_r.png&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-84c184ef3adee6e4f1b9f510_b.png& data-rawwidth=&857& data-rawheight=&512& class=&origin_image zh-lightbox-thumb& width=&857& data-original=&https://pic1.zhimg.com/v2-84c184ef3adee6e4f1b9f510_r.png&&&/figure&OK!&br&&br&好吧说正事。&br&微软接手之后MC开发组搞了一个功能:生成世界时进入更多世界选项(英文版More world options)&br&&figure&&img src=&https://pic1.zhimg.com/v2-b88eca7a11584baf5799edc_b.png& data-rawwidth=&546& data-rawheight=&435& class=&origin_image zh-lightbox-thumb& width=&546& data-original=&https://pic1.zhimg.com/v2-b88eca7a11584baf5799edc_r.png&&&/figure&世界类型点到“自定义”(Customized),(这里1.10.2直接点就可以了,我记得老一点的版本要按住alt还是ctrl再点才回出来),然后按“自定义”(Customize)按钮就能调整世界生成的一些参数:&br&&figure&&img src=&https://pic4.zhimg.com/v2-4c26addee4d55bbe7386b6b_b.png& data-rawwidth=&710& data-rawheight=&474& class=&origin_image zh-lightbox-thumb& width=&710& data-original=&https://pic4.zhimg.com/v2-4c26addee4d55bbe7386b6b_r.png&&&/figure&(调成中文吧。。)&br&可以自定义的选项有四页,可以通过调整它们来直观地看到MC世界生成的各种参数:&br&&figure&&img src=&https://pic1.zhimg.com/v2-47a3b9ab9e2f55510ecdd227ffbfaddc_b.png& data-rawwidth=&870& data-rawheight=&668& class=&origin_image zh-lightbox-thumb& width=&870& data-original=&https://pic1.zhimg.com/v2-47a3b9ab9e2f55510ecdd227ffbfaddc_r.png&&&/figure&&br&&figure&&img src=&https://pic4.zhimg.com/v2-fbefafe1bfadb3_b.png& data-rawwidth=&870& data-rawheight=&668& class=&origin_image zh-lightbox-thumb& width=&870& data-original=&https://pic4.zhimg.com/v2-fbefafe1bfadb3_r.png&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-ce28f7ce539ffd_b.png& data-rawwidth=&870& data-rawheight=&668& class=&origin_image zh-lightbox-thumb& width=&870& data-original=&https://pic1.zhimg.com/v2-ce28f7ce539ffd_r.png&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-626d4fc8eade5f8ff084bca_b.png& data-rawwidth=&870& data-rawheight=&668& class=&origin_image zh-lightbox-thumb& width=&870& data-original=&https://pic3.zhimg.com/v2-626d4fc8eade5f8ff084bca_r.png&&&/figure&第三、第四页比较高级,之后说到具体的生成原理的时候再说,先来玩玩前两页的参数:&br&&figure&&img src=&https://pic1.zhimg.com/v2-4fce5de6930_b.png& data-rawwidth=&656& data-rawheight=&465& class=&origin_image zh-lightbox-thumb& width=&656& data-original=&https://pic1.zhimg.com/v2-4fce5de6930_r.png&&&/figure&&br&抬高海平面,变成岩浆海,乱七八糟的东西都不要,河流越少越好,生物群系Extreme Hills+(全是山),生成!&br&&figure&&img src=&https://pic1.zhimg.com/v2-1fa23b4cb7f8be_b.png& data-rawwidth=&1365& data-rawheight=&726& class=&origin_image zh-lightbox-thumb& width=&1365& data-original=&https://pic1.zhimg.com/v2-1fa23b4cb7f8be_r.png&&&/figure&厉害了我的哥!这里菱形的亮区也证明了我前面说的:光照更新的时候只能更新15格以外的,更远的哪怕有变化也不会继续更新下去。&br&&figure&&img src=&https://pic4.zhimg.com/v2-591bc5bde8f_b.png& data-rawwidth=&1365& data-rawheight=&726& class=&origin_image zh-lightbox-thumb& width=&1365& data-original=&https://pic4.zhimg.com/v2-591bc5bde8f_r.png&&&/figure&过一会儿就好了。可以看到MC加载地图是加载了一个方形的区域。&br&&figure&&img src=&https://pic1.zhimg.com/v2-25c2dc7faf6f0c4cdfa8c14_b.png& data-rawwidth=&703& data-rawheight=&391& class=&origin_image zh-lightbox-thumb& width=&703& data-original=&https://pic1.zhimg.com/v2-25c2dc7faf6f0c4cdfa8c14_r.png&&&/figure&远处的树是悬空的,因为另一边的区块还没生成出来。&br&&figure&&img src=&https://pic4.zhimg.com/v2-df88ccedbb5ff_b.png& data-rawwidth=&861& data-rawheight=&594& class=&origin_image zh-lightbox-thumb& width=&861& data-original=&https://pic4.zhimg.com/v2-df88ccedbb5ff_r.png&&&/figure&因为离岩浆太近,草地上的雪都化了。&br&&figure&&img src=&https://pic1.zhimg.com/v2-60ba215a925d70c1c04d0f37878cdf34_b.png& data-rawwidth=&318& data-rawheight=&64& class=&content_image& width=&318&&&/figure&按E可以赛艇。&br&&br&再来一个:&br&&figure&&img src=&https://pic2.zhimg.com/v2-28c94bfe01_b.png& data-rawwidth=&670& data-rawheight=&572& class=&origin_image zh-lightbox-thumb& width=&670& data-original=&https://pic2.zhimg.com/v2-28c94bfe01_r.png&&&/figure&泥土大理石统统不要,我就是要石头直接暴露在阳光之下。&br&&figure&&img src=&https://pic4.zhimg.com/v2-dcefc_b.png& data-rawwidth=&746& data-rawheight=&454& class=&origin_image zh-lightbox-thumb& width=&746& data-original=&https://pic4.zhimg.com/v2-dcefc_r.png&&&/figure&&br&感觉发家致富都靠这个了。&br&&figure&&img src=&https://pic3.zhimg.com/v2-bc21c5a9652_b.png& data-rawwidth=&677& data-rawheight=&468& class=&origin_image zh-lightbox-thumb& width=&677& data-original=&https://pic3.zhimg.com/v2-bc21c5a9652_r.png&&&/figure&&br&别的统统不要,Extreme Hills生物群系,生成!&br&&figure&&img src=&https://pic2.zhimg.com/v2-1db9c5d8fcb4d783cdcf69_b.png& data-rawwidth=&857& data-rawheight=&601& class=&origin_image zh-lightbox-thumb& width=&857& data-original=&https://pic2.zhimg.com/v2-1db9c5d8fcb4d783cdcf69_r.png&&&/figure&金矿与钻石的海洋!&br&&figure&&img src=&https://pic2.zhimg.com/v2-cd17a6dd8d5a5c2789fd_b.png& data-rawwidth=&875& data-rawheight=&607& class=&origin_image zh-lightbox-thumb& width=&875& data-original=&https://pic2.zhimg.com/v2-cd17a6dd8d5a5c2789fd_r.png&&&/figure&&br&我要完成一个小目标了!(虽然是创造)&br&&br&好吧就玩到这里,我们来看代码吧。&br&&b&警告:&/b&接下来有大量程序猿内容,患有&b&代码恐惧症&/b&者可跳过。&br&&br&地形生成的代码主要在这几个包里面:&br&&figure&&img src=&https://pic4.zhimg.com/v2-266c3c47c39aff55d0fdbff_b.png& data-rawwidth=&387& data-rawheight=&400& class=&content_image& width=&387&&&/figure&&br&net.minecraft.world.gen底下的是 不同世界类型(主世界/下界/末地/超平坦)、重要的地形元素(洞穴/峡谷)、噪声生成器(用来生成随机的东西):&br&&figure&&img src=&https://pic4.zhimg.com/v2-1fb69b0bf2cb9d46709f_b.png& data-rawwidth=&352& data-rawheight=&423& class=&content_image& width=&352&&&/figure&net.minecraft.world.gen.features是各种特征,有树(包括树的变种针叶林之类的)、植被(仙人掌、花草之类的)、地质(黏土clay、沙子sand)、地貌(湖泊、沼泽、下界的岩浆)、人文景观(地牢、沙井,但是村庄女巫房海底遗迹这些不在这里):&br&&figure&&img src=&https://pic3.zhimg.com/v2-f6103bfdac4b_b.png& data-rawwidth=&309& data-rawheight=&482& class=&content_image& width=&309&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-b64f2d8262eff164dc737f_b.png& data-rawwidth=&279& data-rawheight=&522& class=&content_image& width=&279&&&/figure&net.minecraft.world.gen.layers其实才是生成生物群系(biome),也就是从二维上确定每个竖列(1*256*1)是什么类别,net.minecraft.world.biome管的是生成生物群系之后确定每个生物群系的特征。这个包里面的东西很重要,一会儿一起说:&br&&figure&&img src=&https://pic3.zhimg.com/v2-89fe3c1ed0cb9c5eddca_b.png& data-rawwidth=&472& data-rawheight=&484& class=&origin_image zh-lightbox-thumb& width=&472& data-original=&https://pic3.zhimg.com/v2-89fe3c1ed0cb9c5eddca_r.png&&&/figure&net.minecraft.world.biome正如前面所说是各种生物群系的内容,这个也之后单独说:&br&&figure&&img src=&https://pic4.zhimg.com/v2-091ebc5cdabee870d3843_b.png& data-rawwidth=&293& data-rawheight=&650& class=&content_image& width=&293&&&/figure&&br&net.minecraft.world.gen.structure管的是复杂的大型人文景观生成(村庄,1.9之后的末地城,废弃矿洞,下界要塞,海底遗迹):&br&&figure&&img src=&https://pic3.zhimg.com/v2-6f56fe75eadf5db901f76_b.png& data-rawwidth=&395& data-rawheight=&506& class=&content_image& width=&395&&&/figure&&br&net.minecraft.world.gen.structure.template是按照文件中定义的方块模板来确定真正使用的方块,就像自然生成的草地并不是千篇一律的,而是会随机地旋转一定的角度,就是这个东西在帮忙:&br&&figure&&img src=&https://pic1.zhimg.com/v2-6f3fd8adae0_b.png& data-rawwidth=&377& data-rawheight=&150& class=&content_image& width=&377&&&/figure&net.minecraft.village和net.minecraft.world.end是管理村庄和末地的特殊活动(和村民交♂易,打末影龙):&br&&figure&&img src=&https://pic3.zhimg.com/v2-b45aebfdde3078baf7f8602_b.png& data-rawwidth=&412& data-rawheight=&380& class=&content_image& width=&412&&&/figure&&br&各个包的介绍就到这里,接下来介绍一下生成一个区块的整体流程,这里我截一段net.minecraft,world.gen.ChunkProvideOverworld(生成主世界区块)里面的代码来描述,加了中文注释:&br&&div class=&highlight&&&pre&&code class=&language-text&&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();
&/code&&/pre&&/div&重点的setBlocksInChunk函数:&br&&div class=&highlight&&&pre&&code class=&language-text&&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;
&/code&&/pre&&/div&感觉这一段还要解释一下。&br&x和z不是16,32这样的世界坐标,而是区块坐标,是世界坐标的16/1,也就是区块(1, 2)代表了世界坐标上面的(16,32)到(31,47)的矩形区域。&br&这里首先生成了一个低分辨率的生物群系,长宽是10*10,是因为接下来要用的密度图长宽是5*5。&br&然后生成密度图,这个待会儿也会讲。之所以说是密度图而不是高度图是因为它是三维的5*33*5,而不是二维的结构,所以只能称之为密度。&br&接下来是线性插值。一个区块是16*256*16,而为了让密度更为平滑,这里把密度图的长宽各放大4倍,高度放大8倍,再做线性插值就会比较光滑不会变化特别突兀。&br&有人要问,5*4不是20吗?33*8不是264吗?其实因为5*33*5多出来的一圈是不用的,而且插值需要两个值才能计算,所以四个采样点其实需要5个数据,33也一样是这个道理。&br&再浅显一点来说,密度图里面的0,1,2,3,4(java数组从0开始)对应的是区块x或z轴里面的0, 4, 8, 12, 16,既然我们要计算位置为13,14,15的方块,那就得用12和16对应的3和4来插值。&br&插值的过程从循环变量为j2的那个循环开始,0.125就是8分之1,因为高度上放大8倍,后面的0.25也是因为放大了4倍,lvt_45_1其实可以写得易懂一点的,也是一个插值变量,跟前面的d1,d2,d3,d4,d10,d11是一样的,只不过mojang的程序猿为了装逼特地写了这么个东西罢了。。所以说代码质量差不仅在于架构,还在于其中各种细节的写法,像这种绝对就不算优秀的代码。&br&&br&先到这里吧。。还有好多。。各位先看着哈。。&br&&br&--------------------------------------------分割线-------------------------------------------------&br&&br&总结全文,深化主旨,首尾呼应:&br&Minecraft是个好游戏,但代码写的确实不咋地。&br&&br&我最初接触MC还是13年,那时候大部分还在用1.4.2或者1.5,当然,都是盗版。&br&一开始只是玩单机,打生存,搭房子,有时候开创造玩玩红石电路,特别喜欢一个人晚上独自边打MC边听他的bgm。C418的歌,很宁静,让人很放松。&br&后来基本上大部分玩法都玩儿遍了,也不怎么愿意去花功夫做那种超大的红石电路或者建筑之类的,总想着找点别的花样。于是我装了Forge,下了很多mod,比如IndustrialCraft这种大名鼎鼎的,还有一些辅助性的mod,比如1.6.2之后就停止开发的SPC(Single Player Command 卖安利)。SPC是模仿WorldEdit的担任命令行mod,就是各种批量编辑,一个人搭建筑非常方便(因为WorldEdit WE只有多人能用,SPC可以单人模式用)。结果换1.7.2之后SPC不支持了,于是就萌生了自己开发一个的想法。(好吧最后还是流产了,当时水平不够做出来的性能很差,现在有能力做了又没了当初那种激情)&br&又因为刚好学java,听说MC也是用java写的,所以就网上找教程写mod。我还记得14年的时候架着100K不到的梯子屁颠屁颠地装fml的时候,去maven central仓库上下东西动不动就停住了,结果一晚上都没装好。&br&国内(哪怕到今天)都缺少真正有质量的mod开发教程,特别是中文的基本没有。贴吧上曾找到过一篇讲mod开发环境配置的,不过也止于1.6.2,到了1.7之后FML的整个API变了好多,原来的教程都用不了了。&br&后来在网上找到了一篇文章:&a href=&//link.zhihu.com/?target=http%3A//notch.tumblr.com/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&notch.tumblr.com/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a& ,是MC最早的开发者Markus Persson(马库斯·泊松,网名notch)的个人博客,还有一篇讲述他的地形生成算法的博文:&br&&a href=&//link.zhihu.com/?target=http%3A//notch.tumblr.com/post//terrain-generation-part-1& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&notch.tumblr.com/post/3&/span&&span class=&invisible&&/terrain-generation-part-1&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&大概翻译一段(水平有限):&br&&blockquote&&p&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.&/p&&p&在Minecraft最早的版本中,我将一张2维perlin noise图作为高度图来确定世界的形状。或者说,好几张perlin noise图。一张是整体海拔,一张是地形的粗糙度,一张是小范围的细节。对于每一列方块,其高度是 (海拔+(粗糙度*细节))*64+64。 海拔和粗糙度的图都是连续光滑的,大尺度的噪声图,而细节则更加参差不齐。这个生成方式有一个巨大的优点就是奇快无比,因为对于每个区块,只不过需要生成16*16*(噪声图的数量) 个采样点,然而缺点就是地图相当单调无趣。更重要的是,这种方式根本生成不了悬崖。&/p&&br&&p&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.&/p&&p&于是我改成了一种有些相似的、基于3维perlin noise的生成方式。我并不是对“地面高度”进行采样,而是将这个噪声的数值看做是“密度”(因此我说前面代码中应该是密度图而不是高度图 ——译者注),其中密度小于0的点都是空气而大于等于0的会成为大地(其实就是实心方块 ——译者注)。为了确保地图底端是地面而顶端是空气,我便把采样值加上采样点的高度(海拔高度)。(其实应该说是“减去采样点的高度”更易懂,因为大于0的才是方块,而水下的高度是负值 ——译者注)&/p&&br&&p&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.&/p&&p&不幸的是,我立刻碰上了可玩性和效率两方面的麻烦。因为有大量的点需要被采样所以效率很成问题,又因为缺乏大片的平地或平滑的山丘而缺乏可玩性。这两个问题共同的解决方案最终定为了这样:用一个更低的分辨率去采样噪声图(横向8倍,纵向4倍)(代码里面是横向4倍纵向8倍,可能跟后来的代码改动有关 ——译者注)并且进行线性插值(见setBlocksInChunk函数 ——译者注)。突如其来地,世界上有了平原、丘陵,而且单独浮在空中的诡异方块中的绝大部分也都消失无踪了。(其实还有很多了啦 ——译者注)&/p&&/blockquote&这激起了我浓厚的兴趣。于是我把长长的代码打印下来,8号字体,一面3列,足足十几张纸,每天一有空就看代码,读代码,用笔做注释,并且为我觉得命名不当的部分想一个更好的名称。到现在这些还藏在我的书桌里面。这些东西百度根本搜不到,google也很少有结果,而以fml对这些代码的注释程度来看他们根本懒得去读这些既混乱又不必要读懂的代码。&br&当然后来还是不了了之了。我自己也仿造过MC,当时就是完全追星似的疯狂模仿,用的java,跟MC一样的LWJGL库,同样(好吧我承认这么做有盗版的嫌疑)的纹理,几乎相同的文件格式、区块大小、渲染原理、(基于notch文章的)地形生成、体系架构,几乎就是我前面写的这么多的一个自己的重现。我甚至还学习MC混淆了编译后的代码。可笑的是,迫于当时的水平,效率竟比MC原版还要低。最后开发进程是因为我U盘的丢失而终止的,源码自然也丢了,只剩一份速度奇慢的编译版本,下载地址:&a href=&//link.zhihu.com/?target=http%3A//pan.baidu.com/s/1eQvM0U2& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&pan.baidu.com/s/1eQvM0U&/span&&span class=&invisible&&2&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&,有兴趣的自己下载来玩玩吧。&br&今年想过要重制,结果忙了一个夏天又泡汤了,现在想来总觉得有点可惜。&br&后来被朋友忽悠着去打了一段时间MC服务器,也买了正版,不过服务器没有打过一个月的,基本两三个星期就崩掉关服不开放了,也不知道是我的问题还是整个现状都这样。(我真的没有干过坏事啊!)据说国内开一个服很快就会有黑客来勒索要钱否则就DDoS攻击(Distributed Denial of Service分布式拒绝服务攻击,用大量肉鸡的流量淹没对方,让对方或因为过高的流量费用而关闭服务,或因为过低的响应速度而降低服务质量到一个不可接受的程度),也不知道是不是真的,反正崩了好几个服,打拼好久的家园东西都没了,也就不打了。&br&最近确实玩的不多,也就偶尔休息的时候像以前那样,搞搞建筑,搭搭红石电路之类的,都是单机玩,一方面没空,一方面也有点享受那种独自一人的感觉和C418的背景音乐。&br&&br&我知道这段算不上问题的“从编程的角度来看”,不过写了前面这么多,也使我回想起来以前发生过的不少。要不是这个答案,也不知道这段往事会被封存到什么时候。就借此机会,一吐为快吧。希望大家不必计较,并且欢迎任何技术上的讨论。&br&&br&以上。&br&&br&&br&&br&&br&各位看官看完记得点个赞再走啊。。。谢啦。。。
11.30更新:见后面地形生成和总结部分。过百赞了知乎小透明好开森,谢谢大家! 12.3更新:谢大家厚爱。回答一位
的问题,见文章:,欢迎讨论。 研究过MC地形生成和基础架构的强答一发。 长文预警。 先说架构。 MC分客户端和服务端两面…
&b&更新:&/b&&br&&i&回答中举的例子主要体现的是记忆法中将需要记忆的 内容图像化的这一点,而这点正是用“记忆宫殿”记忆课文的基础。&/i&&br&&br&&b&原答:&/b&&br&&i&写在前面:&/i&&br&&blockquote&这个问题除了得是Minecraft玩家,还得知道什么是记忆宫殿,可以看专栏文章的讲解,“如何从零打造属于你的记忆宫殿,并学会使用定位法轻松记忆: &a href=&https://zhuanlan.zhihu.com/p/?refer=extremememory& class=&internal&&&span class=&invisible&&https://&/span&&span class=&visible&&zhuanlan.zhihu.com/p/24&/span&&span class=&invisible&&464729?refer=extremememory&/span&&span class=&ellipsis&&&/span&&/a&&/blockquote&&br&&b&回到本问题,这里举个经典例子:用minecraft记文言文《桃花源记》&/b&&br&&br&&figure&&img src=&https://pic3.zhimg.com/v2-3fdc01d5e84c3bf5827a_b.jpg& data-rawwidth=&580& data-rawheight=&326& class=&origin_image zh-lightbox-thumb& width=&580& data-original=&https://pic3.zhimg.com/v2-3fdc01d5e84c3bf5827a_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-ebbe1c2a321c7b9a2442_b.jpg& data-rawwidth=&640& data-rawheight=&332& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic3.zhimg.com/v2-ebbe1c2a321c7b9a2442_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-676db1c29fc81d828e455c_b.jpg& data-rawwidth=&640& data-rawheight=&332& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic4.zhimg.com/v2-676db1c29fc81d828e455c_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-505dd8c2c2d5aed10178aa_b.jpg& data-rawwidth=&640& data-rawheight=&332& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic3.zhimg.com/v2-505dd8c2c2d5aed10178aa_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-e599d5b3440afd3779cca_b.jpg& data-rawwidth=&640& data-rawheight=&332& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic2.zhimg.com/v2-e599d5b3440afd3779cca_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-215c693e087ce37e7cb58c64e9f9ced7_b.jpg& data-rawwidth=&640& data-rawheight=&332& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic4.zhimg.com/v2-215c693e087ce37e7cb58c64e9f9ced7_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-352f42fdd392a_b.jpg& data-rawwidth=&640& data-rawheight=&332& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic2.zhimg.com/v2-352f42fdd392a_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-6d1d28cbbe7640ddbd8eb2_b.jpg& data-rawwidth=&640& data-rawheight=&332& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic3.zhimg.com/v2-6d1d28cbbe7640ddbd8eb2_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-e8dc17f2aaea680d1b8d904_b.jpg& data-rawwidth=&640& data-rawheight=&332& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic1.zhimg.com/v2-e8dc17f2aaea680d1b8d904_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-9f5aefbf2a7c5fbade8a05_b.jpg& data-rawwidth=&640& data-rawheight=&332& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic2.zhimg.com/v2-9f5aefbf2a7c5fbade8a05_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-3da4cfbc5d962efe549adec_b.jpg& data-rawwidth=&750& data-rawheight=&389& class=&origin_image zh-lightbox-thumb& width=&750& data-original=&https://pic1.zhimg.com/v2-3da4cfbc5d962efe549adec_r.jpg&&&/figure&&figure&&img src=&https

我要回帖

更多关于 小麦种植管理 的文章

 

随机推荐